PROGRAMACIÓN UNIDAD 1 FUNCIONES Primavera 2010 Contenido Introducción Variables locales, globales y estáticas Paso de parámetros • Por Valor • Por referencia Recursividad Introducción Encuentra el Máximo de x,y,z y w max = x; if (y > max) max = y; else if (z > max) max = z; else if (w > max) max = w; Encuentra el Máximo de x,y,z y w M1=Maximo(x,y) M2=Maximo(z,w) M=Maximo(M1,M2) int Maximo(int x, int y) { if (x > y) return (x); else return (y); } Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un problema en sub-problemas de solución sencilla Utilizando bloques (funciones) podemos alcanzar la solución al problema mas fácilmente Ventajas Facilitan la escritura y lectura de programas Facilitan la reutilización del código. Desarrollo modular de los programas Permiten la construcción de bibliotecas Definición Una función es un segmento del programa que realiza determinadas tareas bien definidas Todo programa en C consta de una o mas funciones Estructura del programa #include <stdio.h> Inclusión de Librerías int maximo(int x, int y); Prototipos de Funciones main() { int a,b,c; c = maximo (a,b) return 0; } Programa Principal int maximo(int x, int y) { return } Definición de Funciones Formato de las funciones El formato para la declaración de funciones es: tipo-devuelto nombre-de-función(lista-de-parámetros) { declaraciones e instrucciones } Ejemplo de función El factorial se define como: != 1 ⋅ 2 ⋅ 3 ⋅ L ( − 1) ⋅ int factorial(int N) { int f = 1; int i; for(i=2; i<=N; i++) f *= i; return f; } Acceso a una función Se puede acceder (llamar) a una función especificando su nombre seguido de sus lista de parámetros encerrados en paréntesis y separados por comas. Ejemplo: factorial(m); maximo(x,y); La llamada a la función puede aparecer sola o como parte de una expresión mas compleja x = factorial(m)*factorial(n); Acceso a una función Los argumentos que aparecen el la llamada de la función se denominan argumentos actuales Los argumentos que aparecen en la definición de la función son llamados argumentos formales. Debe existir una argumento actual por cada argumento formal. Los argumentos actuales pueden ser variables simples, constantes o expresiones Ejemplo #include <stdio.h> #include <stdlib.h> Este programa calcula el cubo de los 10 primeros números naturales int cubo(int a); argumento formal int main(){ int i,x; for(int i = 1; i <= 10 ; i++) argumento { actual x = cubo(i); printf("El cubo de %i es %i\n",i,x); } system("pause"); return 0; } int cubo(int a) { return (a*a*a); } Ejemplo #include <stdio.h> #include <stdlib.h> int fact(int N); Este programa calcula los coeficientes de la expansión de un binomio a la potencia N. int main(){ int p; printf("Teclee la potencia del binomio: "); scanf("%i",&p); printf("Los coeficientes son: "); for(int i= 0; i<=p ; i++) printf("%i ",fact(p)/(fact(p-i)*fact(i))); printf("\n"); system("pause"); return 0; } argumento int fact(int N) { int i,f =1; for(i=2; i<=N; i++) f *= i; return f; } actual Ejemplo #include <stdio.h> #include <stdlib.h> Este programa encuentra el numero mas grande de 3 números int maximo(int x, int y); int main(){ int a,b,c,d; printf("a = ");scanf("%i",&a); printf("b = ");scanf("%i",&b); printf("c = ");scanf("%i",&c); d = maximo(a,b); printf(“El maximo numero es %i \n“,maximo(d,c)); system("pause"); return 0; } int maximo(int x, int y) { if (x > y)return (x); else return(y); } Ejemplo #include <stdio.h> #include <stdlib.h> Este programa encuentra el numero mas grande de 3 números int maximo(int x, int y); int main(){ int a,b,c,d; printf("a = ");scanf("%i",&a); printf("b = ");scanf("%i",&b); printf("c = ");scanf("%i",&c); d = maximo(maximo(a,b),c); printf(“El maximo numero es %i \n“,d); system("pause"); return 0; } int maximo(int x, int y) { if (x > y)return (x); else return(y); } Variables Las variables son objetos que pueden cambiar su valor durante la ejecución de un programa Existen tres tipos de variables Locales Globales Estáticas Las variables locales son objetos definidos tanto en el programa principal como en las funciones. Su alcance se limita a al programa principal o función Variables locales Cada variable local definida en una función comienza a existir solo cuando se llama a esa función Esta variable desaparece cuando el control regresa al programa principal Debido a que no retiene su valor, debe ser inicializada cada vez que se ejecuta la función, de otra manera contendrá basura Ejemplo #include <stdio.h> #include <stdlib.h> int fact(int N); Variable local main() Variable local fact() int main(){ int p; printf("Teclee la potencia del binomio: "); scanf("%i",&p); printf("Los coeficientes son: "); for(int i= 0; i<=p ; i++) printf("%i ",fact(p)/(fact(p-i)*fact(i))); printf("\n"); system("pause"); return 0; } int fact(int N) { int i,f =1; for(i=2; i<=N; i++) f *= i; return f; } Variables Globales Las variables globales son objetos definidos antes del inicio del programa principal y su alcance es muy amplio, ya que tiene influencia tanto en el programa principal como en las funciones #include <stdio.h> #include <stdlib.h> int x; int suma(int a); main() { x = suma(5); } int suma(int a) { int b b = a + x; return b; } Variables globales Conflicto entre variables Las variables locales tiene prioridad sobre las variables globales que cuentan con el mismo nombre Si la función hace referencia a una variable global que tiene el mismo nombre que una variable local entonces deberá incluirse el operador :: antes de la variable. Ejemplo: ::suma Ejercicio #include <stdio.h> #include <stdlib.h> int f1(int x); int k = 5; int main(){ int i; for(i = 1; i <= 3; i++) f1(i); system("pause"); return 0; } int f1(int x) { int k = 2; k += x; printf(“El valor de la variable local es %d”,k); ::k += x; printf(“El valor de la variable global es %d”,k); return k; } Operador Void El operador void indica que no existe ninguna salida de la función Ejemplo: void printf(); void intercambio(int x, int y); También se usa para indicar la ausencia de parámetros de entrada. Ejemplo: int main(void); int pop(void); Paso de parámetros Los parámetros son las variables de entrada a la función y son el medio de comunicación entre las funciones y el programa principal Los parámetros pueden ser pasados a la función por: valor El valor de la variable es copiado al parámetro de entrada. Si este se ve modificado dentro de la función, este cambio no se vera reflejado en el programa principal referencia Parámetro por valor #include <stdio.h> void modificar(int a); main() { int a = 2; printf(“a = %d antes de llamar a la función”,a); modificar(a); printf(“a = %d despues de llamar a la función”,a); } void modificar(int a) { a *=3; printf(“Valor de a dentro de la función es %d”,a); } Ejemplo Calcule el valor del seno(x) para x de 0 a 45 grados en paso de 5 usando la siguiente formula 3 5 7 x x x sen x = x − + − + ... 3! 5! 7! La formula supone que x se encuentra en radianes Utilice al menos una función Ejemplo • Se debe convertir los Conversión grados a de grados radianes inicialización x = 0 x <= 45 ciclo seno • Es un proceso iterativo de 0 a 45 en paso de 5 • calculo del seno convertir grados en radianes calcula seno(x) x = x+5 FIN Ejemplo x3 x5 x7 sen x = x − + − + ... 3! 5! 7! float seno(float x) { float fact = 1, pot = x, serie = x; int signo = -1; for(int i = 3; i <=50 ; i +=2) { fact *= (i-1)*i; pot *= x*x; serie += signo*pot/fact; signo = -signo; } return serie; }