Subprogramas: Parámetros 1 2 3 4 5 6 7 8 9 10 11 12 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 PROGRAM ParametrosEntradaSalida; VAR Numero_1, iNumero_2 : Integer ; PROCEDURE Sumar_5 (Valor_1: Integer; Valor_2: Integer); BEGIN Writeln(' DENTRO de Sumar_5, ANTES de la suma Valor_1 := Valor_1 + 5 ; Valor_2 := Valor_2 + 5 ; Writeln(' END; DENTRO de Sumar_5, DESPUES de la suma : ', Valor_1 :4,Valor_2 :4); : ', Valor_1 :4, Valor_2 :4); BEGIN {--------------------------- Programa principal ----------------------} Numero_1 := 10 ; Numero_2 := 20 ; Writeln('En PROGRAMA PRINCIPAL Writeln ; ANTES de llamar a Sumar_5: ', Numero_1 :4, Numero_2 :4); Sumar_5 (Numero_1, Numero_2); Writeln ; Writeln('En PROGRAMA PRINCIPAL DESPUES de llamar a Sumar_5: ', Numero_1 :4, Numero_2 :4); WriteLn ; ReadLn ; END. 1. Verificar que se trata de un programa con un subprograma Sumar_5, y las características de éste Líneas 5 a 12: Declaración del subprograma Sumar_5. Es un subprograma de tipo procedimiento ( PROCEDURE ), que tiene dos parámetros formales. Los parámetros son de entrada (no van precedidos de la palabra reservada VAR) y son de tipo Integer. Línea 22: Llamada al subprograma Sumar_5. Observar cómo es la llamada a un procedimiento. Se trata de una sentencia, que comienza con el nombre del procedimiento y seguido (y entre paréntesis) de tantos parámetros actuales o reales como parámetros formales se han indicado en la declaración del subprograma (línea 5). Los parámetros actuales van separados por comas. 2. Parámetros de Entrada Comprobar que se trata de parámetros de entrada (paso por valor): Los valores de los parámetros actuales del programa principal se pasan al subprograma. o Ejecutar el programa y anotar los valores mostrados por pantalla. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL 2015 ©Fabián López _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ Informática 1 Cambiar los nombres de los parámetros a Numero_1 y Numero_2 (Líneas 5 a la 14). Comprobar que el hecho de que los identificadores (nombres) de los parámetros formales y actuales, coincidan o no, no afecta al funcionamiento del programa. Cambiar los valores asignados a las variables Numero_1 y Numero_2 (Líneas 18 y 19), compilar y ejecutar de nuevo el programa. Comprobar que los nuevos valores se han pasado al subprograma. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ Cambiar la llamada al subprograma. Sustituir las variables por expresiones: Comprobar que los valores pasados al subprograma son los valores de las expresiones. Sumar_5 (Numero_1 + 10, Numero_2 + 20); 3. Correspondencia entre los tipos de los parámetros formales y actuales. Los parámetros formales y actuales deben ser del mismo tipo o algún tipo compatible Inicialmente los parámetros formales son Integer (Línea 5) y los actuales son Integer (Línea 3). Cambiar el tipo de dato de los parámetros formales a Real (los actuales son de tipo Integer). Compilar y ejecutar. ¿Qué ocurre?. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ Cambiar el tipo de dato de los parámetros actuales a Real (los formales son de tipo Integer). Compilar y ejecutar. ¿Qué ocurre?. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ ¿Puedes explicar lo que ha ocurrido?. ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ 2015 ©Fabián López Informática 2 4. Parámetros de Salida. En Pascal son parámetros de Entrada/Salida Partiendo del programa inicial, cambiar el tipo de parámetro del parámetro formal Valor_2 para que sea parámetro de salida (precederle de la palabra reservada VAR). PROCEDURE Sumar_5 (Valor_1: Integer; VAR Valor_2: Integer); Compilar y ejecutar. ¿Qué ocurre?. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ Cambiar la llamada al subprograma. Sustituir las variables por expresiones: Comprobar qué pasa. ¿Puedes explicar lo que ha ocurrido? ¿Dónde es válida una expresión y dónde no? ¿Por qué?. ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ Cambiar el tipo de dato de los parámetros formales a Real (los actuales son de tipo Integer). Comprobar qué pasas. ¿Puedes explicar lo que ha ocurrido? ¿En qué tipo de paso de parámetros deben coincidir el tipo de datos de los parámetros formales y actuales, y en qué tipo de paso de parámetros basta con que los parámetros formales y actuales sean de tipos de datos compatibles? ¿Por qué?. ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ ____________________________________________________________________________ 5. Uso de variables globales. Efectos negativos Partiendo del programa inicial, cambiar en la línea 6 la variable a la que se le asigna el valor Numero_1 := Valor_1 + 5 ; Compilar y ejecutar. ¿Qué ocurre?. En PROGRAMA PRINCIPAL ANTES de llamar a Sumar_5: ______ DENTRO de Sumar_5, ANTES de la suma DENTRO de Sumar_5, DESPUES de la suma En PROGRAMA PRINCIPAL 2015 ©Fabián López _______ : ______ : ______ _______ _______ DESPUES de llamar a Sumar_5: ______ _______ Informática 3 ¿Puedes explicar lo que ha ocurrido?. __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ Dejando la línea 6 como en el punto anterior, trasladar la declaración de variables del programa principal, Líneas 2 y 3, a las líneas 15 y 16. Compilar y comprobar que el compilador detecta el error de cometido en la línea 6. Numero_1 := Valor_1 + 5 ; indicándonos que Numero_1 es un identificador desconocido. 6. Recursividad: Un subprograma se llama a sí mismo Partiendo del programa inicial. Poner en las líneas 10 y 11 el siguiente código que incluye una llamada recursiva: IF Valor_1 <= 25 THEN Sumar_5 ( Valor_1, Valor_2) ; { Llamada recursiva Compilar y ejecutar. ¿Puedes explicar lo que ha ocurrido?. __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ Siguiendo con el programa, cambiar el tipo de parámetro de los parámetros formales para que sean parámetros de salida (precederles de la palabra reservada VAR). PROCEDURE Sumar_5 (VAR Valor_1, Valor_2: Integer); Compilar y ejecutar. ¿Puedes explicar lo que ha ocurrido?. __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ 2015 ©Fabián López Informática 4 Siguiendo con el programa, borrar la línea 10 ( IF Valor_1 <= 25 THEN Compilar y ejecutar. ¿Puedes explicar lo que ha ocurrido?. ) . __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ __________________________________________________________________________ 7. Tras esta práctica se han podido comprobar, de manera práctica usos que nos ayudarán a la correcta codificación de los programas: Es muy importante , recordar en cada momento el tipo de dato de las variables, a lo cual nos ayuda la utilización de prefijos en los identificadores de las variables Se debe comprobar el número y tipo de los parámetros formales y actuales y la correspondencia entre unos y otros. Para evitar el uso no deseado de variables globales, se aconseja declarar las variables del programa principal justo antes del cuerpo de sentencias del programa principal. 2015 ©Fabián López Informática 5