La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.

Presentaciones similares


Presentación del tema: "Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas."— Transcripción de la presentación:

1 Tema 7c Entrada y salida de funciones

2 Funciones Funcion Entradas SalidasTareas

3 Funciones Funcion int promedio(int n1, int n2, int n3){ … }

4 Funciones Recibir entradas Realizar calculos, tranformaciones, etc. Preparar resultado Entregar resultados Validar entradas

5 Funciones En este tema nos centraremos en –La recepción y validacion de entradas. –Los detalles del cuerpo de la funcion –La preparacion y entrega de la salida. Partiremos por la salida por ser más simple.

6 Salida de una función Una función realiza transformaciones y calculos sobre las entradas para generar una salida. Una vez que se ejecutan todos los pasos necesarios la salida es “devuelta” a quien invocó a la función. La devolución de la salida implica el termino de la función –Una vez devuelto el resultado, el programa sigue su ejecucion justo despues de la invocación.

7 Salida de una función Una función debe definir el tipo de dato que devuelve –int –double –char –void –etc. El valor que devuelva debe ser consecuente con el tipo de dato especificado.

8 La instrucción “return” Para indicar el valor “devuelto” por la función, se utiliza la palabra reservada return. Return indica que ha llego el momento de entregar la salida al invocador –Es necesario entregar el valor a devolver –Implica el termino de la función

9 La instrucción “return” return ; Palabra reservada Fin de instruccion return etc…

10 La instrucción “return” return suma; return 0; return contador>1; return suma-4; return (a = = b);

11 La instrucción “return” double pi(){ return 3.1415; } void main(){ … printf(“El valor de pi es %f\n”,pi()); … } 1 3 2 4

12 La instrucción “return” double pi(){ return 3.1415; } void main(){ printf(“El valor de pi es %f\n”,pi()); } double pi(){ return 3; } double pi(){ return “3.1415”; }

13 La instrucción “return” La instrucción return debe entregar un valor acorde al tipo especificado en la declaración Además, indica el termino de la función –Una vez invocado, no se ejecutan mas instrucciones de la función. –¿Tiene sentido entonces definir instrucciones despues de ella?

14 Ejemplo 1 int leerNumero(){ int n=0; scanf(“%d”,&n); return n; } int leerNumero(){ int n=0; scanf(“%d”,&n); return n; printf(“ok”); } Nunca se ejecuta

