You are on page 1of 17

Tema 4 Programacin Modular

Programacin 1

Departamento de Ciencia de la Computacin e Inteligencia Artificial

Objetivos / Competencias

1. 2. 3.

Utilizar el diseo descendente para resolver problemas de relativa complejidad Comprender las diferencias entre procedimientos y funciones Saber modularizar programas en lenguaje C

Programacin 1. Dto. CCIA. Curso 2011-12

P-2

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-3

Diseo descendente (top-down)


Para resolver un problema se divide en problemas ms pequeos (subproblemas)
La descomposicin del problema se realiza en una serie de niveles o pasos sucesivos de refinamiento, que forman una estructura jerrquica Cada nivel de la jerarqua incluye un mayor nivel de detalle

quedar a comer en casa de un amigo que vive en otra ciudad X y llevar la comida llevar

Preparar la comida

Planificar la ruta para llegar a su casa

Comprar los ingredientes

Cocinar

Ruta para llegar a la ciudad X

Ruta para llegar a su calle

n Buscar n de edificio

Coger dinero

Ir al supermercado

Buscar libro de recetas

Seguir pasos de la receta

Conectarse a Internet

Buscar plano de carreteras

Conectarse a Internet

Buscar callejero

Programacin 1. Dto. CCIA. Curso 2011-12

P-4

Concepto de Mdulo
Cuando un programa es grande y complejo no es conveniente que todo el cdigo est dentro del programa principal (funcin main() en lenguaje C) Un mdulo o subprograma
es un bloque de cdigo que se escribe aparte del programa principal se encarga de realizar una tarea concreta que resuelve un problema parcial del problema principal puede ser invocado (llamado) desde el programa principal o desde otros mdulos permite ocultar los detalles de la solucin de un problema parcial (Caja negra)

Programacin 1. Dto. CCIA. Curso 2011-12

P-5

Caja negra
Cada mdulo es una caja negra para el programa principal o para el resto de mdulos Para utilizar un mdulo desde el programa principal o desde otros mdulos
Necesitamos conocer su interfaz, es decir, sus entradas y salidas
Entrada Salida

Qu hace?
No necesitamos conocer los detalles internos de funcionamiento

Cmo lo hace?

Programacin 1. Dto. CCIA. Curso 2011-12

P-6

