funciones programación básica. definición una función es un bloque de código reconocido por un...

29
Funciones Programación básica

Upload: francisco-espinoza-romero

Post on 24-Jan-2016

235 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Funciones

Programación básica

Page 2: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Definiciónuna función es un bloque de código reconocido por un identificador que realiza un trabajo específico.

Su propósito es dividir los programas en módulos manejables separados (divide y vencerás).

El formato para la declaración de funciones es:

tipo-devuelto nombre-de-función(lista-de-parámetros)

{

declaraciones e instrucciones

}

Las funciones deben declararse antes de utilizarse.

Generalmente se definen mediante un prototipo que contiene solo el encabezado de la función.

Page 3: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ejemplos de prototiposint f(int a, float x, float y);

double g(double a, int c);

short m(int n, char c);

float promedio3(float x1,float x2,float x3);

int cuentaNegativos(void);

int cuentaNegativos();

char leeCaracter();

Page 4: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ejemplo de llamada a función

#include <iostream>Using namespace sd;int cuadrado( int ); // prototipo de la funciónint main(){ // repite 10 veces, calcula e imprime el cuadrado de x for ( int x = 1; x <= 10; x++ ) cout << cuadrado( x ) << " "; cout << endl; return 0;}

// definición de la función cuadradoint cuadrado( int y ) //y es una copia del argumento de la función{ return y * y; // devuelve el cuadrado de y como un int

} // fin de la función cuadrado

Prototipo de la función (puede omitirse)

Llamada a la función

Definición de la función

Page 5: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Área de una esfera#include <iostream>using namespace std;/*prototipo de función, devuelve un flotante y llevaun parámetro de tipo flotante*/float areaEsfera(float);main(){ float r,area; cout << "radio de la esfera: "; cin >> r; /*llamada a la función areaEsfera*/ area = areaEsfera(r); cout << "El area de la esfera es: " << area << endl; return 0;}/*definición de la función areaEsfera*/float areaEsfera(float radio){ return 4*3.14159265358979*radio*radio;}

Page 6: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Mayor de 3 númerosdouble maximo( double x, double y, double z ){ double max = x; // asume que x es el mayor if ( y > max ) // si y es mayor, max = y; // asigna y a max if ( z > max ) // si z es mayor, max = z; // asigna z a max return max; // max es el mayor}int main(){ double numero1; double numero2; double numero3;

cout << "Introduzca tres numeros de punto flotante: "; cin >> numero1 >> numero2 >> numero3;

// numero1, numero2 y numero3 son argumentos // de la función maximo cout << "El maximo es: " << maximo( numero1, numero2, numero3 ) << endl;

return 0;}

No necesita prototipo

Page 7: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Función senoidal decrecienteLa siguiente función implementa la fúrmula

tAe t sin

double ExpSenoidal(double A, double alfa, double f, double t){

return A*exp(-alfa*t)*sin(2*M_PI*f*t);

}

...

x = ExpSenoidal(2.0,50,2000,1e-3);

Page 8: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

#include <iostream>#include <cmath>using namespace std;double ExpSenoidal(double A, double alfa, double f, double t){ return exp(-alfa*t)*A*sin(2*M_PI*f*t);}main(){ int i,n; double t,x,a,alfa,f,dt; cout <<"valor de A:"; cin >>a; cout <<"valor de alfa:"; cin >>alfa; cout <<"valor de f:"; cin >>f; cout <<"numero de ciclos (1-5):"; cin >>n; dt = n/20.0/f; t = 0; for(i=0;i<20;i++){ x = ExpSenoidal(a,alfa,f,t); cout <<"t = "<<t<<" x= "<<x<<endl; t += dt; } system("pause");}

Page 9: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Función factorialEl factorial se defino por: N! = 1*2*3* ... *(N-1)*N

double fact(int N){

double f =1;

for(int i=2; i<=N; i++)

f *= i;

return f;

}

double combi(int N, int M){

return fact(N)/fact(N-M)

/fact(M);

}

El número de combinaciones de N elementos tomados de M en M esta dado por:

