Jorge Tancara Aguilar UCB 1-2019
PROGRAMACIÓN I
MSc. Jorge Tancara Aguilar
DOCUMENTO 1
PROGRAMACIÓN MODULAR
Es una técnica que permite “resolver problemas grandes” a partir de la solución de “pequeños
nuevos problemas”.
MODULARIZAR
Es el proceso de dividir un problema en pequeños nuevos problemas.
PROFUNDIDAD DE LA MODULARIZACIÓN (límite de la modularidad)
El proceso de modularización debe detenerse, cuando los módulos sean “funcionales”
MÓDULO
Es un trozo de programa que puede ser visto como un programa independiente, que tendrá su
propio inicio y su propio final y puede ser invocado una o más veces.
MÓDULO FUNCIONAL
Es aquel módulo altamente cohesionado y mínimamente acoplado
UNA ESTRATEGIA DE MODULARIZACIÓN
“Desarrollaremos normalmente la solución de un problema, pero
tomando en cuenta lo siguiente: En el momento en que aparezca un
caso problemático sin importar su complejidad, a este le daremos
un nombre asociándole los parámetros necesarios (módulo),
asumiendo que ya existe o que ya está resuelto, continuaremos con
la programación la solución, posteriormente luego de finalizado el
problema, según un orden definido o arbitrario programaremos todo
los módulos que hubiéramos asumido como existentes, al final la
integración de estos nos dará la solución del problema”.
1
Jorge Tancara Aguilar UCB 1-2019
VENTAJAS DE LA MODULARIZACIÓN
a) Más fácil de depurar
El depurar programas “grandes”, puede ser muy complejo y si estos no tienen
enfoque modular, muchas veces puede ser más factible repetir la programación
total, por el contrario, si están desarrollado con enfoque modular la búsqueda y la
corrección de errores será mucho más simple por que los errores estarán en los
módulos que son pequeños trozos de programa que realizar trabajos bien definidos
y conocidos.
b) Código reutilizable
Código modular permite a los programadores fácilmente reutilizar código. Si las
tareas particulares se seccionaron a ciertas funciones o clases, esto significa que el
programador puede reutilizar ese código particular cada vez que ella necesita para
realizar esa tarea otra vez. Si el código no está organizado en partes discretas,
entonces es más difícil (o imposible) de referencia, separar o ejecutar ese código en
otros contextos de programación.
c) Trabajo en equipo
Gracias a la modularidad, es posible dividir un problema en varias partes las cuales
pueden ser desarrolladas por diferentes personas.
2
Jorge Tancara Aguilar UCB 1-2019
PASE DE PARAMETROS
La programación modular se caracteriza por el uso frecuente de funciones (módulos), donde
las funciones pueden recibir parámetros que son considerados datos de entrada al módulo o
función.
Formato general de una función o módulo:
tipo nombre (parámetros){
} Parametros de llegada o
receptoras
Ejemplo
int sumar(int x, int y){
int s;
s = x + y; Valor devuelto
return s;
}
Ahora desde otro lugar del programa llamamos a la función:
#include <iostream>
using namespace std;
void sumar(int, int);
Parámetros
int main(int argc, char *argv[]) {
enviados
int a=5,b=6;
int r = sumar(a, b)
cout << r;
return 0;
}
Existen dos formas de pasar parámetros: por valor y por referencia.
PASE DE PARAMETROS POR VALOR
Se emplea esta forma cuando se desea pasar datos que pueden ser constantes o variables, los
parámetros recibidos en el módulo llamado pueden cambiar de valor y estos no afectarán a los
parámetros enviados, en términos simples es enviar información sin preocuparnos de lo que
ocurra con ellas.
3
Jorge Tancara Aguilar UCB 1-2019
PASE DE PARAMETROS POR REFERENCIA
Necesariamente los parámetros enviados deben ser variables (nunca constantes como los
siguientes: 123, “abc”); La característica principal de esta forma de pasar parámetros es que:
“Todo lo que suceda con las variables receptoras dentro la función llamada, afectarán
directamente a las variables enviadas durante la llamada”.
Para pasar parámetros por referencia se requiere utilizar el concepto de “Puntero o
apuntador”.
PUNTEROS O APUNTADORES
Las variables puntero o apuntadores se caracterizan por ser declarados con un asterisco por
delante, de la siguiente manera:
tipo *variable;
Ejemplos:
int *contador;
float *uno;
Estas variables tienen la capacidad de recibir direcciones de memoria, correspondientes a
otras variables de la RAM. Para enviar la dirección de memoria de alguna variable, se debe
anteponer al nombre el carácter ampersand (&).
Ejemplo:
sumador(&var_enviada);
Invoco a la función sumador y como parámetro le envío la dirección de memoria de la variable
var_enviada, está debe llegar a una función con la siguiente forma:
tipo sumador(int *var_puntero).
4
Jorge Tancara Aguilar UCB 1-2019
Ejemplos:
1. Reciba un número y determine si es primo, aplique el pase de parámetros por valor.
Solución:
#include <iostream>
using namespace std;
int getLeer();
bool getEsPrimo(int);
int getCDE(int);
int main(int argc, char *argv[]) {
int a;
a=getLeer();
if(getEsPrimo(a)==true)
cout << a <<" SI ES PRIMO";
else
cout << a <<" NO ES PRIMO";
return 0;
}
int getLeer(){
int x;
cout << "Ingrese un número ";
cin >> x;
return x;
}
bool getEsPrimo(int t){
if(getCDE(t)==2)
return true;
else
return false;
}
int getCDE(int N){
int c=0, d;
for(d=1;d<=N;d++){
if(N%d==0){
c++;
}
}
return c;
}
5
Jorge Tancara Aguilar UCB 1-2019
2. Obtener la sumatoria de los factoriales, de los primeros N elementos primos de la serie
de Fibonacci. Aplique pase de parámetros por valor y por referencia.
Solución:
#include<iostream>
using namespace std;
void getLeer(int *);
void getSuma(int *, int);
bool getEsPrimo(int t);
int getCDE(int);
int getFact(int);
int main (int argc, char *argv[]) {
int n, s=0;
getLeer(&n);
getSuma(&s,n);
cout <<"Resultado: "<< s;
return 0;
}
void getLeer(int *nt){
cout << "Ingrese un numero: ";
cin >> *nt;
}
void getSuma(int *s, int nt){
int a=-1, b=1, f;
while(nt>0){
f = a+b;
if(getEsPrimo(f)==true){
*s=*s+getFact(f);
nt--;
}
a = b;
b = f;
}
}
6
Jorge Tancara Aguilar UCB 1-2019
bool getEsPrimo(int t){
if(getCDE(t)==2)
return true;
else
return false;
}
int getCDE(int N){
int c=0, d;
for(d=1;d<=N;d++){
if(N%d==0){
c++;
}
}
return c;
}
int getFact(int t){
int ft=1;
while(t>1){
ft=ft*t;
t--;
}
return ft;
}