Introducción a la Programación 7. Funciones. Roberto Marabini — Introduccin a la programacin — ETS – p.1/15 Introducción Las funciones se definen como bloques de código independientes con nombre he identidad propia. En principio se pueden compilar por separado. Otra forma de ver las funciones es como entidades aisladas de cálculo (algo parecido a las ecuaciones matemáticas) a las cuales se les suministra unos datos de entrada y proporcionan una cierta salida Pedazo de código entre llaves precedido por un nombre Roberto Marabini — Introduccin a la programacin — ETS – p.2/15 Ejemplo #include <stdio.h> #define MAX 10 int a[MAX]; int rand_seed=10; /* returns random number between 0 and 32767.*/ int rand(){//int rand () return {} rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } int main(){ int i,t,x,y; /* fill array */ for (i=0; i < MAX; i++){ a[i]=rand(); printf("%d\n",a[i]); } /* more stuff will go here in a minute */ return 0; } Roberto Marabini — Introduccin a la programacin — ETS – p.3/15 Definición Una función sencilla: no acepta parámetros y devuelve un int: int rand() /* from K&R - produces a random number between 0 and 32767.*/ { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } La línea int rand() define la función rand al resto del programa y especifica que rand no acepta parámetros y devuelve un entero. Roberto Marabini — Introduccin a la programacin — ETS – p.4/15 Variables locales int rand() /* from K&R - produces a random number between 0 and 32767.*/ { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } Esta función no tiene variables locales, si fueran necesario habría que declararlas despues de la llave { y su existencia desaparecería tan pronto como se alcance el } correspondiente. Roberto Marabini — Introduccin a la programacin — ETS – p.5/15 () int rand() /* from K&R - produces a random number between 0 and 32767.*/ { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } No hay “;” despues de () en la primera linea. Si accidentalmente pones unos el compilador te obsequiará con una cascada de errores sin sentido () es obligatorio aunque no se pasen parámetros. Si pones int rand en lugar de int rand() el compilador pensará que estas declarando un entero. Roberto Marabini — Introduccin a la programacin — ETS – p.6/15 Return int rand() /* from K&R - produces a random number between 0 and 32767.*/ { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } El comando return especifica el valor que la función devolverá y termina la función (como break con while). Una función puede tener varios returns y por lo tanto acabar potencialmente en diversos puntos. Si te olvidas de colocar return se devolverá un valor aleatorio. Roberto Marabini — Introduccin a la programacin — ETS – p.7/15 Llamada Hay diversas formas de llamar a la función int rand(). Por ejemplo: x=rand(); Se asigna a la variable x el valor devuelto por la función. if (rand() > 100) rand(); Roberto Marabini — Introduccin a la programacin — ETS – p.8/15 Funciones sin return Las funciones pueden declararse usando void void print_header() { printf("Programa Numebero 1\n"); printf("escrito por Pepe celebrin\n"); printf("Version 1.0, acabada el 26/12/91\n"); } Esta función no devuelve ningún valor. Puedes llamarla usando: print_header(); Recuerda que hay que utilizar (). Si no lo haces el programa compilará (en muchos compiladores) pero no funcionará correctamente. Roberto Marabini — Introduccin a la programacin — ETS – p.9/15 Pasar Parametros En C las funciones pueden aceptar parámetros de cualquier tipo: int factorial(int i) { int j,k; j=1; for (k=2; k<=i; k++) j=j*k; return j; } devuelve el factorial de i que se pasa como un entero. Roberto Marabini — Introduccin a la programacin — ETS – p.10/15 Pasar Parametros Si se desea pasar varios parámetros hay que separarlos entre comas: int add (int i, int j) { return i+j; } Roberto Marabini — Introduccin a la programacin — ETS – p.11/15 Codigo pre ANSI-C Estilo de definición viejo: int add(i,j) int i; int j; { return i+j; } versus nuevo int add(int i,int j) { return i+j; } IMPORTANTE: No mezclarlos nunca. Roberto Marabini — Introduccin a la programacin — ETS – p.12/15 Prototipos Es muy deseable usar prototipos para todas las funciones utilizadas en el programa. Un prototipo declara el nombre de la función, y el tipo de variables que requiere y devuelve. Veremos su utilidad y uso con un ejemplo funtion.c function2.c function3.c function4.c function5.c Roberto Marabini — Introduccin a la programacin — ETS – p.13/15 Ejercicio Escribir una función que calcule el area de un circulo de radio R Roberto Marabini — Introduccin a la programacin — ETS – p.14/15 Ejercicio Escribir una función que calcule el area de un circulo de radio R float areaCirculo(float R); float areaCirculo(float R) { return R*R*3.1416; } int main() { float R=1.0; printf("El area de un circulo de radio %f es %f", R,areaCirculo(R)); } Roberto Marabini — Introduccin a la programacin — ETS – p.15/15 Ejercicio Indica si es correcto el código maximo.c Roberto Marabini — Introduccin a la programacin — ETS – p.16/15 por valor y por referencia valor.c referencia.c Roberto Marabini — Introduccin a la programacin — ETS – p.17/15