guia 2 modulos

Upload: rodrigo-castro-bou

Post on 14-Oct-2015

44 views

Category:

Documents


0 download

TRANSCRIPT

  • Ciclo II_2013 1

    Gua de laboratorio No. 2 MODULARIDAD

    Objetivo: Aplicar la tcnica de Modularidad a la solucin de problemas y codificarlas en C. Contenido:

    Parte I : Ejercicio Resuelto, utilizando la Tcnica de Modularidad, hasta flujograma. Parte II : Ejercicios para completar, con la misma tcnica. Parte III : Programas con errores para ser corregidos. Parte IV : Ejercicios propuestos.

    Metodologa de trabajo: Semana 1:

    La Parte I es para estudio del estudiante, por lo que debe ser leda antes del laboratorio.

    La Parte II de la gua, consta de ejercicios que el estudiante debe completar por su cuenta.

    El estudiante digita y depura dos de los ejercicios indicados por el instructor de la Parte III; programas que sern subidos al Aula Virtual al final de la sesin..

    El instructor indica a los estudiantes la tarea para la prxima semana, que consiste en: - 2 ejercicios de la Parte III, a ser subidos en la prxima sesin

    (Semana 2) - 2 ejercicios de la Parte IV, hasta flujogramacin, en el

    cuaderno o a parte

    Semana 2:

    Subir los dos ejercicios de tarea de la Parte III, en los primeros 10 minutos de la sesin de laboratorio.

    El estudiante: codifica, digita y depura los ejercicios de la tarea de la parte IV..

    Los programas deben de guardarse, compilarse y ejecutarse. Guardar como: g2_ej###.cpp en donde, ### es el nmero de ejercicio segn gua.

    Esta semana no se deja tarea

    PARTE I Aplicacin de Modularidad pas a paso a un ejercicio. Revise

    el desarrollo del ejercicio identificando cada una de las etapas del Anlisis Estructurado. Realice las consultas necesarias a su instructor.

    UNIVERSIDAD DE EL SALVADOR

    FACULTAD DE INGENIERIA Y ARQUITECTURA

    ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS PROGRAMACIN I Ciclo II_2013

  • Ciclo II_2013 2

    Ejercicio 1

    I Planteamiento General

    Entrada de datos Salida de Datos

    Nmero entero Nmero entero

    Nmero de combinaciones posibles

    II Top Down

    Cosas que hacer: 1. Leer y validar los datos (en modulo leer) 2. Calcular el factorial de n (en mdulo factorial) 3. calcular el factorial de x (en modulo factorial) 4. Calcular el factorial n-x (en modulo factorial) 5. Calcular el nmero de combinaciones (en el mdulo principal) 6. Imprimir el nmero de combinaciones (en el modulo principal)

    Se utilizar un mdulo de lectura (que lee y valida un dato), el mdulo factorial (que calcula el factorial de un numero), el clculo de combinaciones y la impresin se harn en el mdulo principal.

    III Metodologa para resolver problemas aplicado a cada mdulo

    Mdulo factorial

    Qu hace?: Calcula el factorial de un nmero.

    Entrada de datos Salida de Datos

    Recibe Retorna

    Disee un flujograma que calcule el nmero de combinaciones posibles entre dos

    nmeros enteros positivos n, x

    Sabiendo que: n>x

    Combinaciones = n!___ x!(n-x)!

    principal

    factorial leer

  • Ciclo II_2013 3

    Numero entero El factorial del nmero Cmo lo hace?: Variables de Salida: No hay, no se imprime nada. Variables de Entrada: No hay, se recibe un nmero positivo. Restriciones: No hay Parmetros: Nombre Tipo Descripcin

    dato Entero Nmero entero.

    Proceso: Dato es un nmero (entero y positivo) que se recibe del mdulo principal

    Variables de Proceso: Nombre Tipo Descripcin

    f Entero Representa el factorial de nmero entero; acumulador vi=2, vc=i, vf=?

    i Entero Representa el contador que cuenta de uno en uno desde 2 hasta un nmero especfico (dato)

    Solucin:

    Factorial ( dato )

    Retornar f

    Si

    f = 1

    dato>=2

    i = 2, dato,1

    f = f * i

    Si x=5; y f = x! f = 1*2*3*4*5 Recuerde que 0!=1 y 1!=1 Ahora si x=dato, f= 1*2*3*4**dato Note que tenemos un contador que va desde 1 hasta el valor que tenga dato. Por lo tanto podemos escribirlo: f=1, f=f*i; en donde i va de 1 a dato, y como multiplicar por 1 no altera el nmero en s, lo podemos sacar del contador, quedndonos de la siguiente forma:

    f=1 dato >= 2? Si: i=2, dato, 1 { f= f*i No: No hacer nada El valor final de f, se devuelve al mdulo principal //que representa el factorial de dato

  • Ciclo II_2013 4

    ----------------------------------------------------------------------------------------------------------------------------------------

    Mdulo leer

    Qu hace?: Lee y valida un nmero entero positivo

    Entrada de datos Salida de Datos

    Numero entero Envia el nmero entero

    Cmo lo hace?: Variables de Salida: No hay, retorna el nmero ledo Variables de Entrada:

    Nombre Tipo Descripcin

    num Entero Nmero entero.

    Restricciones: num > 0 Parmetros: No hay. Proceso: leer num

    Mientras (num

  • Ciclo II_2013 5

    ---------------------------------------------------------------------------------------------------------------------------------------

    Mdulo principal

    Qu hace?: Invoca los mdulos de lectura y factorial, calcula e imprime el nmero de

    combinaciones.

    Entrada de datos Salida de Datos

    Recibe

    Nmero entero Nmero entero

    Nmero de combinaciones posibles

    Enva los datos de entrada

    Cmo lo hace?: Variables de Salida:

    Nombre Tipo Descripcin

    combi Entero Nmero de combinaciones posibles.

    Variables de Entrada: No hay, se reciben los valores de retorno de leer (2 valores) y de factorial (3 valores). Restricciones: No hay. Parmetros: No hay. Proceso:

    Variables de proceso:

    Nombre Tipo Descripcin

    n Entero Primer nmero para calcular el combinatorio

    x Entero Segundo nmero para calcular el combinatorio

    a Entero Factorial de n

    b Entero Factorial de x

    c Entero Factorial de n-x

    n = leer ( ) // Invoca leer

    x = leer ( )

    Error, // Validacin de datos

    n = leer ( )

    x = leer ( )

    a = factorial ( n ) // Calculo de n!

    b = factorial ( x ) c = factorial ( n-x ) combi = a / (b * c)

    Mientras n

  • Ciclo II_2013 6

    Solucin:

    PARTE II Los siguientes ejercicios no estn terminados, analizando

    todo lo que se le presenta complete lo que haga falta:

    I Planteamiento General del Problema

    Entrada de datos Salida de datos

    Inicio

    n = leer ( )

    x = leer ( )

    n = leer ( )

    b = factorial ( x)

    a = factorial ( n )

    x = leer ( )

    Mientras

    ( n < x )

    *

    *

    c = factorial ( n-x )

    combi = a / ( b*c)

    El nmero de

    combinaciones posibles

    es: , combi

    Fin

    Error, el 1er

    nmero debe

    ser mayor que

    el 2do.

    2. Disee un flujograma que calcule el nuevo salario de 15 empleados de una empresa,

    sabiendo que si el salario actual es menor que $1000.00 se le aumentar el 15% y en caso

    contrario, se le aumenta el 12%. (Faltan los subflujogramas de cada mdulo y el flujograma

    principal)

    nta el 12%.

  • Ciclo II_2013 7

    Cantidad de empleados (15)

    Salario Actual

    Lmite de salario para aumento ($1000.00)

    Porcentajes de aumento (15% y 12%)

    Nuevo Salario del empleado

    Nmero correlativo del empleado

    II Diagrama Top-Down Cosas que hacer: 1. Leer y validar el salario de un empleado

    2. Calcular el nuevo salario 3. Imprimir el correlativo y el nuevo salario de cada empleado

    Se disear un mdulo para cada una de las tareas anteriores y el principal que las controla:

    III Metodologa para resolver problemas a cada mdulo

    Mdulo Leer

    Qu hace? Lee y valida el salario actual y lo retorna Note que este mdulo es exactamente igual al mdulo leer del ejercicio anterior, solo cambia el tipo de dato.

    Entrada de datos Salida de datos

    LEE Salario actual de un empleado

    Retorna el salario actual validado

    Cmo lo hace? Variables de Salida: No hay; retorna el valor del salario actual. Variables de Entrada:

    .Nombre Tipo Descripcin

    sa Real Salario actual de un empleado

    Restricciones: sa >0 . Parmetros: No se utilizan.

    principal

    leer

    calcular

    imprimir

  • Ciclo II_2013 8

    Proceso: Leer sa Mientras sa

  • Ciclo II_2013 9

    Qu hace? Imprime el nmero correlativo del vendedor y, su respectivo salario.

    Entrada de datos Salida de datos

    Recibe:

    El nmero correlativo

    Recibe el nuevo salario

    Nmero correlativo

    Nuevo salario

    Cmo lo hace? Variables de Salida

    Nombre Tipo Descripcin

    num Entero Representa el nmero correlativo

    nu_s Real Representa el nuevo salario

    Variables de Entrada: No hay. Recibe el nmero correlativo y el nuevo salario del empleado Restricciones: No hay. Parmetros:

    Nombre tipo Descripcin

    num Entero Numero correlativo que identifica al empleado

    nu_s Real El nuevo salario de un empleado.

    Proceso: No hay. Slo imprime. Variables de Proceso: No hay.

    Solucin: DIBJELA . . .

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Mdulo Principal

    Qu hace?: Invoca los otros mdulos. Enva parmetros, si es necesario, y recibe los valores de retorno, proceso que repite 15 veces.

    Entrada de datos Salida de datos

    Recibe

    El salario actual

    El nuevo salario

    Enva:

    El salario actual

    El nmero correlativo del vendedor

    El nuevo salario

    Cmo lo hace? Variables de Salida: No hay; enva los valores de salario actual, nmero correlativo y el nuevo salario del vendedor.

    Variables de Entrada: No hay; recibe los valores de retorno s1 (salario actual) y s2 (salario final).

  • Ciclo II_2013 10

    Restricciones: No hay Parmetros: No hay Proceso: No hay clculos, solamente invoca los otros mdulos para leer, calcular e imprimir; enva parmetros y recibe valores de retorno, proceso que se realiza 15 veces. DESDE s1 = leer() //invoca mdulo leer i=1, s2 = calcular(s1) //invoca mdulo calcular 15, 1 imprimir (i, s2) //invoca mdulo imprimir Variables de Proceso:

    Nombre Tipo Descripcin

    i Enetro Contador de empleados

    s1 Real Salario actual de cada empleado.

    s2 Real Salario final o con aumento de cada empleado

    Solucin: Dibjela......

    I PLANTEAMIENTO GENERAL DEL PROBLEMA:

    Entrada de datos Salida de Datos

    Tipo de llamada

    Duracin, en minutos, de cada llamada

    Costo de cada llamada Nmero de llamadas realizadas

    Total a pagar por todas las llamadas

    3. Disee un flujograma para calcular lo que hay que pagar por un conjunto de llamadas

    telefnicas. Por cada llamada se ingresa el tipo (internacional, nacional o local) y la duracin

    en minutos. El criterio para calcular el costo de cada llamada es el siguiente:

    Internacional Nacional Local

    3 primeros minutos $7.56 3 primeros minutos $1.20 $ 0.2 por minuto

    Cada minuto adicional $3.03 $0.48 por minuto adicional

    El flujograma debe de imprimir el costo de cada llamada, la cantidad de llamadas realizadas y

    el total a pagar por todas las llamadas hechas.

    Usted debe aplicar la metodologa para resolver problemas a cada mdulo formulado.

  • Ciclo II_2013 11

    II TOP DOWN:

    Cosas por hacer:

    1. Leer y validar datos (tipo y duracin llamada) //modulos leer1 y leer2 2. Calcular el costo de cada llamada //modulo costo 3. Acumular los costos y contar el nmero de llamadas //modulo principal 4. Imprimir datos salida. //modulo salida

    Se tienen dos mdulos de lectura, uno para el tipo de llamada y otro para la duracin de la llamada, ya que las restricciones son diferentes para cada tipo dato.

    Tendremos un mdulo costo que calcula el valor de cada llamada, recibe del principal el tipo de llamada y de leer2 la duracin de la llamada.

    La impresin se realiza en un mdulo aparte

    En el mdulo principal se controla el ciclo repetitivo, se acumulan los costos de todas y cada una de las llamadas y, se lleva el conteo del nmero de llamadas realizadas.

    III Metodologa para resolver problemas:

    Qu hace cada mdulo?: Mdulo leer1: Lee y valida el tipo de llamada, retorna el tipo de llamada

    Mdulo leer2: Lee y valida la duracin de una llamada, retorna la duracin.

    Modulo costo: Invoca mdulo leer2, calcula el costo de una llamada, imprime este costo y lo retorna.

    Modulo salida: Imprime el nmero total de llamadas y el costo de todas ellas.

    Modulo principal: Invoca leer1, (recibe tipo de llamada), invoca costo (recibe el costo de llamada); acumula costos de llamadas y cuenta las llamadas realizadas; por ltimo invoca modulo salida. Enva PARMETROS ACTUALES a costo y salida.

    principal

    costo salida leer1

    leer2

  • Ciclo II_2013 12

    a) Desarrolle cada mdulo. b) Disee otro Top Down y complete la tcnica.

    PARTE III Codificaciones de los problemas de las partes I y II 1. El siguiente programa corresponde al algoritmo para calcular el combinatorio presentado en las

    pginas: 2, 3, 4 ,5 y 6 . Digite, guardar (g2_ejer1.cpp) compile y depure los errores que haya cometido para que el programa funcione sin problemas.

    #include #include main() { int n, x, combi; long a,b, c; n = leer(); x = leer(); while(n=2) for (i=2; i

  • Ciclo II_2013 13

    2. Programa del algoritmo que calcula el nuevo salario de los empleados presentado en las pginas de la 6 a la 10. Usted debe: Digitar, guardar (g2_ejer2.cpp), compilar y depurar los errores para que el programa sea ejecutado sin problemas:

    #include #include float leer(); main() { int i; float s1, s2; for (i=1, i

  • Ciclo II_2013 14

    3. Programa correspondiente al problema presentado en las pginas 10 y 11; contiene varios errores, que usted debe corregir; para ello digite, guarde (g2_ejer3.cpp), compile y depure el programa:

    #include

    #include main() { int b, ti,ni=0; float ct; puts("Digite 1 si tiene datos"); scanf("%i",&b); while (b=1) { ni++; ti=leer1(); c=costo(ti); ct+=c puts("Digite 1 si tiene ms datos"); scanf("%i", &b); } imprimir(ct, ni), getch(); return 0; } int leer1() { int tipo; printf("\n\n Tipo de llamada:\n \t\t 1: internacional\n\t\t 2: nacional \n\t\t 3: local"); scanf("%i", &tipo); while ( tipo3) { puts("Error, intente de nuevo"); scanf("%i", tipo); } return tipo; } float costo(float t) { float costo1; int m; m=leer2();

  • Ciclo II_2013 15

    4. El siguiente programa determina si un ao es bisiesto o no, imprime el ao y el mensaje

    que corresponda (es bisiesto o no es bisiesto). Trabaja con aos de 1900 en adelante y puede probar con varios aos a conveniencia del usuario para lo cual se utiliza un ciclo while y una bandera. Guardarlo como: (g2_ejer4.cpp), compile y depure el programa:

    switch (t) { case 1: if (m>3) costo1=3*7.59+3.03*(m-3); else costo1=3*7.59; break; case 2: if (m>3) costo1=3*1.20+1.20*(m-3); else costo1= 3*1.20; break; case 3: costo1=0.2; break; } printf("\n\n\n El costo de la llamada es \t$ ", costo1); getch(); return costo1; } void imprimir (float total, int n) { printf("\n\n\n El numero de llamadas realizadas es:\t %i",n); printf("\n Y se debe cancelar un total de: %i dolares", total); return; } int leer2() { int min; puts(Digite el tiempo de duracin de la llamada en minutos); scanf("%i", &min); while(min1900)

    Invoca el mdulo Bisiesto, enva el ao ledo, recibe el resultado del mdulo.

    Imprime el ao y el mensaje adecuado

    Mdulo Bisiesto:

    Recibe el ao a trabajar

    Comprueba si el ao en cuestin es bisiesto (1) o no (0)

  • Ciclo II_2013 16

    /* Este programa tiene como objetivo calcular si un ao es bisiesto o no utilizando modularidad o funciones */

    #include #include #include main() { int year, bisiesto, otro=1; system("cls"); while( otro !=1) { printf("\nIntroduzca el anyo: "); scanf("%i", &year); while(year < 1900); { printf("\nPor Favor vuelva a Introducir el ao: "); scanf("%i", &year); } Bisiesto = Bisiesto(year); // invocacion de la funcion system("cls"); if (bisiesto == 1) printf("\n\t El anyo %d es Bisiesto\n", year); else printf("\n\t El anyo %d No es Bisiesto\n\n\n", year); printf("\n\nquiere comprobar otro anyo? si digite 1 no digite 0\t"); scanf("%i", &otro); while(otro !=1 || otro 1=0) { puts("Error digite 1 o 0 as:"); puts("otro ao =1, no ms aos = 0); scanf("%i", &otro); } printf("\n\n\t Para finalizar presione cualquier tecla......") ; getch(); } // Definicion de Funciones int Bisiesto(int agno); { /* Funcion que se encarga de calcular si un ao es bisiesto o no si el ao es bisiesto retornara 1; sino retornara 0 */ int bisi; if ((agno%4 1= 0) && (agno%100 == 0) || (agno%400 != 0)) bisi = 0; else bisi = 1; return; }

  • Ciclo II_2013 17

    5. El siguiente programa convierte una longitud en metros a yardas o pies, segn requiera el usuario. (g2_ejer5.cpp), compile y depure el programa:

    /*este programa tiene convierte metros en yardas y yardas a pies*/ # include # include main () //funcin principal { float cant_mts; int c; leer() ; c = leer1(); if (c==1) res = yardas(cant_mts); else res = pies(cant_mts); imprimir(cant_mts, res, c) ; printf("\n\n\t Para finalizar presione cualquier tecla......") ; getch() ; }

    Modulo principal:

    Invoca el mdulo leer y recibe la cantidad de metros

    Invoca el modulo leer1 y recibe el tipo de conversin deseada

    Invoca el modulo yardas o pies, segn el tipo de conversin, recibe el resultado. Enva la cantidad de metros

    Invoca el mdulo imprimir, enva la cantidad de metros, el resultado de la conversin hecha y el tipo de conversin realizada

    Mdulo leer:

    Lee un nmero real (cantidad de metros a procesar)

    Valida el nmero ledo

    Retorna el nmero ledo y validado

    Mdulo leer1:

    Lee un nmero entero (representa el tipo de conversin a realizar)

    Valida el nmero ledo

    Retorna el nmero ledo y validado

    Mdulo yardas: Recibe la cantidad de metros a convertir

    Convierte a yardas

    Retorna el nmero de yardas

    Mdulo pies

    Recibe la cantidad de metros a convertir

    Convierte a pies

    Retorna el nmero de pies

    Mdulo Imprimir

    Recibe la cantidad de metros, el tipo de conversin y el resultado

  • Ciclo II_2013 18

    // modulo que lee y valida la cantidad de metros a convertir, de tipo real float leer() { float metros; printf("Introduzca la cantidad de metros ") ; scanf("%f", &metros); while (!(metros >= 0)) { printf("Por Favor Introduzca una cantidad positiva para los metros "); scanf("%f", &metros); } return metros; } //funcion que lee y valida el tipo de conversion int leer1() { int tipo; puts("digite el tipo de conversion desea:"); puts("1: metros a yardas"); puts("2: metros a pies"); scanf("%i", &tipo); while(tipo!=1 && tipo !=2) { puts("error digite 1 para convertir a yardas"); puts(" o 2 para obtener pies"); scanf("%i",&tipo); } return; } // funcion que convierte metros a yardas float yardas(m); { float yrd ; yrd = m / 1.09 ; return yrd ; } // funcion que convierte metros a pies void pies(float mt) { float ft ; ft = mt*3.28; return ft ; }

  • Ciclo II_2013 19

    // funcin que imprime datos y resultados void imprime(float mts, float res, int tipo) { print("\n\n\n %.3f metros", mts); if (tipo = 1) printf("\t\t son equivalentes a %.3f yardas", resp); else printf("\t\t son equivalentes a %.3f pies", resp); return 0; }

    PARTE IV Los siguientes ejercicios propuestos se deben resolver

    con la tcnica de Anlisis Estructurado (Modularidad)

    Guarde sus archivos de la siguiente manera: g2_prob1, en el caso de que se trate del primer problema y as sucesivamente hasta el problema 15.

    1. Disee un programa que imprima el resultado de la siguiente expresin: x = (a + b)2 sabiendo que a y b son nmeros enteros. 3

    2. Se tienen como datos la altura y la base de un rectngulo, disee un programa que calcule el permetro y la superficie del mismo.

    3. Dados el costo de un artculo vendido y la cantidad de dinero entregada por el cliente, calcule e imprima el cambio que debe entregrsele al mismo.

    4. Se desea calcular el pago de planilla de sueldo de 5 trabajadores, teniendo las horas trabajadas durante la semana y la clase de puesto que desempea cada trabajador, disee una solucin que permita desplegar los datos del empleado y su sueldo semanal; sabiendo que el trabajador clase 1 se le paga $ 7.00/hora, la clase 2 $ 8.50/hora, la clase 3 $ 10.00/hora y la clase 4 $ 12.50/hora; tambin se pide desplegar el total de la planilla.

    5. Una persona compr una estancia en un pas sudamericano. La extensin de la estancia est

    especificada en acres. Disee un programa que convierta la dimensin en acres a hectreas, si sabemos que: 1 acre = 4047 m2 1 hectrea = 10000 m2

    6. Disee un programa que permita leer la estura en metros de varias personas, adems se conoce la edad de cada persona. Se requiere calcular la edad promedio y la estatura promedio. Adems se necesita conocer la edad de la persona mas alta y la estatura de la persona mas joven.

    7. Disee un programa calcule el resultado de la siguiente funcin val, que depende de dos variables de tipo entero: num y v:

    si num=1 val=100*v si num=2 val=100v si num=3 val=100/v cualquier otro valor val=0

  • Ciclo II_2013 20

    8. Tomando en cuenta la categora y el salario de un empleado, disee un programa que calcule el aumento correspondiente de acuerdo a la siguiente tabla:

    Categora Aumento

    1 20

    2 15

    3 10

    4 7

    Debe imprimirse el nombre, la categora y el nuevo salario del empleado.

    9. Disee un programa que permita a un profesor que califico 25 exmenes de sus alumnos y necesita calcular la nota promedio de todos ellos, la nota mas alta y cuentos aprobaron y reprobaron el examen. Adems se deber imprimir el nombre y la nota de cada estudiante.

    10. Disee un programa que teniendo un grupo de datos enteros y positivos, imprima cada uno de los

    nmeros y sus respectivos cubos.

    11. Un profesor tiene las notas de sus 30 alumnos y necesita conocer la nota promedio y el total de notas mayores de que el promedio. Disee un programa para ayudarle al profesor.

    12. Calcule el aumento de salarios para n empleados de una empresa, bajo el siguiente criterio:

    Si el salario es menor a $1000.oo aumento 12%

    Si el salario est comprendido

    Entre $1000.oo y $2500.o aumento 10%

    Si el sueldo es mayor a $2500.oo aumento 8%

    13. Disee un programa que reciba como entrada 24 nmeros reales que representan las temperaturas en todo un da (1 lectura por hora) y calcule: la temperatura promedio, nmero de datos menores que el promedio y nmero de datos mayores que 28.

    14. Disee un programa que permita calcular e imprimir el total a cobrar por una venta y el descuento total aplicado a una cantidad desconocida de ventas de productos realizadas en un almacn, sabiendo que si la venta es menor de $ 100 se le aplica un 10%, caso contrario se le aplica un 20%.

    15. En una empresa con varios empleados se necesita obtener cierta informacin. Por cada empleado se ingresan los siguientes datos: edad, sexo y salario. Disee un programa para calcular lo siguiente:

    Nmero de hombres

    Nmero de mujeres

    Nmero de mujeres que ganen ms de $1000.oo

    Nmero de hombres menores de 40 aos que ganan menos de $1000.oo

    Nmero de empleados mayores de 50 aos.