1 Funciones Programación básica
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 } Las funciones deben declararse antes de utilizarse. Generalmente se definen mediante un prototipo que contiene solo el encabezado de la función.
3 Ejemplos de prototipos int 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();
4 Ejemplo de llamada a función #include Using namespace sd; 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
5 Área de una esfera #include using namespace std; /*prototipo de función, devuelve un flotante y lleva un parámetro de tipo flotante*/ float areaEsfera(float); main(){ float r,area; cout > r; /*llamada a la función areaEsfera*/ area = areaEsfera(r); cout
6 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 > numero1 >> numero2 >> numero3; // numero1, numero2 y numero3 son argumentos // de la función maximo cout
7 Función senoidal decreciente La siguiente función implementa la fúrmula 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);
8 #include 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 >a; cout >alfa; cout >f; cout >n; dt = n/20.0/f; t = 0; for(i=0;i
9 Función factorial El factorial se defino por: N! = 1*2*3*... *(N-1)*N double fact(int N){ double f =1; for(int i=2; i
10 Uso de la función combi double fact(int N){ double f =1; for(int i=2; i p; cout
11 Funciones tipo void Se 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
12 Ejemplo #include void printReal(float r, int w, int d){ cout
13 Diseño con funciones Como 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); }
14 void desplegarMenu(){ system(“cls”); cout
15 void ejecutarOpcion(char opcion){ float v,t; switch(opcion){ case '1':cout > v; cout
16 float leerTemp(int tipo){ float x; do{ cin >> x; if(tipo==1&&x
17 char leerOpcion(){ char c; do{ c = cin.get(); if(c>='1'&&c
18 Reglas de alcance Las variables tiene un alcance dentro del bloque en que son declaradas. Ver ejemplo: 3.12
19 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)
20 Ejemplo de paso por referencia #include void test(int &x){ x = 5; } int main(){ int a = 8; test(a); cout
21 Ecuación cuadrática con funciones void leer(double &a, double &b, double &c){ cout > 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
22 Ecuación cuadrática con funciones void imprime(double x1,double x2,int caso){ switch(caso){ case 1:cout
23 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ó.
24 Máximo Común Divisor int gcd(int x, int y){ if((y
25 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); }
26 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
27 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
28 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.
29 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 cubo int main(){ cout > valorLado; // calcula el cubo de valorLado y despliega el resultado cout