Professional Documents
Culture Documents
Programacin 1
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
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
P-3
quedar a comer en casa de un amigo que vive en otra ciudad X y llevar la comida llevar
Preparar la comida
Cocinar
n Buscar n de edificio
Coger dinero
Ir al supermercado
Conectarse a Internet
Conectarse a Internet
Buscar callejero
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)
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?
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; }
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?
P-7
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
P-10
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
Mdulo A
Parmetros de Salida
Mdulo B
P-12
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
base
altura
void rectangulo( int ancho, int alto, int &area_rect, int &perim ) { area_rect = ancho * alto; perim = 2 * (ancho + alto); }
ancho
alto
P-14
void rectangulo( int ancho, int alto, int &area_rect, int &perim ) { area_rect = ancho * alto; perim = 2 * (ancho + alto); }
area_rect perimetro
perim
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
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
if (es_par(x) && (x > 10) ) fin = es_par(x); fin = es_par(4) || (x < 0);
Llamada incorrecta
es_par(x);
P-17
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
void Escribe_Caracter(char c, int n) { int i; for (i=1; i <= n; i++) cout << c; cout << endl; }
P-18
funcin
procedimiento
P-19
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
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
P-21
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
P-22
11
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
P-23
Variables globales
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
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
P-26
13
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
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
P-29
P-30
15
Librera C <stdint.h>
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.
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
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