funciones curso propedéutico maestría en ingeniería electrónica

22
Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Upload: joaquin-contreras-poblete

Post on 02-Feb-2016

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Funciones

Curso Propedéutico

Maestría en Ingeniería Electrónica

Page 2: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Definición

una 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

}

Page 3: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Ejemplo de función

#include <iostream>

int cuadrado( int ); // prototipo de la función

int 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 4: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 5: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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

)sincos( tBtAe t

double ExpSenoidal(bouble A, bouble B, bouble alfa, bouble omega, double t){

return exp(-alfa*t)*(A*cos(omega*t)+B*sin(omega*t));

}

...

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

Page 6: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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

Variable local

Page 7: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 8: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Funciones tipo void Las funciones tipo void no regresan ningún valor solamente llevan a cabo algún cómputo.

#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 9: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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

Ver ejemplo: 3.12

Page 10: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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

nombre-función(tipo &parametro)

Page 11: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 12: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 13: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 14: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Tarea #8

1. Escriba funciones para calcular las funciones hiperbólicas de x: seno, coseno, tangente, cotangente, secante y cosecante.

2. Escriba una función para calcular el área de un polígono regular dados el número de lados y la longitud de un lado.

3. Escriba un programa similar al de la cuadrática para leer el radio y la altura de un cilindro y calcular su superficie y su volumen.

Page 15: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 16: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 17: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 18: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 19: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 20: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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 21: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

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

Page 22: Funciones Curso Propedéutico Maestría en Ingeniería Electrónica

Tarea #9

1. El producto de dos números enteros puede definirse recursivamente de la siguiente manera:

1. prod(a,b) = b si a =1

2. pord(a,b) = a + prod(a-1,b) si a>1.

Escriba una función recursiva para calcular el producto de dos enteros.

2. Escriba un programa en C++ que utilice una función en línea circleArea que le pida al usuario el radio del círculo e imprima su área.