Breve 6 Funciones Fundamentos de Informática Funciones • Permiten el desarrollo modular de un programa Llama a la función Le pasa la información que quiere que la función procese Programa principal Función (u otra función) La función devuelve el resultado al punto exacto donde la función fue llamada Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Breve 6: Funciones 2 Funciones #include <stdio.h> float Factorial (int num); Prototipo int main(void) { float facn; float facm; float resultado; int m; /* dato entrada */ int n; /* dato entrada */ Llamada Llamada printf (“Introduce m: “); scanf(“%d”,&m); printf (“Introduce n: “); scanf(“%d”,&n); facm = Factorial(m); facn = Factorial(n); resultado = facm/facn; printf(“\n Las combinaciones de m“ “sobre n vale: %f”,resultado); return 0; Departamento de Sistemas Informáticos } Escuela Técnica Superior de Ingeniería ICAI Función float Factorial (int num) { float resul; /* resultado */ int cont; /* índice bucle */ resul=1; for (cont=1; cont<=num; cont++){ resul *= cont; } return resul; } Breve 6: Funciones 3 Función Datos de entrada a la función ... tipo_devuelto NombreFuncion (tipo_1 argumento_1, ..., tipo_n argumento_n) { instrucción_1; expresion_devuelta instrucción_2; debe ser del tipo: ... tipo_devuelto instrucción_n; return expresion_devuelta; Variables locales: } Visibles SOLO dentro de la función •Si no hay expresion_devuelta: • tipo_devuelto: void • Última instrucción: return; float Factorial (int num) { float resul; int cont; resul=1; for (cont=1; cont<=num; cont++){ resul *= cont; } return resul; void MuestraNum (float num1) •Si no tiene argumentos: tipo_devuelto NombreFuncion (void) Ejemplo: int Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI } getchar(void) Breve 6: Funciones 4 Prototipo • Prototipo o declaración de una función: Se declara antes del programa principal Es la primera línea de la definición, con un ; al final tipo_devuelto NombreFuncion (tipo_1 argum_1, ...,tipo_n argum_n); float Factorial (int num); int getchar (void); void MuestraNum (float num1, float num2); Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Breve 6: Funciones 5 Llamada a una función La llamada a una función se encuentra en el programa principal, o en otra función • #include <stdio.h> float Factorial (int num); int main(void) { float facn; float facm; float resultado; int m; /* entrada */ int n; /* entrada */ /* .. Se lee m y n ...*/ Se copia contenido de m en num float Factorial (int num) { float resul; /* resultado */ int cont; /* índice bucle */ resultado=1; for (cont=1; cont<=num; cont++){ resultado *= cont; } return resul; facm = Factorial(m); facn = Factorial(n); resultado = facm/facn; printf(“\n Combinaciones: %f”, resultado); return 0; } } El contenido de resul se asigna a facm Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI ¡¡Deben Breve 6: Funciones coincidir los tipos!! 6 Recursividad • • En una función recursiva una sentencia en el cuerpo de la función invoca a la propia función Las llamadas recursivas se utilizan en problemas iterativos (repetitivos) en los que cada iteración se determina en función de un resultado anterior. #include<stdio.h> void Inverso(void); int main(void) { printf(“Introduce una linea de texto:\n”); Inverso(); return 0; } void Inverso(void) { char c; if ( (c = getchar() ) != ‘\n’) { Inverso(); } putchar(c); Llamada a la } propia función Departamento de Sistemas Informáticos Escuela Técnica Superior de Ingeniería ICAI Ejecución: Introduce una linea de texto abcdef fedcba Breve 6: Funciones 7