15 Ejemplo 2 int leerPositivo(){ int n=0; scanf(“%d”,&n); if(n>0) return n; } int leerPositivo(){ int n=0; scanf(“%d”,&n); if(n>0) return n; else{ printf(“error”); return 0; } ¿Y si n<=0?

16 Ejemplo 3 double leerInteres(){ double i=0; printf(“Interes?[0-100]%:”); scanf(“%lf”,&i); if(i<0) return 0; i= i/100; return i; } void main(){ double i1=0,i2=0; i1=leerInteres();//usuario ingresa -1 i2=leerInteres();//usuario ingresa 56 printf(“Intereses: %f y %f”, i1,i2); } 1 2 4 5 6 7 8 3 10 11 12 13 9 14 15

17 Retorno de void Si la función especifica un tipo de retorno “void” puede utilizar a “return” sin especificar un valor. Sirve para terminar la ejecucion de una función. Si no se utiliza ningun “return”, la función termina con el cierre de llave (‘}’)

18 Retorno de void void escribirMucho(){ int i=0; for(i=0;;i=i*2){ printf(“%d-”,i); if(i%7==0) return; }

19 Retorno en “main” Si la funcion main se define como void, return termina la aplicación Main se puede definir con devolución entera –El sistema operativa interpreta este valor como “ejecutado con éxito”, “termino forzoso” u otro. –Altamente dependiente del sistema operativo.

20 Retorno en “main” int main(){ double i1=0,i2=0; i1=leerInteres(); if(i1==0) return 0; i2=leerInteres(); if(i1==0) return 0; printf(“Intereses: %f y %f”, i1,i2); return 1; }

21 Retorno en “main” Otra forma de poner termino a un programa es con la función “exit”. “exit” finaliza el programa desde cualquier parte (incluso dentro de funciones). “exit” recibe como parámetro el valor que se entrega al sistema operativo. –Si se omite, por norma se entrega un cero.

22 Retorno en “main” double leerInteres(){ double i=0; printf("Interes?[0-100]%:"); scanf("%lf",&i); if(i<0) exit(0);//return 0; i= i/100; return i; } void main(){ double i1=0,i2=0; i1=leerInteres(); if(i1==0) printf("Error");//return 0; i2=leerInteres(); if(i1==0) printf("Error");//return 0; printf("Interes:%fy%f", i1,i2); //return 1; }

23 Cuerpo de una función El cuerpo de una función es un conjunto de instrucciones Se pueden definir variables locales –Estas variables solo son visibles dentro de la función. –El función no puede afectar cosas fuera de ella. –Los nombres de variables debe ser únicos solo dentro de ella.

24 Cuerpo de una función Variables globales –Son variables definidas fuera de toda función. –Cualquiera las puede leer y modificar. –Deben ser únicas a través de todo el programa. Las variable globales pueden sustituir la entrada y la salida!

25 Cuerpo de una función int x; void f(){ int y; x=1; } void g(){ int z; y=z; } Void h(){ int w; w=x; } Y no es accesible desde aqui

26 Cuerpo de una función int n1,n2; double pa, pg; void promedios(){ pa = (n1+n2)/2; pg = sqrt(n1*n2); } void main(){ n1=80; n2=30; promedios(); printf("promedios: %.0f - %.0f\n",pa,pg); } Permite que la función entregue más de un valor

27 Entrada de una función Las entradas de una función se definen en forma de parámetros. Los parametros se definen por un nombre y un tipo. Actuan como variables locales de la función. Definen la forma en que la función debe ser invocada.

28 Entrada de una función ( ); nombre, nombre, … … ( ); …

29 Entrada de una función int f(int a, double d, char c){ … } int main(){ f(1, 1.0, ’1’); f(0); f(12.5, 12.5, ’a’); f(‘a’, 12, 12.5); } Bien! Faltan parámetros Error de tipos (funciona) Parámetros en desorden

30 Entrada de una función #include void mostrarLinea(char c, int n){ int i; for(i=0;i<n;i++) printf("%c",c); printf("\n"); } void mostrarPorcentaje(double porc){ printf("%.2f%\n",100*porc); } void main(){ mostrarLinea('*',6); mostrarPorcentaje(0.12345); mostrarLinea('*',6); }

31 Entrada de una función void mostrarPorcentajeYLineas( double porc, char c, int n) { mostrarLinea(c,n); mostrarPorcentaje(porc); mostrarLinea(c,n); } void main(){ mostrarPorcentajeYLineas(0.89766,'*',6); }

32 Entrada de una función Al definir parámetros, definimos los valores que deben ser entregados al hacer la invocación. Los valores utilizados en la invocación se asignan a las variables que representan los parámetros. Este proceso se denomina “paso de parámetros” ¿Qué pasa si se modifican estas variables?

33 Paso de parámetros int validar(int n){ if(n>0 && n<10) return 1; else{ n=1; return 0; } void main(){ int i; printf("Ingrese numero: "); scanf("%d", &i); if(validar(i)) printf("%d esta ok\n",i); else printf("%d esta mal\n",i); }

34 Paso de parámetros En el caso anterior, al modificar el parámetro, no pasa nada con la variable original. Esto se llama “paso por valor” Es la forma por defecto La función no puede modificar las variables entregadas en la invocación. ¿Cómo funciona scanf entonces?

35 Paso de parámetros Existe una segunda manera de pasar parametros Se denomina “paso por referencia” Esto permite modificar las variables entregadas en la invocación.

36 Paso de parámetros int validar(int *n){ if((*n)>0 && (*n)<10) return 1; else{ (*n)=1; return 0; } void main(){ int i; printf("Ingrese numero: "); scanf("%d", &i); if(validar(&i)) printf("%d esta ok\n",i); else printf("Estaba mal, pero lo arregle a %d\n",i); }

37 Paso de parámetros El paso por referencia modifica –La definición de la función. –El cuerpo de la función. –La invocación de la función. Lo que sucede es que en vez de entregar el solo el valor de la variable de origen, se entrega la variable misma (una referencia a ella) A continuación veremos el significado de los operadores ‘*’ y ‘&’.

38 Paso de parámetros 13 2 4 5

39 51 70 23 1288 Memoria A B C D 1 2 3 4 Dirección de la variable Nombre de la variable Valor de la variable

40 Paso de parámetros 51 70 23 1288 A B C D 1 2 3 4 A: la variable llamada A A tiene un tipo definido (int). Leer A entrega el valor almacenadoen la variable (51). Modificar A cambia el valor almacenado. &A: extrae la dirección de la variable A tiene un tipo definido (int). Leer &A entrega la dirección donde se almacena la variable (1). Modificar &A no es válido. *A: un puntero a alguna variable A tiene un tipo definido (direccion o puntero a int). Leer A entrega la dirección a la cual apunta A. Leer *A entrega el contenido de la variable a la cual apunta A Modificar *A modifica el contenido de la variable a la cual apunta A.

41 Paso de parámetros int validar(int *n){ if((*n)>0 && (*n)<10) return 1; else{ (*n)=1; return 0; } void main(){ int i; printf("Ingrese numero: "); scanf("%d", &i); if(validar(&i)) printf("%d esta ok\n",i); else printf("Estaba mal, pero lo arregle a %d\n",i); } Entrega la direccion donde se almacena i Recibe un puntero a un variable int. Equivale a decir int* n Consulta y modifica el contenido de la variable entrega por referencia (i)

42 Ejemplo 1 void intercambiar(int *a, int *b){ int temp; temp=*a; *a = *b; *b=temp; } void main(){ int x,y; x=1; y=3; printf("Antes: %d - %d\n",x,y); intercambiar(&x,&y); printf("Despues: %d - %d\n",x,y); }

43 Ejemplo 2 void promedios(int n1, int n2, double* pa, double* pg){ *pa = (n1+n2)/2; *pg = sqrt(n1*n2); } void main(){ int c1,c2; double pg, pa; c1=80; c2=30; promedios(c1,c2,&pa,&pg); printf("promedios: %.0f - %.0f\n",pa,pg); }

44 Fin Tema 7c Entrada y salida de funciones


Descargar ppt "Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas."

Presentaciones similares


Anuncios Google