EJERCICIO PARA CALENTAR MOTORES 01 - Dibujando la manzana mordida de Apple |
PRÁCTICA 5 PROGRAMACIÓN MODULAR EJERCICIOS PROPUESTOS EN LAS PRÁCTICAS 01 - Área de figuras geométricas 02 - Cuadro relleno y cuadro contorno |
Cuando definas un módulo, recuerda incluir un comentario que especifique qué hace cada módulo.
// Ejemplo del programa anterior
#includeusing namespace std;
//Cambios de moneda a Euros
const float US_DOLAR_EURO = 0.738868;
const float LIBRA_ESTERLINA_EURO = 1.173295;
//Declaración de procedimientos y funciones
void Leer_Importe(float &cantidad, char &moneda);
float Cambio_En_Euros(float cantidad, char moneda);
main(){
float cantidad, euros;
char moneda, respuesta;
do{
Leer_Importe(cantidad,moneda);
euros = Cambio_En_Euros(cantidad,moneda);
cout << "El cambio en euros es: " << euros << endl;
cout << "¿Desea introducir otro importe? ";
cin >> respuesta;
}while( (respuesta == 's') || (respuesta == 'S') );
system("PAUSE");
}
/*
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){
bool datos_correctos;
do{
cout << "Introduce cantidad 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){
float conversion;
switch(moneda){
case 'D':
conversion = cantidad * US_DOLAR_EURO;
break;
case 'L':
conversion = cantidad * LIBRA_ESTERLINA_EURO;
break;
}
return(conversion);
}
Bien, ahora para entender el programa anterior, hay que tener en cuenta lo siguiente:
Módulo o subprograma
- Resuelve un problema parcial del programa principal
- Puede ser llamado desde el programa principal o desde otros módulos
- Permite ocultar los detalles de la solución de un problema parcial (caja negra)
Declaración, definición y llamada de un módulo.
Un módulo puede tener parámetros de entrada y/o salida.
Parámetros actuales o reales
Los que aparecen en la sentencia de llamada al módulo
Parámetros formales o ficticios
Los que aparecen en la declaración del módulo
Correspondencia entre parámetros actuales y formales
Número de parámetros
Tipo de parámetros
Orden de los parámetros
Nombre de los parámetros
Paso de parámetros por valor
El módulo recibe una copia del valor del dato (parámetro actual) que el módulo invocador le pasa.
Si dentro del módulo se modifica el parámetro formal correspondiente, el valor del parámetro actual permanece inalterable.
Paso de parámetros por referencia
El parámetro actual debe ser obligatoriamente una variable (que puede contener o no un valor)
Si dentro del módulo se modifica el parámetro formal correspondiente, se estará cambiando el contenido en memoria del parámetro actual.
Función y procedimiento
Función
Se puede definir con N parámetros (N>=1)
Sólo se debe utilizar paso de parámetros por valor
* Devuelve un valor que está asociado al nombre de la función
Procedimiento
Se puede definir con N parámetros (N>=0)
Se puede utilizar paso de parámetros por valor y/o por referencia
Se invoca con una sentencia compuesta por su nombre y lista de parámetros actuales (la llamada es una sentencia por si misma)
Escribe_Caracter(‘*’, 20);
Escribe_Caracter(c, num);
Escribe_Caracter(‘c’, 5);
¿Qué uso un procedimiento o una función?
Si el módulo tiene que devolver un sólo valor, usaremos una función, sino un procedimiento.
Return
Finaliza la ejecución del cuerpo de la función.
Devuelve el valor de retorno de la función, después de evaluar su expresión asociada.
Es recomendable usar una sola sentencia return dentro del cuerpo de una función
Debería ser la última sentencia del cuerpo de la función.
Variables locales y globales
Variables locales
Su ámbito es el cuerpo del módulo en donde está declarada
Se crea cuando se declara y se destruye cuando finaliza la ejecución del módulo
Variables globales
Su ámbito es todo el programa (todos sus módulos y el programa principal)
Se crea cuando se declara y se destruye cuando finaliza la ejecución del programa.
* Prohibido utilizar variables globales
La comunicación entre módulos debe realizarse a través de parámetros, y no de variables globales.
Efecto lateral
Comunicación de datos entre módulos al margen de los parámetros y la devolución de resultados.
- Resuelve un problema parcial del programa principal
- Puede ser llamado desde el programa principal o desde otros módulos
- Permite ocultar los detalles de la solución de un problema parcial (caja negra)
Declaración, definición y llamada de un módulo.
Declaración del módulo Nombre_del_modulo(declarar_parámetros) | int maximo(int a,int b); |
Definición del módulo Nombre_del_modulo(declarar_parámetros) Declaración_de_variables_locales Cuerpo del módulo: sentencias ejecutables Fin_de_modulo | int maximo(int a,int b){ int m; if(a>b) m=a; else m=b; return(m); } |
Llamada del módulo Nombre_del_módulo(lista_de_parametros) | mayor= maximo(n1,n2); |
Un módulo puede tener parámetros de entrada y/o salida.
Parámetros actuales o reales
Los que aparecen en la sentencia de llamada al módulo
mayor= maximo(n1,n2);
Parámetros formales o ficticios
Los que aparecen en la declaración del módulo
int maximo(int a,int b);
Correspondencia entre parámetros actuales y formales
Número de parámetros
Tipo de parámetros
Orden de los parámetros
Nombre de los parámetros
Paso de parámetros por valor
El módulo recibe una copia del valor del dato (parámetro actual) que el módulo invocador le pasa.
Si dentro del módulo se modifica el parámetro formal correspondiente, el valor del parámetro actual permanece inalterable.
void rectangulo(int ancho, int alto, int &area, int &perimetro);
Paso de parámetros por referencia
El parámetro actual debe ser obligatoriamente una variable (que puede contener o no un valor)
Si dentro del módulo se modifica el parámetro formal correspondiente, se estará cambiando el contenido en memoria del parámetro actual.
void rectangulo(int ancho, int alto, int &area, int &perimetro);
Función y procedimiento
Función
Se puede definir con N parámetros (N>=1)
Sólo se debe utilizar paso de parámetros por valor
* Devuelve un valor que está asociado al nombre de la función
bool es_par(int n){
return ( (n%2) == 0);
}
bool | Tipo de dato del valor que devuelve |
es_par | Nombre de la función |
(int n) | Declaración de parámetros |
return ( (n%2) == 0); | Sentencia para devolver el valor |
int x;
bool fin;
Llamada a la función (Correcta) | Llamada a la función (Incorrecta) |
if (es_par(x) == true) if (es_par(3)) if (es_par(x)&&(x>10)) fin = es_par(x); fin = es_par(4) || (x<0); | es_par(x); |
Procedimiento
Se puede definir con N parámetros (N>=0)
Se puede utilizar paso de parámetros por valor y/o por referencia
Se invoca con una sentencia compuesta por su nombre y lista de parámetros actuales (la llamada es una sentencia por si misma)
void Escribe_Caracter(char c, int n){
int i;
for(i=1; i<=n; i++){
cout << c;
cout << endl;
}
}
void | Sólo se pueden devolver valores con los parámetros |
Escribe_Caracter | Nombre del procedimiento |
(char c, int n) | Declaración de parámetros |
int num;
char c;
Llamada al procedimientoEscribe_Caracter(‘*’, 20);
Escribe_Caracter(c, num);
Escribe_Caracter(‘c’, 5);
¿Qué uso un procedimiento o una función?
Si el módulo tiene que devolver un sólo valor, usaremos una función, sino un procedimiento.
Return
Finaliza la ejecución del cuerpo de la función.
Devuelve el valor de retorno de la función, después de evaluar su expresión asociada.
Es recomendable usar una sola sentencia return dentro del cuerpo de una función
Debería ser la última sentencia del cuerpo de la función.
Variables locales y globales
Variables locales
Su ámbito es el cuerpo del módulo en donde está declarada
Se crea cuando se declara y se destruye cuando finaliza la ejecución del módulo
Variables globales
Su ámbito es todo el programa (todos sus módulos y el programa principal)
Se crea cuando se declara y se destruye cuando finaliza la ejecución del programa.
* Prohibido utilizar variables globales
La comunicación entre módulos debe realizarse a través de parámetros, y no de variables globales.
Efecto lateral
Comunicación de datos entre módulos al margen de los parámetros y la devolución de resultados.
La mayoría de lenguajes de programación proporcionan una colección de procedimientos y funciones de uso común (bibliotecas o librerías)
En lenguaje C/C++, para hacer uso de los módulos incluidos en una biblioteca se utiliza la directiva del compilador #include
Existe una gran variedad de bibliotecas disponibles
- Funciones matemáticas
- Manejo de caracteres y de cadena de caracteres
- Manejo de entrada y salida de datos
- Manejo de tiempo (fecha, hora, etc.)
- Etc.
EJERCICIO PARA CALENTAR MOTORES
01) Dibujando la manzana mordida de Apple
/*
Tony Del Pino Gz tonydelpinogz@gmail.com Ejercicio para calentar motores usando lo que hemos dado hasta la fecha en los temarios 1- Tipos de datos simples e identificadores 2- Estructuras de control 3- Programación modular */ #include
PRÁCTICA 5 PROGRAMACIÓN MODULAR EJERCICIOS PROPUESTOS EN LAS PRÁCTICAS |
No hay comentarios:
Publicar un comentario