PROGRAMACIÓNUNIDAD 1FUNCIONES
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
M1=Maximo(x,y) int Maximo(int x, int y){
Encuentra el Máximo de x,y,z y w
max = x;if (y > max)
max = y;
M2=Maximo(z,w)
M=Maximo(M1,M2)
{if (x > y)
return (x);else
return (y);}
max = y;else
if (z > max)max = z;
elseif (w > max)
max = w;
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ácilmentesolució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
� Estructura del programa
#include <stdio.h>
int maximo(int x, int y);
main()
Inclusión deLibrerías
Prototipos deFunciones
bien definidas
� Todo programa en C consta de una o mas funciones
main(){int a,b,c;c = maximo (a,b)
return 0;}
int maximo(int x, int y){return}
ProgramaPrincipal
Definición deFunciones
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:
int factorial( int N)
( ) ��� ⋅−⋅⋅⋅= 1321! L
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);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. 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>
int cubo(int a);
int main(){int i,x;
for ( int i = 1; i <= 10 ; i++)
Este programa calcula el cubo de los
argumento formal
argumento for ( int i = 1; i <= 10 ; i++){
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);}
cubo de los 10 primeros números naturales
argumento actual
Ejemplo#include <stdio.h>#include <stdlib.h>
int fact(int 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");
Este programa calcula los coeficientes printf (" \ n");
system("pause");return 0;
}
int fact(int N){
int i,f =1;for(i=2; i<=N; i++)
f *= i;return f;
}
coeficientes de la expansión de un binomio a la potencia N.
argumento actual
Ejemplo#include <stdio.h>#include <stdlib.h>
int maximo(int x, int y);
int main(){int a,b,c,d;
printf ("a = "); scanf ("% i",&a );
Este programa encuentra el numero mas 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);
}
numero mas grande de 3 números
Ejemplo#include <stdio.h>#include <stdlib.h>
int maximo(int x, int y);
int main(){int a,b,c,d;
printf ("a = "); scanf ("% i",&a );
Este programa encuentra el numero mas 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);
}
numero mas grande de 3 números
Variables
� Las variables son objetos que pueden cambiar su valor durante la ejecución de un programa
� Existen tres tipos de variables� Locales� 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 � 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);
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");
Variable local main()
printf (" \ n");system("pause");return 0;
}
int fact(int N){
int i,f =1;for(i=2; i<=N; i++)
f *= i;return f;
}
Variable local fact()
Variables Globales
� Las variables globales son objetos definidos antes del inicio del programa principal y
#include <stdio.h>
#include <stdlib.h>
int x;
int suma(int a);
main()
{
Variables globales
programa principal y su alcance es muy amplio, ya que tiene influencia tanto en el programa principal como en las funciones
x = suma(5);
}
int suma(int a)
{
int b
b = a + x;
return b;
}
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 � 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);� 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 � 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
753xxx
� La formula supone que x se encuentra en radianes
� Utilice al menos una función
...!7!5!3
sen
753
+−+−= xxxxx
Ejemplo
• Se debe convertir los grados a radianes
Conversión de grados
• Es un proceso
inicialización x = 0
x <= 45
• Es un proceso iterativo de 0 a 45 en paso de 5
ciclo
• calculo del seno
seno
calcula seno(x)
x = x+5
convertir grados en radianes
FIN
Ejemplo
float seno(float x)
{
float fact = 1, pot = x, serie = x;
int signo = -1;
for ( int i = 3; i <=50 ; i +=2 )
...!7!5!3
sen
753
+−+−= xxxxx
for ( int i = 3; i <=50 ; i +=2 )
{
fact *= (i-1)*i;
pot *= x*x;
serie += signo*pot/fact;
signo = -signo;
}
return serie;
}