C = N! /((N-M)!M!)

Variables locales

Page 10: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Uso de la función combidouble fact(int N){ double f =1; for(int i=2; i<=N; i++) f *= i; return f;}double combi(int N, int M){ return fact(N)/fact(N-M)/fact(M);}int main(){ int p; cout << "Teclee la potencia del binomio: "; cin >> p; cout << "Los coeficientes son: "; for(int i= 0; i<=p ; i++) cout << combi(p,i) << " "; cout << "\n"; getch(); return 0;}

Este programa calcula los coeficientes de la expansión de un binomio a la potencia N.

Page 11: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Funciones tipo voidSe utiliza el tipo void para indicar que la función no regresa ningún valor.

Una función tipo void no debe aparecer en una instrucción de asignación en.

Ejemplo:

void despliegaNombre(){ cout << “Programa hecho por Fulanito de Tal.\n”;}Llamada a la función:

despliegaNombre();

Page 12: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ejemplo

#include <iostream.h>#include <conio.h>#include <iomanip.h>#include <math.h>void printReal(float r, int w, int d){ cout << fixed << setw(w) << setprecision(d) << r;}int main(){ double x; for(int i=0; i<=45 ; i+=2){ x = i*3.14159265/180.0; cout << "sen("; printReal(i,2,0); cout << ") = "; printReal(sin(x),8,6); cout << "\n"; } getch(); return 0;}

Despliega un número real con ancho w y d decimales

llamadas aprintReal

ancho 2decimales 0

ancho 8decimales 6

Page 13: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Diseño con funcionesComo ejemplo construyamos una aplicación basada en menús para hacer conversiones de unidades físicas.

Primero definiremos el esquema básico de la función main.

Supondremos que el programa se ejecutará hasta que el usuario elija la opción de terminar.

Una primera versión de la función main sería:

main(){ do{ desplegarMenu(); opcion=leerOpcion(); ejecutarOpcion(opcion); }while(opcion!=SALIR);}

Page 14: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

void desplegarMenu(){ system(“cls”); cout << “\n\nCONVERSION DE UNIDADES\n\n”); cout << “1. Velocidad m/s a km/h\n”; cout << “2. Velocidad km/h a mi/hr\n”; cout << “3. Temperatura ºC a ºF\n”; cout << “4. Temperatura ºF a ºC\n”; cout << “5. Salir\n”; cout << “\n\n\n opcion: ”;}

Page 15: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

void ejecutarOpcion(char opcion){ float v,t; switch(opcion){ case '1':cout << "Velocidad en mi/hr: "; cin >> v; cout<<"La velocidad en km/hr es:“z<< v*1.609; break; case '2':cout << "Velocidad en km/hr: "; cin >> v; cout<<"La velocidad en mi/hr es: "<<v/1.609; break; case '3':cout << "Temperatura en C: "; t = leerTemp(1); cout << "La Temperatura en F es: " << t; break; case '4':cout << "Temperatura en F: "; t = leerTemp(2); cout << "La Temperatura en C es: “ << t; break; }}

Page 16: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

float leerTemp(int tipo){ float x; do{ cin >> x; if(tipo==1&&x<-273.0) cout<<"La temperatura debe ser mayor a -273!\nTemperatura en C: "; if(tipo==1&&x<-450.0) cout<<"La temperatura debe ser mayor a -450!\nTemperatura en F: "; }while((tipo==1&&x<-273.0)||(tipo==2&&x<-450.0)); return x;}

Page 17: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

char leerOpcion(){ char c; do{ c = cin.get(); if(c>='1'&&c<='5') cout << c; }while(c<'1'||c>'5'); return c;}

Page 18: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Reglas de alcanceLas variables tiene un alcance dentro del bloque en que son declaradas.

Ver ejemplo: 3.12

Page 19: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Parámetros por referencia

Una función puede modificar los valores de los parámetros si estos se pasan por referencia.

Los parámetros por referencia se especifican con la siguiente notación

Tipo-función nombre-función (tipo &parámetro)

Page 20: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ejemplo de paso por referencia

