Paso de Parametros
description
Transcript of Paso de Parametros
-
27/05/05 Programacin Digital I 1
Paso de Parmetrosa una Funcin
Material Original: Prof. Flor NarcisoModificaciones: Prof. Andrs ArciaDepartamento de ComputacinEscuela de Ingeniera de SistemasFacultad de IngenieraUniversidad de Los Andes
-
Programacin Digital I 227/05/05
Recuerde
Los PARAMETROS FORMALES son prcticamenteVARIABLES LOCALES. La nica diferencia es que sondeclarados en la definicin (cabecera) de una funcin.Segn la sintaxis vista: lista_parmetros_formales.
Al igual que las variables locales, cuando se pasa unvalor desde la lnea de invocacin a una funcin, se creauna variable temporal dentro de la funcin invocada. Unavez que termina la ejecucin de la funcin invocada y seretorna a la lnea inmediata siguiente, donde las variableslocales dejan de existir.
-
Programacin Digital I 327/05/05
Paso de parmetros
Paso de parmetros:Por ValorPor Referencia
Por Valor: Los parmetros formales correspondientesreciben una COPIA de los valores (literales, constantes,variables, resultado de la evaluacin de una expresin)de los parmetros actuales; por tanto, los cambios quese produzcan en ellos por efecto de la ejecucin de lafuncin no podrn afectar el valor de los parmetrosactuales en caso de que estos fueran variables.
-
Programacin Digital I 427/05/05
Paso de parmetros por valor:Ejemplo 1void DibujarPuntos( int numPuntos ){
int i;for ( i = 1; i
-
Programacin Digital I 527/05/05
Paso de parmetros por valor:Ejemplo 2void DibujarPuntos( int numPuntos ) {
int i; // i de la funcin DibujarPuntosfor ( i = 1; i
-
Programacin Digital I 627/05/05
Paso de parmetros por valor:Ejemplo 2
Salida del programa anterior:
. 3 1
.. 4 2
... 5 3
.... 6 4
..... 7 5
-
Programacin Digital I 727/05/05
Paso de parmetros por valor:Ejemplo 3#include
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);
}
-
Programacin Digital I 827/05/05
Paso de parmetros porreferenciaPaso de parmetros:Por valorPor referencia
Por Referencia: Lo que se pasa a la funcin es ladireccin de memoria del parmetro actual, enconsecuencia debe ser una variable. As, una variablepasada como parmetro actual es compartida; es decir,puede ser accedida y modificada durante la ejecucin dela funcin.
-
Programacin Digital I 927/05/05
Apuntador: Variable especial cuyo contenido es la direccin olocalizacin de memoria de otra variable.
ContenidoDir.
n
n-1
3
2
1
1
2389
Apuntador
Variable Entera
Paso de parmetros porreferencia
-
Programacin 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;
-
Programacin Digital I 1127/05/05
Operaciones con Apuntadores
Las siguientes son las operaciones bsicascon apuntadores:
int b = 6;
int * p_b = &b; // OK
int * p_c = p_b; // OK
p_b = b; // NO!
p_c = &p_b // NO!
-
Programacin Digital I 1227/05/05
Parmetros por valor vs.Parmetros por referenciaEl paso de parmetros por referencia permite devolvervarios valores desde un procedimiento a travs de losparmetros actuales.
Si una funcin devuelve un solo valor usando lasentencia return, es mejor que todos sus parmetrossean por valor.
Las variables (parmetro actual) pasadas por valor auna funcin no pueden ser cambiadas.
Las variables pasadas por referencia pueden sercambiadas dentro de la funcin.
-
Programacin Digital I 1327/05/05
Paso de Parmetros porreferenciaDefinicin de la funcin en C
void nombre (tipo_dato &parmetro_formal_1,tipo_dato ¶metro_formal_2,...,tipo_dato ¶metro_formal_n)
{// Cuerpo de la funcin
}
Llamada a la funcin:nombre (parmetro_actual_1, parametro_actual_2, ,
parametro_actual_n);
-
Programacin Digital I 1427/05/05
Paso de parmetros porreferencia: Ejemplo 1#include
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 valorPor referencia
-
Programacin Digital I 1527/05/05
Paso de parmetros porreferencia: Ejemplo 2#include
// 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);}
-
Programacin Digital I 1627/05/05
Paso de parmetros porreferencia: Ejemplo 2
Nombrefuncin
Var. local Var. local Comentarios
f1 a = 0 b = 0 Dentro de f1f2 a = 0 b = 0 Dentro de f2main u = 1 v = 3 Antes de la
llamada a f1u = 1 v = 3 Despus de la
llamada a f1u = 0 v = 0 Despus de la
llamada a f2
Corrida en fro
-
Programacin Digital I 1727/05/05
Pase de parmetros porreferencia: Ejemplo 3#include
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;}
-
Programacin Digital I 1827/05/05
Escribir una funcin que reciba los valores enteros de x y n >0 como parmetros de entrada y devuelva el valor de xn comosalida.entero funcin 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_funcin
CODIFICAR.
Pase de parmetros por valor:Ejemplo 1
-
Programacin Digital I 1927/05/05
Escribir un programa que tome un conjunto de pares denmeros 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 parmetros por valor:Ejemplo 2
-
Programacin Digital I 2027/05/05
Paso de parmetros por valor:Ejemplo 3Realizar una funcin en C++ que permita sumar elnmero de elementos negativos de una lista de nnmeros reales.
funcin 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 nmero real)Leer (numero)Si (numero < 0.0) entonces
resultado = resultado + numerofin_si
fin_RP5. fin_funcion
-
Programacin Digital I 2127/05/05
Paso de parmetros: Ejemplo 3
Codificacin
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
-
Programacin Digital I 2227/05/05
Ejercicios
Escribir las funciones necesarias para leer cuatronmeros reales, calcular y escribir su producto, suma ysu media aritmtica.
Escribir una funcin que compruebe si un nmero dadoes correcto, en cuyo caso la funcin deber devolver elvalor q. En caso negativo, la funcin devolver el valor-1. Considere los siguientes casos para decidir si unnmero es o no correcto.
-
Programacin Digital I 2327/05/05
Ejercicios
El nmero es correcto si se encuentra en el rangodefinido por dos valores constantes MINIMO yMAXIMO.El nmero es correcto si es uno de tres valoresconstantes VALOR1, VALOR2 o VALOR3.El nmero es correcto si se encuentra en el rangodefinido por dos valores constantes MINIMO yMAXIMO, o bien es igual al valor constante VALOR1.El nmero 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.
-
Programacin Digital I 2427/05/05
Ejercicios
Escribir una funcin que tome un carcter comoparmetro de entrada y devuelva su tipo que podr seruno de los siguientes: (1) letra mayscula de la A a laZ, (2) letra minscula de la a a la z, (3) dgito del 0 al9.
Escribir una funcin que tome como parmetros deentrada dos instantes de tiempo expresados en horas,minutos y segundos e indique si el primero es anterior alsegundo.
-
Programacin Digital I 2527/05/05
Ejercicios
Dada la longitud, ancho y profundidad (en pies) de una piscina, elvolumen se calcula segn la siguiente frmula:
volumen = longitud*ancho*profundidad
Dado que un pie cbico de agua es equivalente a 7.8 galones, lacapacidad de agua de la piscina viene dada por la frmula:
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 frmula:
Tiempo = capacidad/20/60