Procedimientos y Funciones Los Procedimientos y Funciones facilitan la estructuración y reutilización del código fuente, evitando la duplicación del mismo y facilitando su comprensión, así como el buscar errores en el programa. Al ser posible la reutilización del código fuente, pueden ser llamados desde diferentes partes del programa: tanto desde el programa principal como desde otros Procedimientos y Funciones. Sus parámetros pueden ser: • ENT (entrada): recogen el valor que se ha pasado desde el programa principal. • SAL (salida): usados para devolver un valor. • ENTSAL (entrada y salida): el mismo parámetro se usa tanto de entrada (para recibir un valor), como de salida (para devolver un valor como resultado). Es importante que los Procedimientos y Funciones validen internamente que los datos recibidos son válidos. A continuación describiremos los pasos necesarios para crear Procedimientos y Funciones usando algoritmos en pseudocódigo: ten en cuenta que podrás encontrar otras nomenclaturas válidas para hacerlo. La diferencia entre Procedimientos y Funciones es que los Procedimientos no retornan directamente un valor. Las variables pueden ser pasadas como parámetros a las Funciones y Procedimientos de los siguientes modos: por valor (se pasa realmente una copia de la variable) o por referencia (lo que se pasa realmente es la dirección de memoria de la variable, con lo que se estará usando la misma en ambas partes del código fuente, no una copia). Las variables creadas dentro de un Procedimiento o Función existen y son visibles sólo dentro de ellas. Procedimientos Consideraciones a la hora de crear un Procedimiento: Crearemos una variable en el programa principal para guardar el resultado devuelto por el Procedimiento. Al crear el Procedimiento se usa la nomenclatura... PROCEDIMIENTO nombre( param_entrada_1, ..., param_entrada_n, param_salida_1, ..., param_salida_n ) 1 Las variables internas, que será usadas sólo dentro del Procedimiento se declaran con LOCAL seguido de su tipo. Terminan con RETORNAR y FIN_PROCEDIMIENTO. Ejemplo: programa que usando un Procedimiento, muestre el resultado de sumar los números 10 y 20: Programa principal: ALGORITMO Principal; VAR REAL num1 ← 10; REAL num2 ← 20; REAL resultado; INICIO Sumar(num1, num2, resultado); ESCRIBIR("El resultado es: ", resultado); FIN Procedimiento: PROCEDIMIENTO Sumar( ENT REAL numero_1, ENT REAL numero_2, SAL REAL res ) INICIO res ← numero_1 + numero_2; RETORNAR; FIN_PROCEDIMIENTO Explicación: en el programa principal creamos tres variables: 'num1' y 'num2' en las que almacenaremos los números que pasaremos al Procedimiento (también se podrían haber escrito directamente los números, sin necesidad de usar variables), y otra de nombre 'resultado' que pasaremos como tercer parámetro y con la que se recogerá el valor devuelto por éste. En el Procedimiento definimos como de entrada los dos primeros parámetros y de salida el tercero (ya que a través de él, el programa principal recogerá el resultado). Hemos definido las variables como de tipo REAL, puesto que así pueden ser usadas también con números decimales. Las variables creadas dentro de un Procedimiento existen y son visibles sólo dentro de él. 2 Código fuente del programa principal: ALGORITMO Meses; VAR ENTERO numero; CARACTER mes ← ""; INICIO. ESCRIBIR("Dime un número"); LEER( numero ); DevolverMes( numero, mes ); SI( mes == "" ) ESCRIBIR("El número introducido no es válido"); SINO ESCRIBIR( "El número [", numero, "] corresponde al mes: ", mes ); FIN_SI17. FIN Código fuente del Procedimiento PROCEDIMIENTO DevolverMes( E ENTERO num, S CARACTER nombre ) INICIO SI( (num >= 1) AND (num <= 12) ) EN_CASO_DE num HACER 1: nombre ← "Enero"; 2: nombre ← "Febrero"; 3: nombre ← "Marzo"; 4: nombre ← "Abril"; 5: nombre ← "Mayo"; 6: nombre ← "Junio"; 7: nombre ← "Julio"; 8: nombre ← "Agosto"; 9: nombre ← "Septiembre"; 10: nombre ← "Octubre"; 11: nombre ← "Noviembe"; 12: nombre ← "Diciembre"; FIN CASO SINO nombre ← ""; FIN SI RETORNAR; FIN_PROCEDIMIENTO Explicación: desde el programa principal se llama al Procedimiento DevolverMes(), que tras comprobar si el número es válido carga el nombre del mes correspondiente en la variable 'nombre', o una cadena vacía (indicado con las dos comillas) en caso de no serlo. Posteriormente desde el programa principal se muestra el nombre del mes, o un mensaje de error en caso de haber recibido una cadena vacía. 3 Programa que usando una Función, muestra el nombre del mes que corresponde a un número Código fuente del programa principal: ALGORITMO Meses; VAR ENTERO numero; CARACTER mes ← ""; INICIO ESCRIBIR("Dime un número"); LEER( numero ); mes ← Devolver_Mes( numero ); SI( mes == "" ) ESCRIBIR("El número introducido no es válido"); . SINO ESCRIBIR( "El número [", numero, "] corresponde al mes: ", mes ); FIN_SI FIN Código fuente de la Función: CARACTER FUNCION Devolver_Mes( E ENTERO num ) VAR LOCAL CARACTER nombre ← ""; INICIO SI( (num >= 1) AND (num <= 12) ) EN_CASO_DE num HACER 1: nombre ← "Enero"; 2: nombre ← "Febrero"; 3: nombre ← "Marzo"; 4: nombre ← "Abril"; 5: nombre ← "Mayo"; 6: nombre ← "Junio"; 7: nombre ← "Julio"; 8: nombre ← "Agosto"; 9: nombre ← "Septiembre"; 10: nombre ← "Octubre"; 11: nombre ← "Noviembe"; 12: nombre ← "Diciembre"; FIN CASO FIN SI DEVOLVER nombre; FIN_FUNCION Explicación: desde el programa principal se llama a la Función Devolver_Mes(), que tras comprobar si el número es válido modificará el valor de la variable 'nombre' (que previamente se ha inicializado con una cadena vacía) con el nombre del mes correspondiente. En caso de que el número no sea válido la variable 'nombre' continuará teniendo el valor de cadena vacía. 4 Posteriormente desde el programa principal se muestra el nombre del mes, o un mensaje de error en caso de haber recibido una cadena vacía. Fuente http://www.informaticapc.com 5