paso de parámetros a una función · 2005. 5. 27. · ejercicios escribir las funciones necesarias...

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

Upload: others

Post on 14-Oct-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 2: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 3: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 4: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 5: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 6: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 7: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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);

}

Page 8: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 9: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 10: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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;

Page 11: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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!

Page 12: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 13: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

{// Cuerpo de la función

}

Llamada a la función:nombre (parámetro_actual_1, parametro_actual_2, …,

parametro_actual_n);

Page 14: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 15: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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);}

Page 16: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 17: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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;}

Page 18: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 19: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 20: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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

Page 21: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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;}

}

Page 22: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 23: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 24: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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.

Page 25: Paso de Parámetros a una Función · 2005. 5. 27. · Ejercicios Escribir las funciones necesarias para leer cuatro números reales, calcular y escribir su producto, suma y su media

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