UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Llamados de Función Una vez que en su programa se ha definido una función, esta puede ser llamada las veces que sean necesarias. Para llamar a una función basta con hacer referencia a su nombre y si la misma requiere de parámetros estos deberán indicarse dentro de paréntesis. Para llamar a una función que no requiera de parámetros se deberá indicar el nombre de la misma seguida de paréntesis vacios. Por ejemplo, para llamar una función llamada “cuadrado”, se escribiría: cuadrado(); Si la función cuadrado utiliza un parámetro de tipo int, se escribiría: cout << cuadrado(25); ó cout << cuadrado(X); Si la función cuadrado utiliza un parámetro y además devuelve un valor, su llamada sería: R = cuadrado(X); // guardar en R el cuadrado de X Prototipos: para utilizar una función en un programa, se requiere en primer lugar declararla y después definirla. La declaración de la función le indica al compilador el nombre, el tipo de dato devuelto por la función y los parámetros pasados a la función. A la declaración de una función se le llama también el prototipo Un prototipo es una declaración de una función. Consiste simplemente en el encabezado de la función, terminado con punto y coma (;) lo que hace es avisar al compilador, como se va a llamar la función y si recibe y devuelve información La estructura de un prototipo es: <tipo> func(<lista de declaración de parámetros>); Ejemplo: int Mayor(int a, int b); // es un prototipo de función que devuelve un entero y recibe dos parámetros enteros. Aunque C permite realizar el prototipo de la siguiente manera: int Mayor(int,int); Ejemplo de Función definida por el usuario Codificación en lenguaje C++ (IDE FALCON) /*Autor: Mirian Benavides - UNAD U2 Página 4 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION Programa: Función 1 */ //DIRECTIVAS DEL PRE-PROCESADOR #include <iostream> #include <stdlib.h> using namespace std; float mi_funcion(int i, double j); /* DECLARACION observe que termina en ";" */ int main() //Función principal { float resultado; int a = 5; double b = 2.5; resultado = mi_funcion(a,b); /* LLAMADA a la función */ cout<<"El resultado de mi_funcion es : " <<resultado; cout<<endl<<endl; system("pause"); return 0; } float mi_funcion(int i, double j) /* DEFINICION observe que NO lleva ";" */ { float x; x = i * j; return (x); /* RETORNO devolviendo un valor float */ } Entonces la estructura general de un programa en C++ quedaría así: [directivas del pre-procesador: include y define] [declaración de variables y constantes globales] [prototipos de funciones] función main () [definiciones de funciones] //definidas en los prototipos Se debe aclarar que hay programas en que no se utilizan las variables y constantes de tipo global y las funciones diseñadas por el usuario se definen antes de la función principal main() (en este caso no hay necesidad de incluir el prototipo de la función. Observe a continuación el ejemplo de la función 1, estructurado de una forma diferente que también es válido: /*Autor: Mirian Benavides - UNAD Programa: Función 1A U2 Página 5 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION IDE FALCON */ //DIRECTIVAS DEL PRE-PROCESADOR #include <iostream> #include <stdlib.h> using namespace std; float mi_funcion(int i, double j) /* DEFINICION. No se incluye el prototipo porque la definición se realiza antes de la función principal main()*/ { float x; x = i * j; return (x); /* RETORNO devolviendo un valor float */ } int main() //Función principal { float resultado; int a = 5; double b = 2.5; resultado = mi_funcion(a,b); /* LLAMADA a la función */ cout<<"El resultado de mi_funcion es : " <<resultado; cout<<endl<<endl; system("pause"); return 0; } Recursividad Esta es la propiedad que tienen las funciones en C++ de poder llamarse a sí mismas. Se dice que una función es recursiva cuando se autollama. No todas las funciones pueden llamarse a sí mismas (ser recursivas), deben estar diseñadas especialmente para que tengan un final y no se conviertan en ciclos o bucles infinitos. Es importante notar que cuando una función se llama a sí misma, una nueva copia de esta función es la que se ejecuta. Las variables locales de la segunda función no interfieren con las variables locales de la primera, así mismo, las variables locales no se pueden afectar mutuamente. Se tomará como ejemplo un programa que calcule el factorial de un número entero introducido por el usuario. El factorial está definido como el producto del número en cuestión por todos los números enteros menores que él, de tal manera que el factorial de 5=5*4*3*2*1 = 120. El código puede quedar así: #include <iostream> U2 Página 6 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD ESCUELA DE CIENCIAS BASICAS, TECNOLOGIA E INGENIERIA CONTENIDO DIDÁCTICO DEL CURSO: 301304 – INTRODUCCION A LA PROGRAMACION #include <stdlib.h> using namespace std; int K=1; // variable global, para un contador general double factorial(int valor) { double R; if(valor<=1) return 1; else { R= (valor*factorial(valor-1)); K = K+1; } return R; } int main() //Función principal { int num; cout << "Introduzca un numero" << endl; cin >> num; cout << endl; cout << "El factorial del número es " << factorial(num) << endl; cout << "La funcion se llamo en forma recursiva " << K << " veces" << endl; system("pause"); return 0; } 1. La función se declara de tipo doble, puesto que los valores que retorna la función pueden ser demasiado grandes. 2. También se utiliza una variable global (K), que sirve de contador, para determinar el número de iteraciones que la función se repite 3. El programa empieza solicitándole un número entero y después llama por primera vez a la función factorial ( ). La recursividad necesita una condición para terminar el proceso en el momento especifico, por ésta razón, la función factorial () determina en primer lugar si el valor pasado como parámetro de la función es igual a 1, en cuyo caso la función retorna 1. Si el valor del parámetro es mayor que 1, entonces la función factorial ( ) se llama a sí misma tomando como parámetro el valor original menos uno, multiplicando éste valor por el valor del parámetro original y almacenando el resultado en la variable llamada resultado. (se recomienda realizar una prueba de escritorio para entender un poco más el movimiento de la función y sus iteraciones). U2 Página 7