PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf ·...

25
PROGRAMACIÓN UNIDAD 1 FUNCIONES Primavera 2010

Transcript of PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf ·...

Page 1: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

PROGRAMACIÓNUNIDAD 1FUNCIONES

Primavera 2010

Page 2: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

Contenido

Introducción

Variables locales, globales y estáticas

Paso de parámetros

• Por Valor• Por referencia

Recursividad

Page 3: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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;

Page 4: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 5: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 6: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

}

Page 7: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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;

}

Page 8: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 9: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 10: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 11: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 12: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 13: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 14: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 15: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 16: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 17: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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;

}

Page 18: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 19: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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;

}

Page 20: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 21: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 22: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

}

Page 23: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 24: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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

Page 25: PROGRAMACIÓN UNIDAD 1 FUNCIONESgalia.fc.uaslp.mx/~rmariela/programacion/unidad11.pdf · Introducción Divide y Vencerás La principal idea detrás de las funciones es dividir un

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;

}