Paso de Parametros

25
27/05/05 Programación Digital I 1 Paso de Parámetros a una Función Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes

description

Paso de Parametros

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 &parametro_formal_2,...,tipo_dato &parametro_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