UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN LABORATORIO #4 ACCIONES Y FUNCIONES en C++ Acciones y Funciones La definición de acciones y funciones permite asociar un nombre o identificador a un bloque de instrucciones. Luego, dicho identificador puede ser usado para indicar en algún punto de un algoritmo que se utilizará el bloque de instrucciones al cual hace referencia el identificador, pero sin tener la necesidad de repetirlas, sólo invocando a la acción o función por su nombre. La sintaxis de las Acciones y Funciones, tanto en PseudoFormal como en C++ es la siguiente: • Acciones: Pseudoformal Acción <Nombre_de_la_Acción> (<lista_Parámetros>) // cuerpo de la acción FinAcción C++ void <Nombre_de_la_Acción> (<lista_Parámetros>){ // cuerpo de la acción } • Funciones: Pseudoformal Función <Nombre_de_la_Función> (<lista_parámetros>) : <tipo_de_dato_a_devolver> // cuerpo de la función Retornar <valor_devolver_como_resultado> FFunción C++ <tipo_de_dato_a_devolver> <Nombre_de_la_Función> (<lista_parametros>){ // cuerpo de la función return (<valor_devolver_como_resultado>); } 1 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN Es importante resaltar que en las funciones siempre debe existir la sentencia de retorno (return). Al ejecutarse la sentencia return, se devuelve el valor a la sección del programa que invocó dicha función y continúa el flujo del programa desde dicho punto. La sentencia debe “devolver” una variable o un valor “<valor_devolver_como_resultado>”, del tipo de dato que se define que devuelve la función “<tipo_de_dato_a_devolver>”. Las acciones se caracterizan por no retornar valores al algoritmo que las llama, mientras que las funciones retornan un valor. Sin embargo, aunque las acciones no retornan valores, sí pueden informar al algoritmo que las llamó (a veces llamado algoritmo principal) de cambios realizados por sus instrucciones en algunos valores a través del pase de parámetros por referencia. Ejemplo: Función que calcula el cuadrado de un número entero dado (n) como parámetro de la función #include <iostream> using namespace std; int Cuadrado (int n){ int cuadrado = 0; cuadrado=n*n; return cuadrado; } int main(){ int n,resultado; cout << "Indique el valor de n" << endl; cin >> n; resultado=Cuadrado(n); cout << "El valor obtenido es " << resultado << endl; } Pase de Parámetros: Los parámetros son aquellos argumentos o datos que se proporcionan al procedimiento en la invocación, y que este utilizará para sus cálculos. Los parámetros pueden ser pasados por referencia o por valor. La utilización de parámetros es opcional. En C++ el paso por valor significa que al compilar la función y el código que llama a la función, ésta recibe una copia de los valores de los parámetros que se le pasan como argumentos. Las variables originales no se pasan a la función, sólo copias de su valor. Sin embargo, cuando es necesario modificar el valor de la variable que se pasa como parámetro dentro de la función y reflejar dicho cambio en la función invocante, el parámetro se pasa por referencia. En este método, el compilador no pasa una copia del valor del argumento; en su lugar, pasa una referencia, que indica a la función dónde existe la variable en memoria. 2 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN Pseudoformal Acción Suma (Entero val1, Entero val2, Ref Entero Resultado){ // cuerpo de la acción FinAcción C++ void Suma (int val1, int val2, int& Resultado){ // cuerpo de la acción } Ejemplo: Muestra el paso de parámetros por valor. Se puede cambiar la variable del parámetro en la función, pero su modificación no se puede salir al exterior #include <iostream> using namespace std; void DemoLocal(int valor); int main (){ int n=10; cout << "Antes de llamar a DemoLocal, n=" << n << endl; DemoLocal(n); cout << "Despues de llamada a DemoLocal, n="<< n << endl; cout << "Pulse enter para continuar"; cin.get(); } void DemoLocal(int valor){ cout << "Dentro de DemoLocal, valor (1)="<< valor << endl; valor = 999; cout << "Dentro de DemoLocal, valor (2)="<< valor << endl; } 3 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS ESCUELA DE COMPUTACIÓN ALGORITMOS Y PROGRAMACIÓN Ejemplo: Muestra el paso de parámetros por referencia. Se puede cambiar la variable del parámetro en la función y dicho cambio se ve reflejado en el Algoritmo Principal #include <iostream> using namespace std; void DemoLocal(int& valor); int main (){ int n=10; cout << "Antes de llamar a DemoLocal, n=" << n << endl; DemoLocal(n); cout << "Despues de llamada a DemoLocal, n="<< n << endl; cout << "Pulse enter para continuar"; cin.get(); } void DemoLocal(int& valor){ cout << "Dentro de DemoLocal, valor (1)="<< valor valor = 999; << endl; cout << "Dentro de DemoLocal, valor (2)="<< valor << endl; } Ejercicios 1. Construir una función llamada Factorial que solicite al usuario un numero n≥0 y calcule y retorne el resultado de su factorial(n!). Nota: 0!=1 2. Construir un procedimiento que intercambie los valores de dos variables. Invocar desde la acción principal a este procedimiento para que intercambie dos valores leídos desde teclado y los muestre por pantalla. 3. Hacer una función que reciba como parámetro 2 valores y diga cuantos números pares e impares existen entre los 2 números. 4. Escribir una función sumarDigitos(Entero n) que calcule y devuelva la suma de los dígitos del parámetro n. Escribe un algoritmo equivalente pero utilizando una acción. 5. Escriba una acción que solicite un carácter al usuario y luego lea una secuencia de caracteres terminada en ‘*’. Encuentre y escriba en que iteraciones apareció el carácter por primera y por última vez. Si el carácter suministrado no está en la secuencia deben escribirse como resultados cero (0) para ambos casos. Prep. María F. Vitola. GDAYP, Octubre. 2010 Revisión: Prof. Adriana Liendo Sánchez, Abril 2011 4