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

44
Tema 7c Entrada y salida de funciones

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

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

Tema 7c

Entrada y salida de funciones

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

Funciones

Funcion

Entradas SalidasTareas

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

Funciones

Funcion

int promedio(int n1, int n2, int n3){…

}

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

FuncionesRecibir entradas

Realizar calculos, tranformaciones, etc.

Preparar resultado

Entregar resultados

Validar entradas

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

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.

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

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.

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

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.

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

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

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

La instrucción “return”

return <sentencia> ;

Palabra reservada Fin de instruccion

return <variable>return <valor>return <var1><operador><var2>etc…

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

La instrucción “return”

return suma;

return 0;

return contador>1;

return suma-4;

return (a = = b);

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

La instrucción “return”

double pi(){ return 3.1415;}

void main(){…printf(“El valor de pi es %f\n”,pi()); …

}

13

2

4

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

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

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

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?

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

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

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

Ejemplo 2int 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?

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

Ejemplo 3double 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 -1i2=leerInteres();//usuario ingresa 56printf(“Intereses: %f y %f”, i1,i2);

}

12

4

5

6

7

8

3

10

11

12

13

9

14

15

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

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 (‘}’)

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

Retorno de void

void escribirMucho(){int i=0;for(i=0;;i=i*2){

printf(“%d-”,i);if(i%7==0)

return;}

}

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

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.

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

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;

}

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

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.

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

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;

}

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

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.

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

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!

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

Cuerpo de una funciónint x;void f(){

int y;x=1;

}

void g(){int z;y=z;

}Void h(){

int w;w=x;

}

Y no es accesibledesde aqui

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

Cuerpo de una funciónint 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ónentregue más de un valor

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

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.

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

Entrada de una función

<retorno> <nombre>(<lista parametros>);

<tipo> nombre, <tipo> nombre, …

<nombre>(<lista valores>);

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

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

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

Entrada de una función#include <stdio.h>

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

}

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

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

}

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

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?

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

Paso de parámetrosint 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);}

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

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?

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

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.

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

Paso de parámetrosint 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);

}

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

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 ‘&’.

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

Paso de parámetros

132 45

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

Paso de parámetros

51

70

23

1288

Memoria

A

B

C

D

1

2

3

4

Dirección de la variable

Nombrede la variable

Valor de la variable

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

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.

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

Paso de parámetrosint 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 dondese almacena i

Recibe un punteroa un variable int.Equivale a decirint* n

Consulta y modifica el contenido de la variable entrega por referencia (i)

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

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

}

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

Ejemplo 2void 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);

}

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

Fin Tema 7c

Entrada y salida de funciones