Lecttura Comple C lementa taria Rev visión n de las l téccnica as de prrograamaciión Estruccturad da y M Modu ular Intrroducción. Básiccamente el objetivo ceentral de estta lectura coomplementaaria es repasar los fund damentos de laa programacción estructuurada y moodular; para identificar los beneficcios que noss aportan estass técnicas. A soobresalienttes de la proogramación n estructurrada: 1.1. Aspectos La prrogramación estructuraada es un coonjunto de técnicas t de programaci p ón que inclu uyen: 9 Un númeero limitadoo de estructuuras de conttrol. 9 Diseño descendente d e (top down). 9 Descompposición moodular, con independenncia de los módulos. m A Sobresalienttes de la prrogramacióón modularr: 1.2. Aspectos 9 Particionna un probleema en subpproblemas m más fáciles de resolver. 9 Emplea la l metodolo ogía del diviide y venceerás o prograamación topp-down. 9 Los subpproblemas identificados son conoccidos como módulos. 9 Propicia la abstracción y el ocuultamiento de d la inform mación. 9 Los móddulos son alttamente cohhesivos y tieenen un mínnimo acoplaamiento. 9 Trabaja con c dos tipoos de módulos: los proccedimientoss y las funciiones. 1.2.11. Funcionees Todas laas funcioness se caracterrizan porquee: ¾ Retorna siempre UN N VALOR.. por valor. ¾ Efectúa un u paso de parámetros p mientos 1.2.22. Procedim ¾ Retorna 0 o más vaalores. ¾ Efectúa un u paso de parámetros p por valor y por referenncia. Ejem mplo: Realicce un progrrama que caalcule la siguuiente funciión para N ttérminos. 1 x 2 x 4 x 6 x 8 x 10 f ( x) = 1 + + + + + + ... 2! 4! 6! 8! 100! Si x = 5 y n= 3 , la f ( x ) = 8,8775 Anállisis del prooblema Datoos de Entraada N: Númeero de términos de la serie a evaluuarse. B. – Prograamación IIII U.S.B Página P 1 Proceso La serie de pasos que identificamos para resolver este problema sigue siendo el mismo y planteándonos el mismo Considerando la programación modular, tenemos: Problema Principal Leer los términos a evaluarse Generar los términos de la serie Cálculo del exponente Mostrar la suma Cálculo del factorial Salida R: Resultado de la evaluación de los elementos de la serie. Cada uno de los procesos que se identificaron, son modularizados a continuación, así: # include “iostream.h” # include "string.h" //Librería para manejo de cadenas # include “conio.h” //Declaración de prototipos int leedatos ( ); //Lee datos de tipo entero int factorial ( int n); void exponen (int b, int e, int *res); void genera (int n, int x, float *s); void muestrasum (float s); //Cuerpo de los subprogramas… leedatos( ) N N>=0 and N=|N| Devolver N Volver factorial( n ) fac = 1 I = 1, N, 1 fac = fac * I //Función que me permite leer un número entero. int leedatos() { int n; do{ cin>>n; }while( n <=0 | | n ! = (int) n); return (n); } //Función que calcula el factorial de un número de tipo entero. int factorial( int n) { int i,fac; fac=1; for(i=1; i<=n;i++) fac = fac*i; return (fac); } Devuelve(fac) Volver U.S.B. – Programación III Página 2 exponen( b, e, res) res = 1 I = 1, e, 1 res = res * b Volver genera_evalua (N, X,S) s=0 c=0 I = 1, N, 1 exponen( X, c, NUM ) DEN = facto( c ) s = s + NUM/DEN /*Procedimiento que calcula el exponente de un número elevado a otro, devolviéndonos el resultado en una variable. */ void exponen(int b, int e, int *res) { int i; *res=1; for(i=1;i<= e ; i++) *res = *res * b; } /*Procedimiento que genera los elementos de la serie y los opera, devolviéndonos la suma total. */ void genera_evalua ( int n, int x, float *s) { int i, c, num, den; * s = 0; c = 0; for ( i =1; i<=n; i++) { exponen(x, c, &num); //Llamando al procedimiento den = factorial( c ); //Llamando a la función *s = *s+ num/den; c = c + 2; } } //Volviendo al procedimiento principal c=c+2 Volver muestrasum (S) "Suma = " , s //Procedimiento que muestra la suma total. void muestrasum (float s) { cout<<"\nLa función evaluada en el punto: "<<x<<" es: "<<s; } Volver Inicio //Declarando el procedimiento principal. void main() { int n , x ; float sum; char * cadena; leedatos ( Cadena, N) clrscr( ); leedatos ( Cadena, X) cout<<“Cantidad de Términos a evaluarse = ”; n = leedatos(); //Llamada al procedimiento leedatos. cout<<“Punto X en el que se evaluará la función = ”; x = leedatos(); //Llamada al procedimiento leedatos. genera_evalua ( n , x , &sum); //Llamada al procedimiento muestrasum( sum ); //Llamada al procedimiento getch( ); genera_evalua ( N, X, S) muestrasum (S) Fin } U.S.B. – Programación III Página 3 Ejercicios Propuestos Mediante la programación modular resuelva los siguientes ejercicios. 1. Realice un programa que lea dos números que tengan más de un 1 dígito y menos de 5 y determine si son o no amigos. (Son amigos si la suma de los dígitos de un número es la misma que la suma de dígitos del otro número) 2. Evalúe la siguiente función matemática: a!+b!+ c d − c! f ( a , b, c , d , e ) = + de e Nota: Para calcular la potencia emplee la función o procedimiento de potencia que realizaste anteriormente. 3. Generar los n primeros términos de la serie de Fibonaci. 4. Cargue el vector Z de dimensión n, asegurándose que todos sus elementos sean diferentes. 5. Genere la matriz caracol para una matriz cuadrada. U.S.B. – Programación III Página 4