subprogramas como abstracciÓn de operaciones. …janto/ftp/fundinf/trans_t5.pdf · un programa en...
TRANSCRIPT
Fundamentos de Informática ETSI Industrial 1 Universidad de Málaga José Antonio Gómez Ruiz
5.1. SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONES.
5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. USO DE PARÁMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIA.
5.5. LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDAD.
5.6. FUNCIONES MATEMÁTICAS.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 2 Universidad de Málaga José Antonio Gómez Ruiz
Establecer la necesidad de la subprogramación
Implementar subprogramas en C / C++: las funciones
Diferenciar los conceptos de definición, declaración y llamada de funciones
Diferenciar los distintos pasos de argumentos: por valor y por referencia
Crear nuestras propias librerías de funciones
En definitiva, descomponer problemas complejos en problemas más simples mediante la subprogramación
Tema 5: SubprogramasOBJETIVOS
Fundamentos de Informática ETSI Industrial 3 Universidad de Málaga José Antonio Gómez Ruiz
5.1. SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONES.
5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de entrada, salida y entrada / salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 4 Universidad de Málaga José Antonio Gómez Ruiz
Las aplicaciones informáticas que habitualmente se desarrollansuelen tener suficiente complejidad y contener miles de líneas de código
Es necesario descomponer un programa en una serie de módulos mucho más pequeños, simples y manejables → modularización o diseño descendiente
Cada uno de esos módulos será un subprograma
Objetivos de la subprogramación:
Descomponer la complejidad del problema
Reutilización del código
Mayor legibilidad
Menos errores y más localizados si se producen
Facilidad para añadir nueva funcionalidad
SUBPROGRAMAS COMO ABSTRACCIÓN DE SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONESOPERACIONES
Fundamentos de Informática ETSI Industrial 5 Universidad de Málaga José Antonio Gómez Ruiz
Pasos naturales de la subprogramación:
Especificación detallada del problema
División del problema en subproblemas
Asignar estos subproblemas a subprogramas
¡Divide y vencerás!
Separación
Implementación
Abstracción QUÉ
CÓMO
escribir_cuadrado
for( i=1 ; i<= 4 ; i++ ){for( j=1 ; j<= 4 ; j++ )
cout << “*”;cout << “\n”;}
SUBPROGRAMAS COMO ABSTRACCIÓN DE SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONESOPERACIONES
Fundamentos de Informática ETSI Industrial 6 Universidad de Málaga José Antonio Gómez Ruiz
...escribir_cuadrado...escribir_cuadrado...escribir_cuadrado...
for( i=1 ; i<= 4 ; i++ ){for( j=1 ; j<= 4 ; j++ )
cout << “*”;cout << “\n”;
}
control→
←retorno
Llamadasmúltiples
Definiciónúnica
Expansión de Código:
Reutilizable, pero poco flexible: subtarea fija
SUBPROGRAMAS COMO ABSTRACCIÓN DE SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONESOPERACIONES
Fundamentos de Informática ETSI Industrial 7 Universidad de Málaga José Antonio Gómez Ruiz
...escribir_cuadrado(4)...escribir_cuadrado(5)...escribir_cuadrado(8)...
for( i=1 ; i<= ; i++ ){for( j=1 ; j<= ; j++ )
cout << “*”;cout << “\n”;
}
4
Subprograma:
Trozo de código que resuelve una subtarea de forma parametrizada
SUBPROGRAMAS COMO ABSTRACCIÓN DE SUBPROGRAMAS COMO ABSTRACCIÓN DE OPERACIONESOPERACIONES
Fundamentos de Informática ETSI Industrial 8 Universidad de Málaga José Antonio Gómez Ruiz
5.1. Subprogramas como abstracción de operaciones.
5.2. LAS FUNCIONES EN C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de entrada, salida y entrada / salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 9 Universidad de Málaga José Antonio Gómez Ruiz
Algunos lenguajes de programación tienen dos tipos distintos de subprogramas: procedimientos y funciones
Los subprogramas en el lenguaje C/C++ son sólo funciones
Un programa en C/C++ está estructurado en funcionesDe hecho, main es una función, la función principal del programa
Las funciones en programación son, de alguna manera, parecidas a las funciones matemáticas, pudiendo tener argumentos o parámetros
Ejemplo de función matemática: f(x)= 2 x + 5
− f es el nombre de la función, que tiene un argumento formal x
− La función f, una vez definida, puede usarse (ser llamada) en otras expresiones. Por ejemplo y = f(4) - 5
− Para determinar el valor de f(4) se sustituye el argumento formal x por el argumento actual (o real) 4: f(4)= 2 • 4 + 5 = 13
− Se dice entonces que la función f devuelve el valor 13
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 10 Universidad de Málaga José Antonio Gómez Ruiz
Definición de una función: consta de una cabecera y un cuerpoLa cabecera contiene el nombre de la función, la lista de parámetros formales separador por comas (nombres y tipos) y el tipo del resultado
El cuerpo de la función, consta del código necesario de lo que debe hacer la función y del valor que va a devolver
float Sumar (float num1, float num2)
{
float resp;
resp = num1 + num2;
return resp;
}
Tipo de resultado
Lista de Parámetros Formales separados por comas
Cuerpo de la función
Valor devuelto
Cabecera de la función
Identificador de la función (nombre)
Tipos compatibles
Variable local
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 11 Universidad de Málaga José Antonio Gómez Ruiz
La sentencia return viene acompañada de
una constante, una variable o cualquier expresión siempre y cuando sean de tipos compatibles con el que devuelve la función.
Puede haber más de un return en el cuerpo de una función (no es
aconsejable y sólo lo permitiremos en funciones recursivas)En cuanto se ejecute una sentencia return la función termina
Puede no haber return: la función no devuelve ningún valorEl tipo de devolución es void (vacío o nulo)
void escribir_cuadrado(unsigned lado){ int i,j;
for(i=1; i<=lado; i++){for(j=1; j<=lado; j++)
cout << “*”;cout << “\n”;
}}
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 12 Universidad de Málaga José Antonio Gómez Ruiz
Llamada a una función: Es la instrucción donde se invoca o se utiliza una determinada función.
La función A llama a la B
La instrucción de llamada provoca la ejecución de la función B sobre los valores (parámetros) que le indiquemos
Al acabar la función B, puede que nos devuelva unos resultados
Se realiza escribiendo el nombre de la función, seguido de los parámetros sobre los que operar. Estos parámetros se denominan parámetros reales
La llamada a una función puede hacerse en cualquier lugar donde pueda utilizarse una expresión del tipo de devolución de la función
AB
Llamada
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 13 Universidad de Málaga José Antonio Gómez Ruiz
Se crea una interfaz de comunicación entre la función llamante y la llamada, permitiendo el intercambio de información entre ellas
Los parámetros formales de una función no son obligatorios pero, si aparecen, deben tener cierta relación con los parámetros reales de una hipotética llamada a la misma:
El número de parámetros reales debe coincidir con el de parámetros formales
El i-ésimo parámetro real se corresponde con el i-ésimo formal
El tipo del i-ésimo parámetro real debe ser compatible que el del i-ésimo formal
Los parámetros de una función pueden ser de cualquier tipo
Los nombres de un parámetro formal y su correspondiente real pueden ser diferentes
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 14 Universidad de Málaga José Antonio Gómez Ruiz
void escribir_tabla(unsigned numero){ unsigned i;for(i=1; i<=10; i++)cout<< numero << “*” << i << “=” <<numero*i;
}
int mayor(int a,int b){ if (a>b)
return a;else
return b;}
int mayor(int a,int b){int mayor; if (a>b)
mayor = a;else
mayor = b;return mayor;}
int num=3;/*correctas*/escribir_tabla(5);escribir_tabla(num);escribir_tabla(num+4);/*incorrectas*/num=escribir_tabla(4);escribir_tabla(2,3);escribir_tabla(‘a’);
int x=3, y=-2, z;/*correctas*/z = mayor(x+2,y);x = mayor(-14,5-2);z = mayor(y,-10);cout << mayor(2,3);y = y + mayor(y,10); /*incorrectas*/mayor(-13,10);x = mayor(2,10,34);
Ejemplos de llamadas
Parámetros formalesParámetros reales
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 15 Universidad de Málaga José Antonio Gómez Ruiz
¿Dónde se definen las funciones en un programa en C / C++ ?
Existen dos maneras diferentes de definirlas:Antes de la función main(): − La función main()será la última del programa
− El resto de funciones se ordenarán en orden de aparición teniendo en cuenta que para llamar a una función debe estar definida previamente
Después de la función main():− La función main()será la primera del programa
− Antes de la función main() se incluirán los prototipos de todas las funciones
• Esto es imprescindible ya que, al definirse las funciones al final, se desconocerían sus características. Los prototipos declaran las características de las funciones y permite que se puedan llamar
− El orden de las definiciones de las funciones ya no es importantepuesto que están todos los prototipos declarados previamente y, por tanto, todas las funciones podrán llamar a todas las demás
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 16 Universidad de Málaga José Antonio Gómez Ruiz
Usaremos la segunda opción: pondremos la definición de las funciones después de la función main() y adelantaremos la declaración de las mismas mediante sus prototipos:
Evitaremos problemas de ámbitos al hacer las llamadas
Al tener todos los prototipos juntos se simplifica localizar las características de cada función
El prototipo de una función consiste en la cabecera de la misma TERMINADA EN UN PUNTO Y COMA
La misión de los prototipos es simplemente adelantar la información relativa al número y tipos de parámetros que acepta la función y el tipo que devuelve la misma
Por tanto, el prototipo no especifica el proceso el proceso a realizar. Lo hará la definición de la función
En el prototipo, el nombre de las variables puede omitirse
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 17 Universidad de Málaga José Antonio Gómez Ruiz
Ejemplos de
prototipos
válidosvoid escribir_tabla(unsigned numero){ unsigned i;for(i=1; i<=10; i++)cout<< numero << “*” << i << “=”<<numero*i;
}
int mayor(int a,int b){int mayor; if (a>b)
mayor = a;else
mayor = b;return mayor;}
long factorial(unsigned num){int i, fact = 1; for(i=2; i<= num; i++)
fact*=i;return fact;}
void escribir_tabla(unsigned numero);void escribir_tabla(unsigned );
int mayor(int a,int b);int mayor(int ,int );
long factorial(unsigned num);long factorial(unsigned );
LAS FUNCIONES EN LAS FUNCIONES EN C / C++C / C++
Fundamentos de Informática ETSI Industrial 18 Universidad de Málaga José Antonio Gómez Ruiz
Desarrolla los siguientes programas como ejemplo:
a) Se piden dos números naturales m y n. El programa mostrará todas las parejas de números amigos que hay en el intervalo [m,n]. Dos números son amigos si la suma de los divisores del primero (sin contarse el mismo) coincide con el segundo y viceversa. Nota: usa una función que, dado un número, devuelva la suma de sus divisores (sin contarse el mismo).
b) Se piden dos números naturales N e i. El programa mostrará el dígito de N que ocupa la í-ésima posición empezando por el dígito menos significativo. En caso de no poder obtenerlo (por que se salga del rango) mostrará -1. Nota: usa dos funciones, una que determine el número de dígitos de un número y otra que, dado un número y una posición, devuelva el dígito que ocupa esa posición dentro del número.
c) Se pide un número natural n y se imprimen por pantalla los n primeros números primos. El programa pregunta si se quiere repetir de nuevo el proceso. Nota: usa una función que, dado un número natural, devuelva 1 si es primo, 0 si no lo es.
EJEMPLOSEJEMPLOS
Fundamentos de Informática ETSI Industrial 19 Universidad de Málaga José Antonio Gómez Ruiz
5.1. Subprogramas como abstracción de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. USO DE PARÁMETROS: DE ENTRADA, SALIDA Y ENTRADA / SALIDA.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 20 Universidad de Málaga José Antonio Gómez Ruiz
En programación se denomina interfaz a la combinación de los parámetros formales definidos en las funciones y los parámetros reales que se pasan en la llamada a la misma
Muchos de los errores en la subprogramación se presentan debido a una interfaz incorrecta
Datos de entrada ala función
Datos de salidade la función
USO DE LOS PARÁMETROS: E, S, E/SUSO DE LOS PARÁMETROS: E, S, E/S
Fundamentos de Informática ETSI Industrial 21 Universidad de Málaga José Antonio Gómez Ruiz
Parámetros de Entrada:
La función que llama pasa un valor que no puede ser modificado por la función llamada, sólo puede ser utilizado
El parámetro formal NO DEBE aparecer en la parte izquierda de una asignación dentro de la función
Parámetros de Entrada y Salida:
La función llamante pasa un valor que puede ser utilizado y modificado dentro de la función llamada
Cualquier cambio en el parámetro formal (dentro de la definición de la función) se reflejará en el parámetro real de la llamada
Parámetros de Salida:
La función llamante llamante no pasa un valor, sólo lo recibe
El parámetro formal SÓLO DEBE aparecer en la parte izquierda de una asignación dentro de la definición de la función
Cualquier cambio en el parámetro formal (dentro de la definición de la función) se reflejará en el parámetro real de la llamada
USO DE LOS PARÁMETROS: E, S, E/SUSO DE LOS PARÁMETROS: E, S, E/S
Fundamentos de Informática ETSI Industrial 22 Universidad de Málaga José Antonio Gómez Ruiz
Parámetros de Entrada:
Proporcionan información a la función llamada
discr
/* raíces ecuación 2do. grado*/discr = b*b-4.0*a*c;if (discr>0.0){x1 = (-b+raiz(discr))/(2.0*a);x2 = (-b-raiz(discr))/(2.0*a);}...
a b c? ??
-
x1? x2?
Ec2Grado
USO DE LOS PARÁMETROS: E, S, E/SUSO DE LOS PARÁMETROS: E, S, E/S
Fundamentos de Informática ETSI Industrial 23 Universidad de Málaga José Antonio Gómez Ruiz
Parámetros de Salida:
Devuelven información a la función que llama
discr
/* raíces ecuación 2do. grado*/discr = b*b-4.0*a*c;if (discr>0.0){x1 = (-b+raiz(discr))/(2.0*a);x2 = (-b-raiz(discr))/(2.0*a);}...
a b c? ??
-
x1? x2?
Ec2Grado
USO DE LOS PARÁMETROS: E, S, E/SUSO DE LOS PARÁMETROS: E, S, E/S
Fundamentos de Informática ETSI Industrial 24 Universidad de Málaga José Antonio Gómez Ruiz
Parámetros de Entrada / Salida:
Proporcionan y devuelven información
temporal
/* intercambia valores */temporal = a;a = b;b = temporal;
a b-
- -
Intercambiar
USO DE LOS PARÁMETROS: E, S, E/SUSO DE LOS PARÁMETROS: E, S, E/S
Fundamentos de Informática ETSI Industrial 25 Universidad de Málaga José Antonio Gómez Ruiz
5.1. Subprogramas como abstracción de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIA.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. Funciones matemáticas.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 26 Universidad de Málaga José Antonio Gómez Ruiz
Como acabamos de mostrar, el uso se puede hacer con los parámetros de las funciones puede ser de Entrada, Salida y de Entrada / Salida
Hay que establecer como se implementa la transmisión entre los parámetros formales y los parámetros reales en cada uno de esos usos
Las implementaciones posibles son:Paso por Valor:− Se realiza una COPIA del contenido del parámetro real en el
parámetro formal, siendo éstos VARIABLES INDEPENDIENTES
− Se utiliza con los parámetros de Entrada.
Paso por Referencia:− El parámetro formal obtiene una REFERENCIA al parámetro real
− Ahora NO SON DOS VARIABLES INDEPENDIENTES, son la misma con dos referencias distintas: el parámetro real y el formal.
− CUALQUIER CAMBIO en el parámetro formal (dentro de la función) SE REFLEJA en el parámetro real de la llamada
− Se utiliza con los parámetros de Salida y de Entrada / Salida
PASO DE PARÁMETROS: POR VALOR Y PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIAPOR REFERENCIA
Fundamentos de Informática ETSI Industrial 27 Universidad de Málaga José Antonio Gómez Ruiz
Por defecto, en el lenguaje C/C++, todo paso de parámetros(de los tipos vistos hasta el momento) se hace por valor
Por tanto, la modificación de un parámetro formal en la definición de la función, no afecta al parámetros real de la llamada
En un paso por valor un parámetro real puede ser una variable, constante o expresión siempre que sea compatible con el tipo del parámetro formal
Todos los ejemplos de definición de funciones y llamadas vistos hasta el momento implementan el paso por valor
PASO DE PARÁMETROS POR VALORPASO DE PARÁMETROS POR VALOR
Fundamentos de Informática ETSI Industrial 28 Universidad de Málaga José Antonio Gómez Ruiz
En un paso de parámetros por referencia un parámetro real sólo puede ser una variable que sea compatible con el tipo del parámetro formal
Usaremos el paso por referencia implementado en C++
En el prototipo y la cabecera de la función, el parámetro formal que se pase por referencia va precedido por el operador de dirección (&)
En la llamada a la función, el parámetro real que se pasa por referencia se pasa como en el paso por valor
El paso por referencia permite que una función puede devolver más de un valor a la función llamante
PASO PARÁMETROS POR REFERENCIAPASO PARÁMETROS POR REFERENCIA
Fundamentos de Informática ETSI Industrial 29 Universidad de Málaga José Antonio Gómez Ruiz
/* ordena tres números */#include <iostream>using namespace std;
int main(){
float num1, num2, num3, temp;cin >> num1 >> num2 >> num3;if (num1 > num2){
temp = num1;num1 = num2;num2 = temp;
}if (num1 > num3){
temp = num1;num1 = num3;num3 = temp;
}if (num2 > num3){
temp = num2;num2 = num3;num3 = temp;
}cout << num1 << num2 << num3;return 0;
}
PASO PARÁMETROS POR REFERENCIAPASO PARÁMETROS POR REFERENCIA
Fundamentos de Informática ETSI Industrial 30 Universidad de Málaga José Antonio Gómez Ruiz
/* Ordena tres números */#include <iostream>using namespace std;void ordena(float &n1, float &n2);
int main(){
float num1, num2, num3, temp;cin >> num1 >> num2 >> num3;ordena(num1 , num2);ordena(num1 , num3);ordena(num2 , num3);cout << num1 << num2 <<num3;return 0;
}
void ordena(float &n1, float &n2){
float temp;if (n1 > n2){ temp = n1;
n1 = n2;n2 = temp;
}}
quedan ligadas
PASO PARÁMETROS POR REFERENCIAPASO PARÁMETROS POR REFERENCIA
Fundamentos de Informática ETSI Industrial 31 Universidad de Málaga José Antonio Gómez Ruiz
/*Ecuación de 2ºgrado. Devolución de más de un valor */#include <iostream>using namespace std;
int ec2grado(float a, float b, float c, float &x1, float &x2);
int main(){
float a, b, c, sol1, sol2;cin >> a >> b >> c;if ( ec2grado(a, b, c, sol1, sol2) )
cout << “las soluciones son ” << sol1 << “ y ” << sol2;else
cout << “No tiene soluciones reales”;return 0;
}int ec2grado(float a, float b, float c, float &x1, float &x2){
float discr; int solreal = 0;discr = b*b-4.0*a*c;if (discr>=0.0){ solreal=1;
x1 = (-b+sqrt(discr))/(2.0*a);x2 = (-b-sqrt(discr))/(2.0*a);
}return solreal;
}
Devuelve tres valores
PASO PARÁMETROS POR REFERENCIAPASO PARÁMETROS POR REFERENCIA
Fundamentos de Informática ETSI Industrial 32 Universidad de Málaga José Antonio Gómez Ruiz
Ejercicio: Supongamos declaradas en main() , las siguientes variables:
float x, y;int m;char c;
Y tenemos una función con la siguiente cabecera:
void prueba(int a, float b, float &c, float &d, char &e);
¿Cuales de las siguientes llamadas son incorrectas? ¿Por qué?
prueba (m+3, 10.5, x, y, c);
prueba (m, 19, x, y);
prueba (35, sqrt(x), x, y, c);
prueba (m, -2.3, sqrt(2.5), y, ‘E’);
prueba (30, 10.2, x, x+y, c);
PASO DE PARÁMETROS: POR VALOR Y PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIAPOR REFERENCIA
Fundamentos de Informática ETSI Industrial 33 Universidad de Málaga José Antonio Gómez Ruiz
Ventajas Desventajas
Por valor
• Aísla• Evita efectos laterales• Permite constantes y
expresiones como parámetro real
• Utiliza más memoria
Por referencia
• Utiliza menos memoria • Solo permite variables como parámetro real
• Puede producir efectos laterales
CUADRO RESUMEN
PASO DE PARÁMETROS: POR VALOR Y PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIAPOR REFERENCIA
Fundamentos de Informática ETSI Industrial 34 Universidad de Málaga José Antonio Gómez Ruiz
Desarrollar, como ejemplo, un programa que pida dos números naturales y muestre el máximo común divisor (MCD) y el mínimo común múltiplo (mcm.) de ambos números.
Se definirá una función que reciba como parámetros dos números naturales y devuelva SIMULTÁNEAMENTE el MCD y el mcm.
Nota: para calcular el MCD de dos números naturales se puede usar el algoritmo de Euclides, el cual utiliza 2 variables que contendrán inicialmente a esos dos números, y tratará de hacer que el contenido de las dos variables llegue a ser el mismo. Para ello se deberá ir restando la menor a la mayor (depositando la resta en la mayor) hasta que ambas contengan el mismo valor, que será el MCD.
El mcm. se puede calcular según la siguiente propiedad: el MCD de dos números naturales multiplicado por su mcm, coincide con el producto de dichos números naturales.
PASO DE PARÁMETROS: POR VALOR Y PASO DE PARÁMETROS: POR VALOR Y POR REFERENCIAPOR REFERENCIA
Fundamentos de Informática ETSI Industrial 35 Universidad de Málaga José Antonio Gómez Ruiz
5.1. Subprogramas como abstracción de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDAD.
5.6. Funciones matemáticas.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 36 Universidad de Málaga José Antonio Gómez Ruiz
En el lenguaje de programación C/C++ no existe el anidamiento de funciones, es decir, dentro del cuerpo de una función no se pueden definir otras funciones, sólo se pueden llamar
Todas las variables declaradas dentro del cuerpo de una función son variables locales a dicha función. Se crean cuando la función es llamada y se destruyen al finalizar la misma
Por tanto, el ámbito de una variable local es sólo el cuerpo de la función donde se ha declarado
Los parámetros formales de una función se comportan como variables locales en el cuerpo de la misma
LOCALIDAD, ANIDAMIENTO, ÁMBITO Y LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDADVISIBILIDAD
Fundamentos de Informática ETSI Industrial 37 Universidad de Málaga José Antonio Gómez Ruiz
Sólo permitiremos declarar variables al principio del cuerpo de las funciones
Con respecto al ámbito de las funciones, como utilizamos la declaración de las mismas antes de la función main(), se pueden llamar unas a otras sin restricción
Si no se utilizase el prototipo como declaración, tendrían que ser definidas en orden de manera que para que una función pudiese llamar a otra, la función llamada tendría que estar definida antes de la función que hace la llamada
LOCALIDAD, ANIDAMIENTO, ÁMBITO Y LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDADVISIBILIDAD
Fundamentos de Informática ETSI Industrial 38 Universidad de Málaga José Antonio Gómez Ruiz
Las variables globales son variables que se declaran fuera de la definición cualquier función. Aparecen al principio del programa, justo después de las sentencias del preprocesador
El ámbito de estas variables es global: se pueden utilizar en el cuerpo de cualquier función
El uso de variables globales está desaconsejadouso de variables globales está desaconsejado, especialmente en programadores noveles, debido a los efectos colaterales que se pueden producir.
Si existiesen variables globales y locales con el mismo identificador, el ámbito correspondería a la variable local
No utilizaremos variables globalesNo utilizaremos variables globales: toda la información que reciba una función lo hará a través de su interfaz
LOCALIDAD, ANIDAMIENTO, ÁMBITO Y LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDADVISIBILIDAD
Fundamentos de Informática ETSI Industrial 39 Universidad de Málaga José Antonio Gómez Ruiz
#include <iostream>using namespace std;
int a; /* variable global */
int func1( int );int func2( int );int func3( int );
int main(){ int x=3;
a=x-1; /* modifico la variable global */x=func1(a); a=func2(x); /* modifico la variable global */x=func3(a);cout << “x=” << x << “, a=” << a; return 0;
}
int func1(int a){ return a*a; }int func2(int x){ int a=1;
return a+x;}int func3(int x){ return a+x; }
x=10, a=5
LOCALIDAD, ANIDAMIENTO, ÁMBITO Y LOCALIDAD, ANIDAMIENTO, ÁMBITO Y VISIBILIDADVISIBILIDAD
Fundamentos de Informática ETSI Industrial 40 Universidad de Málaga José Antonio Gómez Ruiz
5.1. Subprogramas como abstracción de operaciones.
5.2. Las funciones en C / C++.
5.2.1. Definición de funciones. Parámetros formales y valor de retorno
5.2.2. Llamadas a funciones. Parámetros reales o actuales.
5.2.3. Declaración o prototipos de funciones.
5.3. Uso de parámetros: de Entrada, Salida y Entrada / Salida.
5.4. Paso de parámetros: por valor y por referencia.
5.5. Localidad, anidamiento, ámbito y visibilidad.
5.6. FUNCIONES MATEMÁTICAS.
Tema 5: SubprogramasEstructura y Contenidos
Fundamentos de Informática ETSI Industrial 41 Universidad de Málaga José Antonio Gómez Ruiz
Todas se están en <math.h> excepto abs() que está en <stdlib.h>
Las funciones trigonométricas operan en radianes
arco tangentedouble atan(double)
arco cosenodouble acos(double)
arco senodouble asin(double)
tangentedouble tan(double)
cosenodouble cos(double)
senodouble sin(double)
raíz cuadradadouble sqrt(double)
Potenciadouble pow(double,double)
logaritmo decimaldouble log10(double)
logaritmo neperianodouble log(double)
exponencialdouble exp(double)
valor absolutoint abs(int)
FUNCIONES MATEMÁTICASFUNCIONES MATEMÁTICAS
Fundamentos de Informática ETSI Industrial 42 Universidad de Málaga José Antonio Gómez Ruiz
Tema 5: Subprogramas
FIN DEL TEMA