Ejemplo de mdulos
main() { int n1, n2; // nmeros introducidos por teclado (datos de entrada) int mayor; // el mayor nmero de los 2 introducidos (dato de salida) int menor; // el menor nmero de los 2 introducidos (dato de salida) cout << Introduce dos nmeros enteros: ; cin >> n1 >> n2; mayor = maximo(n1, n2); menor = minimo(n1, n2); cout << El mayor nmero es: << mayor; cout << El menor nmero es: << menor; cout << endl; }

Qu hace el mdulo maximo()?

// Este mdulo devuelve el menor de dos nmeros

// Este mdulo devuelve el mayor de dos nmeros

int minimo(int a, int b) { int m; // el menor de dos nmeros (dato de salida) m = a; if (b < m) m = b; return(m); }

int maximo(int a, int b) { int m; // el mayor de dos nmeros (dato de salida) if (a > b) m = a; else m = b; return(m); }

Cmo lo hace?

Programacin 1. Dto. CCIA. Curso 2011-12

P-7

Declaracin, definicin y llamada de un mdulo


Declaracin del mdulo
Nombre_del_mdulo ( declaracin_de_parmetros )
int maximo(int a, int b);

Definicin del mdulo


Nombre_del_mdulo ( declaracin_de_parmetros ) Declaracin_de_variables_locales Cuerpo del mdulo: sentencias ejecutables Fin_del_mdulo

int maximo(int a, int b) { int m; if (a > b) m = a; else m = b; return(m); }

Llamada del mdulo


Nombre_del_mdulo ( lista_de_parmetros )
Programacin 1. Dto. CCIA. Curso 2011-12

mayor = maximo(n1, n2);


P-8

Ventajas de la programacin modular


Facilita el diseo descendente y la programacin estructurada Reduce el tiempo de programacin
Reusabilidad : estructuracin en libreras especficas (biblioteca de mdulos) Divisin de la tarea de programacin entre un equipo de programadores

Disminuye el tamao total del programa


Un mdulo slo esta escrito una vez y puede ser utilizado varias veces desde distintas partes del programa

Facilita la deteccin y correccin de errores


mediante la comprobacin individual de los mdulos

Facilita el mantenimiento del programa


Los programas son ms fciles de modificar Los programas son ms fciles de entender (ms legibles)

Programacin 1. Dto. CCIA. Curso 2011-12

P-9

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-10

Transferencia del flujo de control


Cuando un mdulo A llama (invoca) a otro mdulo B, el flujo de control (flujo de ejecucin) pasa al mdulo B Cuando termina de ejecutarse el mdulo B, el flujo de control contina en el mdulo A, a partir de la sentencia siguiente a la llamada del mdulo B Cuerpo del Mdulo A 1 3
Llamada al Mdulo B Siguiente sentencia Fin del Mdulo B

Cuerpo del Mdulo B

El programa principal puede ser considerado como un mdulo que puede invocar a otros mdulos, pero que no puede ser invocado por ningn mdulo
Programacin 1. Dto. CCIA. Curso 2011-12

P-11

Transferencia de informacin
La transferencia de informacin entre mdulos se realiza a travs del paso de parmetros o argumentos Un mdulo puede tener parmetros de entrada y/o de salida

El mdulo A puede proporcionar datos de entrada al mdulo B cuando lo invoca Parmetros de Entrada

El mdulo B puede recibir datos de entrada y proporcionar datos de salida al mdulo A

Mdulo A
Parmetros de Salida

Mdulo B

Programacin 1. Dto. CCIA. Curso 2011-12

P-12

Parmetros actuales y formales


Parmetros actuales o reales
Los que aparecen en la sentencia de llamada al mdulo
Nombre_del_mdulo (pr1, pr2, , prN) mayor = maximo(n1, n2);

Parmetros formales o ficticios


Los que aparecen en la declaracin del mdulo
Nombre_del_mdulo (tipo1 pf1, tipo2 pf2, , tipoN pfN) int maximo(int a, int b);

Correspondencia entre parmetros actuales y formales: nmero de parmetros tipo de parmetros orden de los parmetros nombre de los parmetros
Programacin 1. Dto. CCIA. Curso 2011-12

P-13

Paso de parmetros por Valor


El mdulo recibe una copia del valor del dato (parmetro actual) que el mdulo invocador le pasa El parmetro actual puede ser cualquier expresin evaluable en el momento de la llamada al mdulo Si dentro del mdulo se modifica el parmetro formal correspondiente, el valor del parmetro actual permanece inalterable Memoria
main() { int base, altura, area, perimetro; cout << Dme la base del rectngulo:; cin >> base; cout << Dme su altura:; cin >> altura; rectangulo(base, altura, area, perimetro); cout << Area: << area << endl; cout << Permetro: << perimetro; cout << endl; }

Paso de parmetros por Valor

base

altura

void rectangulo( int ancho, int alto, int &area_rect, int &perim ) { area_rect = ancho * alto; perim = 2 * (ancho + alto); }

ancho

alto

Programacin 1. Dto. CCIA. Curso 2011-12

P-14

Paso de parmetros por Referencia


El mdulo recibe la referencia a la posicin de memoria donde se encuentra dicho valor (direccin de memoria de una variable) El parmetro actual debe ser obligatoriamente una variable (que puede contener o no un valor) Si dentro del mdulo se modifica el parmetro formal correspondiente, se estar cambiando el contenido en memoria del parmetro actual
main() { int base, altura, area, perimetro; cout << Dme la base del rectngulo:; cin >> base; cout << Dme su altura:; cin >> altura; rectangulo(base, altura, area, perimetro); cout << Area: << area << endl; cout << Permetro: << perimetro; cout << endl; }
Memoria

Paso de parmetros por Referencia


area

void rectangulo( int ancho, int alto, int &area_rect, int &perim ) { area_rect = ancho * alto; perim = 2 * (ancho + alto); }

area_rect perimetro

perim

Programacin 1. Dto. CCIA. Curso 2011-12

P-15

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-16

Concepto de Funcin
Devuelve un valor que est asociado al nombre de la funcin Se suele definir con N parmetros (N 1) Slo se debe utilizar paso de parmetros por valor
Tipo de dato del valor que devuelve Nombre de la funcin

Declaracin de parmetros

int x; bool fin;


Llamada a la funcin

if (es_par(x) == true) if (es_par(3))

Sentencia para devolver el valor

bool es_par(int n) { return( (n % 2) = = 0); }

if (es_par(x) && (x > 10) ) fin = es_par(x); fin = es_par(4) || (x < 0);

Llamada incorrecta

es_par(x);
P-17

Programacin 1. Dto. CCIA. Curso 2011-12

Concepto de Procedimiento
Se puede definir con N parmetros (N 0) Se puede utilizar paso de parmetros por valor y/o por referencia Se invoca con una sentencia compuesta por su nombre y lista de parmetros actuales (la llamada es una sentencia por s misma)
Slo se pueden devolver valores con los parmetros Nombre del procedimiento Declaracin de parmetros

int num; char c;


Llamada al procedimiento

Escribe_Caracter(*,20); Escribe_Caracter(c, num); Escribe_Caracter(c, 5);

void Escribe_Caracter(char c, int n) { int i; for (i=1; i <= n; i++) cout << c; cout << endl; }

Programacin 1. Dto. CCIA. Curso 2011-12

P-18

Qu uso un procedimiento o una funcin?

El mdulo tiene que devolver un solo valor? Si No

funcin

procedimiento

Programacin 1. Dto. CCIA. Curso 2011-12

P-19

Sobre la sentencia return return (expresin);

Finaliza la ejecucin del cuerpo de la funcin Se encarga de devolver el valor de retorno de la funcin, despus de evaluar su expresin asociada Es recomendable usar una sola sentencia return dentro del cuerpo de una funcin Debera ser la ltima sentencia del cuerpo de la funcin

Programacin 1. Dto. CCIA. Curso 2011-12

P-20

10

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-21

Concepto de mbito de una variable


El mbito de una variable define la visibilidad de la misma, es decir, desde dnde se puede acceder a dicha variable
main() { int n;
// Este mdulo comprueba si un nmero es primo o no // nmero introducido por teclado (dato de entrada)

cout << Introduce un nmero entero: ; cin >> n; if (es_primo(n)) cout << El nmero es primo; else cout << El nmero no es primo; cout << endl; }

bool es_primo(int num) { int cont; // contador (dato auxiliar) bool primo; // es primo o no (dato de salida) primo = true; cont = 2; while ( (cont < num) && primo) {
// comprobar si es divisible por otro nmero

primo = ! (num % cont == 0); cont = cont + 1; } return (primo); }

mbito de n mbito de num, cont, primo

Programacin 1. Dto. CCIA. Curso 2011-12

P-22

11

Variables locales y variables globales


Variable local
Su mbito es el cuerpo del mdulo en donde est declarada Se crea cuando se declara y se destruye cuando finaliza la ejecucin del mdulo

Variable global
Su mbito es todo el programa (todos sus mdulos y el programa principal) Se crea cuando se declara y se destruye cuando finaliza la ejecucin del programa

Programacin 1. Dto. CCIA. Curso 2011-12

P-23

Prohibido utilizar variables globales


La comunicacin entre mdulos debe realizarse a travs de parmetros, y NO de variables globales

Variables globales

Programacin 1. Dto. CCIA. Curso 2011-12

P-24

12

Efecto lateral
Cualquier comunicacin de datos entre mdulos al margen de los parmetros y la devolucin de resultados se denomina efecto lateral
#include <iostream> using namespace std; int resultado; // declaracin de variable global int Num_Mayor(int n1, int n2); main() { int n1, n2; // nmeros introducidos por teclado (datos de entrada) int mayor; // el mayor de los dos nmeros (dato de salida) cout << Introduce dos nmeros :; cin >> n1 >> n2; resultado = n1 + n2; mayor = Num_Mayor(n1, n2); cout << La suma de los dos nmeros es: << resultado; cout << y el mayor de ellos es: << mayor; cout << endl; }
// funcin que devuelve el mayor de dos nmeros

int Num_Mayor(int n1, int n2) { if (n1 > n2) resultado = n1; else resultado = n2; return(resultado); }

Por qu no funciona?

Cmo se soluciona?
P-25

Programacin 1. Dto. CCIA. Curso 2011-12

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-26

13

Qu tipo de programas debo ser capaz de hacer?


#directivas del preprocesador Declaracin de constantes Declaracin de procedimientos y funciones main() { Declaracin de variables (de tipos simples ) Cuerpo principal sentencias de control llamadas a procedimientos y funciones } Definicin de procedimientos y funciones

Programacin 1. Dto. CCIA. Curso 2011-12

P-27

Ejemplo de programa
#include <iostream> using namespace std;
// Cambios de moneda a Euros // Leer de teclado un importe y el tipo de moneda // validando los datos introducidos hasta que // sean correctos

const float US_DOLAR_EURO = 1,4696; const float LIBRA_ESTERLINA_EURO = 1,4696;


// Declaracin de procedimientos y funciones

void Leer_Importe(float &cantidad, char &moneda); float Cambio_En_Euros(float cantidad, char moneda); main() { float cantidad; // cantidad de dinero (dato de entrada) char moneda; // tipo de moneda (dato de entrada) char respuesta; // respuesta para continuar (dato de entrada) float euros; // cantidad en euros equivalente (dato de salida) do { Leer_Importe(cantidad, moneda); euros = Cambio_En_Euros(cantidad, moneda); cout << El cambio en euros es: << euros << endl; cout << Desea introducir otro importe? (S/N) :; cin >> respuesta; } while ( (respuesta == s) || (respuesta == S)); }

void Leer_Importe(float &cantidad, char &moneda) { bool datos_correctos; do { cout << Introduce cantidad de dinero y moneda (D/L):; cin << cantidad << moneda; datos_correctos = (cantidad > 0.0) && ( moneda == D || moneda == L); } while ( ! datos_correctos); }
// Devolver el cambio en euros equivalente al importe y moneda // especificados

float Cambio_En_Euros(float cantidad, char moneda) { switch (moneda) { case D : euros = cantidad * US_DOLAR; break; case L : euros = cantidad * LIBRA_ESTERLINA_EURO; } return (euros); }

Cuando definas un mdulo, recuerda incluir un comentario que explique qu hace el mdulo
Programacin 1. Dto. CCIA. Curso 2011-12

P-28

14

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-29

Bibliotecas del lenguaje C / C++


La mayora de lenguajes de programacin proporcionan una coleccin de procedimientos y funciones de uso comn (bibliotecas o libreras) En lenguaje C / C++, para hacer uso de los mdulos incluidos en una biblioteca se utiliza la directiva del compilador #include Existe una gran variedad de bibliotecas disponibles:
Funciones matemticas Manejo de caracteres y de cadenas de caracteres Manejo de entrada y salida de datos Manejo del tiempo (fecha, hora, ) etc.

Programacin 1. Dto. CCIA. Curso 2011-12

P-30

15

Algunas funciones predefinidas en lenguaje C / C++


Librera C++ <math.h> Librera C <math.h> Funcin double cos(double x) double sin(double x) double exp(double x) double fabs(double x) double pow(double x, double y) double round(double x) double sqrt(double x) <iostream> <ctype.h> int isalnum(int c) int isdigit(int c) int toupper(int c) <stdlib.h> int rand(void) Descripcin Devuelve el coseno de x Devuelve el seno de x Devuelve ex Devuelve el valor absoluto de x Devuelve xy Devuelve el valor de x redondeado Devuelve la raiz cuadrada de x Devuelve verdadero si el parmetro es una letra o un dgito Devuelve verdadero si el parmetro es un dgito Devuelve el carcter en maysculas Devuelve un nmero aleatorio entre 0 y RAND_MAX Descripcin Menor nmero entero representable Mayor nmero entero representable P-31

Librera C++ <iostream>

Librera C <stdint.h>

Constantes INT_MIN INT_MAX

Programacin 1. Dto. CCIA. Curso 2011-12

Ejercicios
1. 2.
Disea un mdulo que reciba 4 nmeros enteros y calcule la media y la desviacin estndar. Cuando hace fro, los meteorlogos informan sobre un ndice llamado factor de enfriamiento por el viento que tiene en cuenta la velocidad de viento y la temperatura. Este factor se puede aproximar con la frmula: W = 13.12 + 0.6215*t 11.37 * v0.16 + 0.3965*t*v0.016 donde v = velocidad del viento en m/s t = temperatura en grados Celsius: t 10 W = ndice de enfriamiento del viento (en grados Celsius) Disea un mdulo que solicite el valor de la velocidad y la temperatura, y calcule W, teniendo en cuenta la restriccin impuesta para la temperatura.

3.

Disea un mdulo que reciba como parmetro un saldo de deuda y un tipo de inters mensual y que devuelva el nmero de meses que pueden pasar sin hacer ningn pago antes de que la cuenta exceda los 100 . Ejemplo: meses (50, 2%)=36.

Programacin 1. Dto. CCIA. Curso 2011-12

P-32

16

ndice
1. Descomposicin modular 2. Comunicacin entre mdulos 3. Procedimientos y Funciones 4. mbito de las variables 5. Estructura general de un programa 6. Funciones predefinidas en lenguaje C 7. Fuentes de informacin

Programacin 1. Dto. CCIA. Curso 2011-12

P-33

Bibliografa Recomendada
Fundamentos de Programacin Jess Carretero, Flix Garca, y otros Thomson-Paraninfo 2007. ISBN: 978-84-9732-550-9 Captulo 7

Problemas Resueltos de Programacin en Lenguaje C Flix Garca, Alejandro Caldern, y otros Thomson (2002) ISBN: 84-9732-102-2 Captulo 5 Resolucin de Problemas con C++ Walter Savitch Pearson Addison Wesley 2007. ISBN: 978-970-26-0806-6 Captulo 4
Programacin 1. Dto. CCIA. Curso 2011-12

P-34

17

You might also like