Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 1 de 13 UNIVERSIDAD TECNOLÓGICA NACIONAL INGENIERIA EN SISTEMAS Cátedra: “ALGORITMOS Y ESTRUCTURAS DE DATOS” UNIDAD Nº 7 SUBPROGRAMAS PROCEDIMIENTOS Y FUNCIONES Ing. Esp. Rosanna M. MAINIERI Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 2 de 13 UNIDAD 7: SUBPROGRAMAS PROCEDIMIENTOS Y FUNCIONES Supbrogramas .................................................................................3 Procedimiento..................................................................................4 Función............................................................................................4 Ejemplo con Procedimiento y con Función......................................5 Diagrama de Módulos …...... ...........................................................6 Diferencia entre Procedimiento y Función .......................................7 Parámetros ......................................................................................8 Variables Locales y Globales ........................................................10 Codificación del Programa.............................................................11 Ejemplo de uso: Parámetro Por Valor y Parámetro Variable.........12 Bibliografía.....................................................................................13 Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 3 de 13 SUBPROGRAMAS El concepto de Subprograma fue introducido en la Unidad 1, debemos recordar los siguientes términos: Acción Simple Acción Compuesta Programación Modular Diseño Descendente Programación Estructurada En programación modular el programa se divide en módulos (subprograma), cada uno de los cuales resuelve una actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analizan, codifican y ponen a punto por separado. Podemos decir que los términos siguientes son sinónimos: Subprograma, Módulo, Acción Compuesta, Proceso o Subalgoritmo: Es un conjunto de acciones (sentencias), agrupadas bajo un nombre, que resuelven una tarea o subproblema. Cada programa contiene un módulo denominado programa principal que controla todo lo que sucede. Este programa principal es el que transfiere el control a los otros módulos (subprogramas), de modo que ellos pueden ejecutar sus funciones. Cuando el módulo ejecuta su tarea devuelve el control al módulo principal o al módulo que lo llamó. Lo más interesante del Diseño Descendente, que incluye a la Programación Modular, es que trata en forma separada lo global de los detalles, un subprograma oculta el detalle sobre la resolución global. Resulta más sencillo resolver al problema subdividiéndolo en subproblemas siendo así más fácil llegar a la solución. Además, es conveniente aplicar este método ya que habitualmente se trabaja en equipo y cada grupo del equipo, entonces, puede encargarse de resolver una parte, ensamblando luego todas las soluciones de estos subproblemas. Otra de las ventajas es la reutilización de código, es decir, que si una misma tarea se debe realizar en distintas partes de un programa, se escribe (se programa) una vez y se la invoca todas las veces que sea necesario. Entre el módulo llamante y el módulo llamado se debe transmitir información, ya sea porque el módulo llamado necesita datos para poder trabajar o porque devuelve los resultados obtenidos. Parámetros o Argumentos: Información que se transmite entre módulos. Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 4 de 13 Existen dos tipos de subprogramas: Procedimientos Funciones PROCEDIMIENTO El procedimiento es un subprograma, que devuelve uno, varios o ningún resultado y devuelve estos resultados a través de parámetros. El procedimiento es creado para resolver una tarea. Para trabajar puede necesitar recibir información del módulo llamante, esta información la recibe a través de los parámetros de entrada. El procedimiento luego trabaja, es decir realiza la tarea para la cual fue creado. Si obtiene resultados para devolver al módulo llamante, los devuelve a través de los parámetros de salida. ¿Cómo se invoca a un procedimiento? El procedimiento tiene la misma forma que un programa. Para invocar (o llamar) a un procedimiento solamente se lo nombra, indicando los parámetros entre paréntesis. NombreProcedimiento (Lista de parámetros) Si el subprograma no devuelve resultados al módulo que lo invocó es porque muestra los resultados en el mismo subprograma. FUNCIÓN La función es un subprograma que devuelve un solo resultado y lo hace a través del nombre de la misma. La función es creada para resolver una tarea y obtener un solo dato simple como resultado. Para trabajar puede necesitar recibir información del módulo llamante, esta información la recibe a través de los parámetros de entrada. La función luego trabaja, es decir realiza la tarea para la cual fue creada y devuelve el resultado a través del nombre, al módulo llamante. La función es una expresión (es un dato simple) y debe ser invocada como tal. Se diferencia del procedimiento ya que cuando se la invoca debe ser considerada como un dato en sí. ¿Cómo se invoca a una función? Se invoca a una función en cualquier sentencia a excepción de la sentencia de Lectura o Ingreso. Mostramos 3 formas posibles: Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 5 de 13 1. En una sentencia de Asignación NombreVariable NombreFunción (Lista de parámetros) 2. En una sentencia de Salida o Mostrar Mostrar (NombreFunción (Lista de parámetros)) 3. En una sentencia de Decisión Si NombreFunción(Lista de parámetros) > 10 entonces ACCIÓN_A EJEMPLO RESUELTO CON PROCEDIMIENTO Y CON FUNCIÓN Se tienen como datos dos números enteros, se los debe ingresar en el programa principal. Se desea calcular el promedio de los mismos, invocando a un subprograma, y mostrar el resultado en el programa principal. Resolverlo de dos formas distintas: a) Utilizar un procedimiento b) Utilizar una función. a) CON PROCEDIMIENTO PROGRAMA PRINCIPAL Ingresar (N1, N2) PROMEDIO (N1, N2, PROM) Mostrar (‘El promedio es ’, PROM) PROMEDIO (N1, N2, PROM) ACUM N1 + N2 PROM ACUM / 2 En este caso, cuando se invoca al Procedimiento PROMEDIO desde el programa principal, la computadora transmite el control al módulo llamado PROMEDIO. Se ejecutan todas las acciones del módulo invocado y al finalizar se devuelve el control a la sentencia siguiente a la invocación. Al llamar a PROMEDIO se envía como datos N1 y N2. El subprograma se ejecuta y devuelve el resultado en el parámetro PROM. Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 6 de 13 b) CON FUNCIÓN PROGRAMA PRINCIPAL Ingresar (N1, N2) PROME FUNCPRO (N1, N2) Mostrar (‘El promedio es ’, PROME) FUNCPRO (N1, N2) ACUM N1 + N2 FUNCPRO ACUM / 2 En este caso, cuando se invoca a la función FUNCPRO desde el programa principal, la computadora transmite el control al módulo llamado FUNCPRO. Se envía como datos (parámetros) N1 y N2. El subprograma se ejecuta y devuelve el resultado bajo el nombre de la función FUNCPRO. En el algoritmo principal se asigna ese resultado a la variable simple PROME. DIAGRAMA DE MODULOS a) CON PROCEDIMIENTO Cantidad de Parámetros: 3 Parámetros de Entrada: 2 Parámetros de Salida: 1 PROMEDIO. PROGRAMA PRINCIPAL N1, N2 PROM Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 7 de 13 b) CON FUNCIÓN Cantidadde Parámetros: 2 Parámetros de Entrada: 2 Parámetros de Salida:0 EL RESULTADO SE DEVUELVE EN EL NOMBRE DE LA FUNCIÓN !!! DIFERENCIAS PROCEDIMIENTO FUNCION Devuelve uno, ninguno o varios resultados. Devuelve un resultado. Devuelve los resultados a través de parámetros Devuelve el resultado a través de su nombre Se lo invoca nombrándolo, indicando los parámetros entre paréntesis Se lo invoca en cualquier sentencia a excepción de la de Ingreso (Lectura), indicando los parámetros entre paréntesis. Puede tener parámetros Por Valor y Por Referencia (*) Sólo puede tener parámetros Por Valor (*) Su nombre nunca aparece dentro del mismo procedimiento Su nombre debe aparecer al menos una vez dentro de la función, sentencia en la que se le asigna el resultado Para realizar la misma tarea la función tendrá un parámetro menos que el procedimiento (*) Veremos más adelante. FUNCPRO PROGRAMA PRINCIPAL N1, N2 Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 8 de 13 PARÁMETROS Al trabajar con subprogramas hay un módulo llamante y un módulo llamado (invocado). En general el programa principal invoca a un subprograma, pero a veces un subprograma puede llamar, a su vez, a otro subprograma. Parámetros o argumentos: es la información que se transmite entre módulos. Los parámetros son los identificadores puestos entre paréntesis en la invocación al subprograma y representan la forma en que se comunican el programa principal (o módulo llamante) y los subprogramas llamados. Existen dos tipos de clasificaciones de los parámetros: 1. Según el lugar en que aparecen en el programa a. Parámetro Actual o Real b. Parámetro Formal 2. Según vuelva modificado o no al módulo invocante a. Parámetro Por Valor b. Parámetro Variable o Por Referencia 1. a. Parámetro Actual o Real Los parámetros Actuales o Reales son los que aparecen en la invocación al subprograma. En la codificación en Pascal estos parámetros NO se declaran. 1. b. Parámetro Formal Los parámetros Formales son los que aparecen en el encabezamiento del subprograma. En la codificación en Pascal estos parámetros SI se declaran. Los parámetros actuales y formales deben coincidir en cantidad y en tipo, pero no necesariamente deben tener el mismo identificador (nombre). Se emparejan entre sí por la posición que ocupan en la lista de parámetros. Ejemplo: PROGRAMA PRINCIPAL … PROMEDIO (N1, N2, PROM) ... Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 9 de 13 PROMEDIO (X, Y, Z) ... ... En este caso, N1 en el principal equivale a X en el procedimiento, N2 en el principal equivale a Y en el procedimiento y PROM en el principal equivale a Z en el procedimiento. 2. Según vuelva modificado o no, al módulo invocante El procedimiento puede recibir datos para trabajar (Parámetros de Entrada) y puede devolver resultados al módulo invocante (Parámetros de Salida). Un parámetro de Entrada puede ser modificado en el procedimiento y volver modificado al módulo invocante (Parámetro de Entrada/Salida). Entrada Parámetros Entrada / Salida Salida 2. a. Parámetro Por Valor Cuando se transmite un parámetro a un subprograma y éste no vuelve modificado al módulo llamante, se llama parámetro Por Valor. El parámetro puede ser modificado o no en el subprograma, pero lo importante es que no vuelve modificado. ¿Cómo se logra esto? Al transmitir un parámetro por valor, en realidad se hace una copia, es decir, se crea un nuevo espacio de memoria que es una copia del parámetro actual y el subprograma trabaja con esa nueva posición de memoria. Cuando se devuelve el control al módulo llamante, esa copia no se usa más, ese espacio queda nuevamente disponible, y se sigue trabajando con el original. Si en el subprograma se modificó la copia, no se ve materializada esa modificación en la variable original (parámetro actual). Estos parámetros son los parámetros de Entrada. 2. b. Parámetro Variable o Por Referencia Cuando un subprograma devuelve uno o varios resultados al módulo llamante lo hace a través de los parámetros Variables o Por Referencia. Es decir, cuando un parámetro vuelve modificado al módulo llamante es un parámetro Variable. En realidad lo que se transmite, al utilizar un parámetro variable, es la dirección de memoria de la variable. Entonces, cuando en el subprograma se utiliza esa variable, se dirige a esa posición de memoria y se trabaja y modifica ese lugar de la memoria. Al devolver el control al módulo llamante se sigue trabajando con esa Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 10 de 13 misma dirección de memoria, por lo cual, si hubo alguna modificación en el subprograma se la materializa en el módulo llamante. Estos parámetros son los de Entrada/Salida o de Salida. El parámetro de Entrada/Salida se envía con un valor al módulo llamado y se devuelve modificado. El parámetro de Salida se crea directamente en el módulo llamado. Para diferenciar a un parámetro de otro, en la codificación en Pascal se usa la palabra reservada var. Si el parámetro es Variable se antepone var al parámetro en el encabezamiento del subprograma. Si el parámetro es Por Valor no lleva ninguna palabra adelante en la declaración del subprograma. VARIABLES LOCALES Y GLOBALES Cuando un subprograma necesita una variable para trabajar y sólo interesa que se conozca dentro de él, será una variable Local. Las variables locales no son necesarias en otros módulos, se las declara en el módulo en el que se la utiliza, en la sección Var. En el módulo llamante, o en cualquier otro módulo, no existen, no se las conoce. La variable Local sólo tiene validez en el módulo en el que se la declara. Cuando se transmite el control al módulo llamante, las celdas destinadas a estas variables locales quedan nuevamente disponibles. Cualquier variable declarada en el programa principal es conocida por él y por cualquier subprograma al que llame, a esta variable se la llama variable Global. Lo mismo ocurre con un subprogama que llame a otro, si en el llamante se declara una variable, será local para él y global para cualquier módulo por él llamado. Este es un concepto relativo, una variable es local para un módulo y global para cualquier módulo por él llamado. Cuando una variable es declarada en un módulo es conocida por cualquier módulo llamado por él, a menos que dicho módulo llamado declare una variable con el mismo nombre. Esto se llama precedencia de nombre, la declaración de una variable local en un módulo, hace que se desconozca a la variable global con el mismo nombre. En realidad, son distintos espacios de memoria llamados con el mismo nombre pero desde distintos módulos. Reglas de ámbito: cualquier variable o constante definida en un bloque, se conoce en cualquier módulo que esté dentro de él. ¿Por qué se usa lista de parámetros? Si bien se podría trabajar con todas variables globales, es una buena práctica que la comunicación entre los módulos sea explícita. Esto limita la posibilidad de que un módulo interfiera con otro. En otras palabras, se le da a cada módulo sólo lo que necesita conocer, creándose módulos estancos. Esto evita errores y otorga claridad al programa. Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 11 de 13 CODIFICACIÓN DEL PROGRAMA Al referirnos a las sentencias de un programa en Pascal hablamos de: Orden Físico: Orden en que aparecen las sentencias en el programa Orden Lógico: Orden en que se ejecutan las sentencias Si recordamos lo visto en la Unidad 3, las partes de un programa son: Cabecera Sección de Declaraciones y Definiciones (D. y D.) Sentencias Vemos que, en el programa, el orden físico es distinto al orden lógico,ya que los subprogramas (Procedimientos y Funciones) se insertan en la Sección de Declaraciones y Definiciones y se escriben antes que la Sección Ejecutable propiamente dicha (Sección de Sentencias) o programa principal. Cuando se ejecuta el programa, lo que se ejecuta primero es el programa principal y desde allí se transfiere el control a los subprogramas invocados. Al detectarse el nombre de un subprograma se transmite el control a la primera sentencia del primer par Begin-End del cuerpo del subprograma. Cuando se termina de ejecutar el subprograma se vuelve a transmitir el control al módulo que lo invocó. A continuación se codifica en Pascal los algoritmos solución del ejercicio: a) CON PROCEDIMIENTO Program PROGRAMA (Input, Output); (*Comienza Sección de Declaraciones y Definiciones *) Var N1, N2, PROM: Real; Procedure PROMEDIO (N1, N2: Real; var PROM: Real); Var ACUM: Real: Begin ACUM:= N1 + N2; PROM:= ACUM / 2 End; Begin (* Comienza Sentencias *) Read (N1, N2); PROMEDIO (N1, N2, PROM); Write (‘El promedio es ‘, PROM) End. Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 12 de 13 b) CON FUNCIÓN Program PROGRAMA (Input, Output); (*Comienza Sección de Declaraciones y Definiciones *) Var N1, N2, PROME: Real; Function FUNCPRO (N1, N2: Real): Real; Var ACUM: Real: Begin ACUM:= N1 + N2; FUNCPRO:= ACUM / 2 End; Begin (* Comienza Sentencias *) Read (N1, N2); PROME:= FUNCPRO (N1, N2); Write (‘El promedio es ‘, PROME) End. Observemos que los parámetros formales se declaran. La función también se debe declarar, ya que es una expresión, se debe indicar de qué tipo es. EJEMPLO DE USO: PARÁMETRO POR VALOR Y PARÁMETRO VARIABLE PROG. PRINCIPAL SUBP (X) X 10 X 20 SUBP (X) Mostrar (X) Mostrar (X) Si el parámetro X se transmite como Por Valor se muestra lo siguiente: 20 10 Si el parámetro X se transmite como Variable se muestra lo siguiente: 20 20 Algoritmos y Estructuras de Datos Unidad 7 Ing. Rosanna M. MAINIERI – Página 13 de 13 BIBLIOGRAFÍA DALE Nell, WEEMS Chip, (1989), PASCAL, Ed. Mc. Graw Hill, España DE GIUSTI Armando, (2001), Algoritmos, Datos y programas, Ed. Prentice Hall, Fac. de Informática, Univ. Nac. La Plata, Argentina. JENSEN Kathleen, WIRTH Niklaus, (1987), PASCAL Manual del usuario e informe, Ed. El Ateneo, Argentina. JOYANES AGUILAR Luis, (1996), Fundamentos de Programación, Ed. Mc Graw- Hill, España.
Compartir