pr Rev rogra visión amaci n de l ión E las téc struc M cnica cturad

Anuncio
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
Descargar