1 / 22

Funciones

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

giza
Télécharger la présentation

Funciones

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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 }

  3. Ejemplo de función Prototipo de la función (puede omitirse) #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 cuadrado int 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 Llamada a la función Definición de la función

  4. Mayor de 3 números double 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

  5. Función senoidal decreciente La siguiente función implementa la fúrmula 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);

  6. Función factorial El factorial se defino por: N! = 1*2*3* ... *(N-1)*N El número de combinaciones de N elementos tomados de M en M esta dado por: C = N! /((N-M)!M!) 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); } Variable local

  7. Uso de la función combi 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); } 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.

  8. 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 ancho 2 decimales 0 llamadas a printReal ancho 8 decimales 6

  9. Reglas de alcance Las variables tiene un alcance dentro del bloque en que son declaradas. Ver ejemplo: 3.12

  10. 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)

  11. Ejemplo de paso por referencia El valor del parámetro a es modificado dentro de la función. Se imprime 5 #include <iostream.h> #include <conio.h> void test(int &x){ x = 5; } int main(){ int a = 8; test(a); cout << a; getch(); return 0; }

  12. Ecuación cuadrática con funciones void 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

  13. 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; }

  14. 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.

  15. Funciones recursivas Una 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ó.

  16. Máximo Común Divisor 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 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); }

  17. Calculo recursivo del factorial Definició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); }

  18. Números de Fibonacci 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 int fib(int n){ if(n == 0 || n ==1 ) return n; else return fib(n-1)+fib(n-2); }

  19. 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; }

  20. Funciones en línea Una 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.

  21. ejemplo de función en línea función en línea inline double cubo( const double lado ) { return lado * lado * lado; // calcula el cubo } // fin de la función cubo int 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

  22. 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.

More Related