27/05/05 Programación Digital I 1
Paso de Parámetrosa una Función
Material Original: Prof. Flor NarcisoModificaciones: Prof. Andrés ArciaDepartamento de ComputaciónEscuela de Ingeniería de SistemasFacultad de IngenieríaUniversidad de Los Andes
Programación Digital I 227/05/05
Recuerde
• Los PARAMETROS FORMALES son prácticamenteVARIABLES LOCALES. La única diferencia es que sondeclarados en la definición (cabecera) de una función.Según la sintaxis vista: lista_parámetros_formales.
• Al igual que las variables locales, cuando se pasa unvalor desde la línea de invocación a una función, se creauna variable temporal dentro de la función invocada. Unavez que termina la ejecución de la función invocada y seretorna a la línea inmediata siguiente, donde las variableslocales dejan de existir.
Programación Digital I 327/05/05
Paso de parámetros
Paso de parámetros:Por ValorPor Referencia
Por Valor: Los parámetros formales correspondientesreciben una COPIA de los valores (literales, constantes,variables, resultado de la evaluación de una expresión)de los parámetros actuales; por tanto, los cambios quese produzcan en ellos por efecto de la ejecución de lafunción no podrán afectar el valor de los parámetrosactuales en caso de que estos fueran variables.
Programación Digital I 427/05/05
Paso de parámetros por valor:Ejemplo 1void DibujarPuntos( int numPuntos ){
int i;for ( i = 1; i <= numPuntos; i++ )
printf(".");}void main(){
DibujarPuntos( 30 );}
30
Programación Digital I 527/05/05
Paso de parámetros por valor:Ejemplo 2void DibujarPuntos( int numPuntos ) {
int i; // i de la función DibujarPuntosfor ( i = 1; i <= numPuntos; i++ )
printf(".");numPuntos = numPuntos + 2;printf(“%i \n”,numPuntos);
}
int main() {int i; // i del programa principalfor ( i = 1; i <= 5; i++ ) {
DibujarPuntos( i );printf(“%i \n”,i);
}}
Valor de i
Programación Digital I 627/05/05
Paso de parámetros por valor:Ejemplo 2
Salida del programa anterior:
. 3 1
.. 4 2
... 5 3
.... 6 4
..... 7 5
Programación Digital I 727/05/05
Paso de parámetros por valor:Ejemplo 3#include <stdio.h>
void modificar(int);
void main(){
int a = 2;
printf(“antes de lallamada %i \n”,a);modificar(a);printf(“despues de lallamada %i \n”,a);
}
void modificar (int a){
a *= 3;printf(“desde la funcion%i\n”, a);
}
Programación Digital I 827/05/05
Paso de parámetros porreferenciaPaso de parámetros:Por valorPor referencia
Por Referencia: Lo que se pasa a la función es ladirección de memoria del parámetro actual, enconsecuencia debe ser una variable. Así, una variablepasada como parámetro actual es compartida; es decir,puede ser accedida y modificada durante la ejecución dela función.
Programación Digital I 927/05/05
Apuntador: Variable especial cuyo contenido es la dirección olocalización de memoria de otra variable.
ContenidoDir.
n
n-1
…
3
2
1
1
2389
Apuntador
Variable Entera
Paso de parámetros porreferencia
Programación Digital I 1027/05/05
Apuntadores
En C los apuntadores tienen la siguientesintaxis:
tipo * nombre_apuntador;Ej:int * apuntador_entero;float * apuntador_flotante;char * ap_caracter;
Programación Digital I 1127/05/05
Operaciones con Apuntadores
Las siguientes son las operaciones básicascon apuntadores:
int b = 6;
int * p_b = &b; // OK
int * p_c = p_b; // OK
p_b = b; // NO!
p_c = &p_b // NO!
Programación Digital I 1227/05/05
Parámetros por valor vs.Parámetros por referenciaEl paso de parámetros por referencia permite devolvervarios valores desde un procedimiento a través de losparámetros actuales.
Si una función devuelve un solo valor usando lasentencia return, es mejor que todos sus parámetrossean por valor.
Las variables (parámetro actual) pasadas por valor auna función no pueden ser cambiadas.
Las variables pasadas por referencia pueden sercambiadas dentro de la función.
Programación Digital I 1327/05/05
Paso de Parámetros porreferenciaDefinición de la función en C
void nombre (tipo_dato &parámetro_formal_1,tipo_dato ¶metro_formal_2,...,tipo_dato ¶metro_formal_n)
{// Cuerpo de la función
}
Llamada a la función:nombre (parámetro_actual_1, parametro_actual_2, …,
parametro_actual_n);
Programación Digital I 1427/05/05
Paso de parámetros porreferencia: Ejemplo 1#include <stdio.h>
void Cuadrado( int num, int &AptCuadrado ){AptCuadrado = num * num;
}
void main( ){int c =12;Cuadrado( 5, c);printf(”El cuadrado de 5 es %i \n",c );
} Por valor
Por referencia
Programación Digital I 1527/05/05
Paso de parámetros porreferencia: Ejemplo 2#include <stdio.h>
// Prototipo de la funcion f1void f1(int, int);
// Prototipo de la funcion f2void f2 (int &, int &);
void main( ){
int u = 1, v = 3;
printf(“u = %i v = %i antes dela llamada a f1“,u,v);f1(u, v);printf(“u = %i v = %i despues
de la llamada a f1“,u,v);f2(u, v);printf(“u = %i v = %i despues
de la llamada a f2“,u,v);}
void f1 (int a, int b){
a = 0;b = 0;printf(“a = %i, b = %i
dentro de f1“,a,b);}
void f2 (int &a, int &b){
a = 0;b = 0;printf(“a = %i, b = %i
dentro de f1“,a,b);}
Programación Digital I 1627/05/05
Paso de parámetros porreferencia: Ejemplo 2
Nombrefunción
Var. local Var. local Comentarios
f1 a = 0 b = 0 Dentro de f1
f2 a = 0 b = 0 Dentro de f2
main u = 1 v = 3 Antes de lallamada a f1
u = 1 v = 3 Después de lallamada a f1
u = 0 v = 0 Después de lallamada a f2
Corrida en frío
Programación Digital I 1727/05/05
Pase de parámetros porreferencia: Ejemplo 3#include <stdio.h>
int cuadradoPorValor (int);
void cuadradoPorReferencia (int&);
void main () {
int x = 2, z = 4;
printf(“x = %i antes de la
llamada a cuadradoPorValor”,x);
printf(“valor devuelto porcuadradoPorValor: %i“,cuadradoPorValor(x));
printf(“x = %i despues de la
llamada a cuadradoPorValor\n”,x);
printf(“z = %i antes de la
llamada a cuadradoPorReferencia”,x);
CuadradoPorReferencia(z);printf(“z = %i despues de la
llamada a cuadradoPorReferncia\n”,x);}
int cuadradoPorValor (int a){
return a *= a;}
void cuadradoPorReferencia (int &cRef){
cRef *= cRef;}
Programación Digital I 1827/05/05
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 comosalida.entero función Potencia (entero x, entero n)0. Inicio1. pot = 12. Repita para (I = 1; I < n; I = I + 1)
pot = pot * xfin_RP
3. devolver pot4. fin_función
CODIFICAR.
Pase de parámetros por valor:Ejemplo 1
Programación Digital I 1927/05/05
Escribir un programa que tome un conjunto de pares denúmeros enteros a y b, y calcule la potencia ab de cada par. Elfin de entrada de datos viene dado por a = -1 y b = -1.0. Inicio1. Q = cierto2. Repita mientras (Q = cierto)
Escribir (“Introduzca los valores de a y b”)Leer (a, b)Si (a = -1 y b = -1) entonces
Q = falsosino
Si (b > 0) entoncesresultado = Potencia (a, b)Escribir (“Resultado = “, resultado)
sinoEscribir(“Error: b debe ser > 0”)
fin_sifin_si
fin_RM3. Fin CODIFICAR.
Pase de parámetros por valor:Ejemplo 2
Programación Digital I 2027/05/05
Paso de parámetros por valor:Ejemplo 3Realizar una función en C++ que permita sumar elnúmero de elementos negativos de una lista de nnúmeros reales.
función Suma (real &resultado)0. Inicio1. Escribir (“Introduzca el valor de n”)2. Leer (n)3. resultado = 04. Repita para (j = 1; j < n; j = j + 1)
Escribir (“Introduzca un número real”)Leer (numero)Si (numero < 0.0) entonces
resultado = resultado + numerofin_si
fin_RP5. fin_funcion
Programación Digital I 2127/05/05
Paso de parámetros: Ejemplo 3
Codificación
void Suma (float &resultado) {int n, j;float numero, resultado = 0.0;printf(“Introduzca el valor de n\n”);scanf(“%i”,&n);for (j = 1; j <= n; j++) {
printf(“Introduzca un número real \n”);scanf(“%i”,&numero);if (numero < 0.0)
resultado += numero;}
}
Programación Digital I 2227/05/05
Ejercicios
Escribir las funciones necesarias para leer cuatronúmeros reales, calcular y escribir su producto, suma ysu media aritmética.
Escribir una función que compruebe si un número dadoes correcto, en cuyo caso la función deberá devolver elvalor q. En caso negativo, la función devolverá el valor-1. Considere los siguientes casos para decidir si unnúmero es o no correcto.
Programación Digital I 2327/05/05
Ejercicios
El número es correcto si se encuentra en el rangodefinido por dos valores constantes MINIMO yMAXIMO.El número es correcto si es uno de tres valoresconstantes VALOR1, VALOR2 o VALOR3.El número es correcto si se encuentra en el rangodefinido por dos valores constantes MINIMO yMAXIMO, o bien es igual al valor constante VALOR1.El número es correcto si se encuentra en el rangodefinido por dos valores constantes MINIMO1 yMAXIMO1, o bien en el definido por los valoresconstantes MINIMO2 y MAXIMO2.
Programación Digital I 2427/05/05
Ejercicios
Escribir una función que tome un carácter comoparámetro de entrada y devuelva su tipo que podrá seruno 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 deentrada dos instantes de tiempo expresados en horas,minutos y segundos e indique si el primero es anterior alsegundo.
Programación Digital I 2527/05/05
Ejercicios
Dada la longitud, ancho y profundidad (en pies) de una piscina, elvolumen se calcula según la siguiente fórmula:
volumen = longitud*ancho*profundidad
Dado que un pie cúbico de agua es equivalente a 7.8 galones, lacapacidad de agua de la piscina viene dada por la fórmula:
capacidad = volumen * 7.8
Si la rata de flujo de agua en la piscina es de 20 galones porminuto, entonces el tiempo (en horas) que se requiere para llenar lapiscina se calcula mediante la fórmula:
Tiempo = capacidad/20/60
Top Related