230 likes | 362 Views
Paso de Parámetros a una Función. Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes. Recuerde !!!!!.
E N D
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes
Recuerde !!!!! • Los PARAMETROS son VARIABLES LOCALES. La única diferencia es el lugar donde son declarados (lista_parámetros_formales). • Cuando se pasa un valor desde una función “llamadora o invocadora” a una función “llamada o invocada”, se crea una variable temporal dentro de la función invocada. Una vez que termina la ejecución de la función invocada y se retorna a la función invocadora, esta variable deja de existir.
Paso de Parámetros • Paso de parámetros: • Por valor • Por referencia • Por valor: Los parámetros formales correspondientes reciben una copia de los valores (constante, variable, resultado de la evaluación de una expresión) de los parámetros actuales; por tanto, los cambios que se produzcan en ellos por efecto de la ejecución de la función no podrán afectar el valor de los parámetros actuales.En C/C++ todas las llamadas, por defecto, son por valor.
Paso de Parámetros por Valor: Ejemplo 1 void DibujarPuntos( int numPuntos ) { int i; for ( i = 1; i <= numPuntos; i++ ) cout << "."; } void main( ) { DibujarPuntos( 30 ); } 30
Paso de Parámetros por Valor: Ejemplo 2 void DibujarPuntos( int numPuntos ) { int i; for ( i = 1; i <= numPuntos; i++ ) cout << "."; } void main( ) { int i; for ( i = 1; i <= 10; i++ ) { DibujarPuntos( i ); cout << endl; } } Valor de i
Paso de Parámetros por Valor: Ejemplo 2 Salida del programa anterior . .. … …. ….. …… ……. …….. ……… ……….
#include <iostream.h> void modificar(int); void main() { int a = 2; cout << “antes de la llamada” << a << endl; modificar(a); cout << “despues de la llamada” << a << endl; } void modificar (int a) { a *= 3; cout << “desde la funcion” << a << endl; return; } Paso de Parámetros por Valor: Ejemplo 3
Paso de Parámetros por Referencia • Paso de parámetros: • Por valor • Por referencia • Por referencia:Lo que se pasa a la función es la dirección de memoria del parámetro actual. De esta forma , una variable pasada como parámetro actual es compartida; es decir, se puede modificar directamente durante la ejecución de la función.
Paso de Parámetros por Referencia • Apuntador: Variable especial cuyo contenido es la dirección de memoria de otra variable. • Permiten devolver varios valores desde una función a través de los parámetros. Ap1 es una variable de tipo apuntador y A una variable de tipo entero
Parámetros por Valor vs. Parámetros por Referencia • Si se pasa el valor de una variable (parámetro actual) a una función, ésta puede usar el valor de la variable pero no lo puede cambiar. • Si se pasa la dirección de una variable (parámetro actual) a una función, ésta puede cambiar el valor de la variable.
Paso de Parámetros por referencia • Definición de la función en C++ tipo_dato nombre_función (tipo_dato &parámetro_formal, ...) { // Cuerpo de la función } • Invocación de la función nombre_función(parámetro_actual, ...)
Paso de Parámetros por Referencia: Ejemplo 1 #include <iostream.h> void Cuadrado( int num, int &AptCuadrado ) { AptCuadrado = num * num; } void main( ) { int c; Cuadrado( 5, c); cout << ”El cuadrado de 5 es" << c << endl ; } Por valor Por referencia
#include <iostream.h> // Prototipo de la funcion f1 void f1(int, int); // Prototipo de la funcion f2 void f2 (int &, int &); void main( ) { int u = 1, v = 3; cout << “u =“ << u << “v = “ << v << “antes de la llamada a f1” << endl; f1(u, v); cout << “u =“ << u << “v = “ << v << “despues de la llamada a f1” << endl; f2(u, v); cout << “u =“ << u << “v = “ << v << “despues de la llamada a f2” << endl; } void f1 (int a, int b) { a = 0; b = 0; cout << “a =“ << a << “b = “ << b << “dentro de f1” << endl; return; } void f2 (int &a, int &b) { a = 0; b = 0; cout << “a =“ << a << “b = “ << b << “dentro de f2” << endl; return; } Paso de Parámetros por Referencia: Ejemplo 2
Paso de Parámetros por Referencia: Ejemplo 2 Corrida en frío u = 1 v = 3 antes de la llamada a f1 a = 0 b = 0 dentro de f1 u = 1 v = 3 despues de la llamada a f1 a = 0 b = 0 dentro de f2 u = 0 v = 0 despues de la llamada a f2
#include <iostream.h> int cuadradoPorValor (int); void cuadradoPorReferencia (int); void main () { int x = 2, z = 4; cout << “x=“ << x << “antes de la llamada a cuadradoPorValor” << endl; cout << “valor devuelto por cuadradoPorValor: “ << cuadradoPorValor(x); cout << “x=“ << x << “despues de la llamada a cuadradoPorValor” << endl; cout << “z=“ << z << “antes de la llamada a cuadradoPorReferencia” << endl; cout << cuadradoPorReferencia(z) << endl; cout << “z = “ << z << “despues de la llamada a cuadradoPorReferencia” << endl; } int cuadradoPorValor (int a) { return a *= a; } void cuadradoPorReferencia (int &cRef) { cRef *= cRef; } Paso de Parámetros por Referencia: Ejemplo 3
Paso de Parámetros: Ejemplo 1 • Escribir una función que reciba los valores enteros de x y n > 0 como parámetros de entrada y devuelva el valor de xn como salida. entero función Potencia (entero x, entero n) 0. Inicio 1. pot = 1 2. Repita para (I = 1; I < n; I = I + 1) pot = pot * x fin_RP 3. devolver pot 4. fin_función CODIFICAR!!!!!!
Paso de Parámetros: Ejemplo 2 • Escribir un programa que tome un conjunto de pares de números enteros a y b, y calcule la potencia ab de cada par. El fin de entrada de datos viene dado por a = -1 y b = -1. 0. Inicio 1. Q = cierto 2. Repita mientras (Q = cierto) Escribir (“Introduzca los valores de a y b”) Leer (a, b) Si (a = -1 y b = -1) entonces Q = falso sino Si (b > 0) entonces resultado = Potencia (a, b) Escribir (“Resultado = “, resultado) sino Escribir(“Error: b debe ser > 0”) fin_si fin_si fin_RM 3. Fin CODIFICAR!!!!!!
Paso de Parámetros: Ejemplo 3 • Realizar una función en C++ que permita sumar el número de elementos negativos de una lista de n números reales. void funcion Suma (real &resultado) 0. Inicio 1. Escribir (“Introduzca el valor de n”) 2. Leer (n) 3. resultado = 0 4. Repita para (j = 1; j < n; j = j + 1) Escribir (“Introduzca un número real”) Leer (numero) Si (numero < 0.0) entonces resultado = resultado + numero fin_si fin_RP 5. fin_funcion
Paso de Parámetros: Ejemplo 3 • Realizar una función en C++ que permita sumar el número de elementos negativos de una lista de n números reales. void Suma (float &resultado) { int n, j; float numero, resultado = 0.0; cout << “Introduzca el valor de n” << endl; cin >> n; for (j = 1; j <= n; j++) { cout << “Introduzca un número real” << endl; cin >> numero; if (numero < 0.0) resultado = resultado + numero; } }
Ejercicios • Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media aritmética. • Escribir una función que compruebe si un número dado es correcto, en cuyo caso la función deberá devolver el valor q. En caso negativo, la función devolverá el valor -1. Considere los siguientes casos para decidir si un número es o no correcto.
Ejercicios • El número es correcto si se encuentra en el rango definido por dos valores constantes MINIMO y MAXIMO. • El número es correcto si es uno de tres valores constantes VALOR1, VALOR2 o VALOR3. • El número es correcto si se encuentra en el rango definido por dos valores constantes MINIMO y MAXIMO, o bien es igual al valor constante VALOR1. • El número es correcto si se encuentra en el rango definido por dos valores constantes MINIMO1 y MAXIMO1, o bien en el definido por los valores constantes MINIMO2 y MAXIMO2.
Ejercicios • Escribir una función que tome un carácter como parámetro de entrada y devuelva su tipo que podrá ser uno de los siguientes: (1) letra mayúscula de la ‘A’ a la ‘Z’, (2) letra minúscula de la ‘a’ a la ‘z’, (3) dígito del ‘0’ al ‘9’. • Escribir una función que tome como parámetros de entrada dos instantes de tiempo expresados en horas, minutos y segundos e indique si el primero es anterior al segundo.