Upload
rodrigo-castro-bou
View
47
Download
0
Embed Size (px)
Citation preview
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.