#include <iostream.h>#include <conio.h>

void test(int &x){ x = 5;}

int main(){ int a = 8; test(a); cout << a; getch(); return 0;}

El valor del parámetro a es modificado dentro de la función.

Se imprime

5

Page 21: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ecuación cuadrática con funcionesvoid leer(double &a, double &b, double &c){ cout << "Tecle coeficientes a,b,c: "; cin >> a >> b >> c;}void calcularRaices(double a, double b, double c,double &x1, double &x2, int &caso){ double d = b*b-4*a*c; if(d>0){ x1 = (-b+sqrt(d))/2/a; x2 = (-b-sqrt(d))/2/a; caso = 1; }else if(d==0){ x1 = (-b+sqrt(d))/2/a; x2 = (-b-sqrt(d))/2/a; caso = 2; }else{ x1 = -b/2/a; x2 = sqrt(-d)/2/a; caso = 3; }}

Por referencia

Page 22: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Ecuación cuadrática con funciones

void imprime(double x1,double x2,int caso){ switch(caso){ case 1:cout <<"x1 = "<<x1<<" x2 = "<<x2<< endl;break; case 2:cout <<"x1 = x2 =" << x1 << endl;break; case 3:cout <<"re = "<<x1<<" im = "<<x2<< endl;break; }}int main(){ double a,b,c,x1,x2; int caso; leer(a,b,c); calcularRaices(a,b,c,x1,x2,caso); imprime(x1,x2,caso); getch(); return 0;}

Page 23: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Funciones recursivasUna función es recursiva si dentro del cuerpo de la función se hace una llamada a si misma.

Las funciones recursivas deben cumplir lo siguiente:

1. Debe existir un salida en la que no se haga la llamada recursiva

2. La llamada recursiva debe ser versión más simple que la llamada que la invocó.

Page 24: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Máximo Común Divisor

int gcd(int x, int y){ if((y<=x)&&(x%y == 0) return y; else if(x < y) return gcd(y,x); else return gcd(y,x % y);}

Definición:

1. el gcd(x,y) = y si y<x y el x mod y = 0

2. el gcd(x,y) = gcd(y,x) si x < y

3. el gcd(x,y) = gcd(y, x mod y)

Salida trivial

Llamadas recursivas

Page 25: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Calculo recursivo del factorialDefinición:

1. n! = 1 si n = 0

2. n! = n*(n-1)!

Salida trivial

Llamada recursiva

double fact(int n){ if(n==0) return 1; else return n*fact(n-1);}

Page 26: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Números de Fibonacci

int fib(int n){ if(n == 0 || n ==1 ) return n; else return fib(n-1)+fib(n-2);}

Los números de Fibonacci forman la secuencia: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Es decir cada uno es la suma de los dos anteriores.

Definición:

1. Fib(n) = n si n = 0 o 1

2. Fib(n) = fib(n-1) + fib(n-2)

Salida trivial

Llamada recursiva

Page 27: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Solución no recursiva a los números de Fibonacci

int fib(int n){ int a = 0; int b = 1; int c = a + b; for(int i=2, i<=n; i++){ c = a + b; a = b; b = c; } return c;}

Page 28: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

Funciones en líneaUna función en línea no genera sobrecarga en cada llamada.

Se optimiza el código generado por el compilador al sustituir la función en lugar de generar el código correspondiente a la llamada.

Las funciones en línea comienzan por la palabra reservada inline.

Las funciones en línea deben ser muy breves.

Page 29: Funciones Programación básica. Definición una función es un bloque de código reconocido por un identificador que realiza un trabajo específico. Su propósito

ejemplo de función en línea

inline double cubo( const double lado ) { return lado * lado * lado; // calcula el cubo} // fin de la función cuboint main(){ cout << "Introduzca la longitud del lado de su cubo: "; double valorLado; cin >> valorLado; // calcula el cubo de valorLado y despliega el resultado cout << "El volumen del cubo de lado " << valorLado << " es " << cubo( valorLado ) << endl; return 0; // indica terminación exitosa} // fin de main

función en línea