Cátedra: Carreras: Profesora: Computación Año 2010 Licenciatura en Matemática - Profesorado en Matemática Mgr. Ma. del Carmen Varaldo Metodologı́a para resolver problemas algorı́tmicos. Funciones y procedimientos. Segunda parte. 3. Variables locales y globales En algunos de los ejemplos anteriores, en el cuerpo de la función hemos utilizado determinadas variables, además de los parámetros de la función. Estas variables deben ser declaradas y sólo se usan en la propia función. Se las denomina variables locales. Las variables declaradas en un programa, que contiene funciones y/o procedimientos, pueden ser utilizadas en cualquier parte del mismo, es decir, tanto dentro de las propias funciones o procedimientos como fuera de ellos. Se las denomina variables globales. En el ejemplo 3 de Funciones tenemos los dos tipos de variables: program ejemplo3; var 𝑛: word; function 𝑠𝑢𝑚𝑎 (𝑛𝑢𝑚:word): word; var 𝑖, 𝑠𝑢𝑚: word; begin .. . variables globales variables locales end; begin .. . end. Consideremos la próxima estructura de programa donde hemos destacado las variables globales y locales. program global; var 𝑖, 𝑗, 𝑘, 𝑙: tipo1; function 𝑙𝑜𝑐𝑎𝑙 (⋅ ⋅ ⋅ ): tipo2; var 𝑚, 𝑛, 𝑝, 𝑗: tipo1; begin .. . variables globales variables locales end; begin .. . end. En este caso, realizamos las siguientes observaciones: las variables locales 𝑚, 𝑛, 𝑝, 𝑗 sólo pueden utilizarse dentro de la función local; las variables globales 𝑖, 𝑘, 𝑙 pueden usarse en cualquier parte de la estructura del programa; 1 la variable global 𝑗, por ser idéntica a la declarada en la función, sólo puede utilizarse fuera de la función. 4. Los procedimientos Un “procedimiento” es otro tipo de rutina. Al igual que en el caso de las funciones, comenzaremos con algunos ejemplos y luego formalizaremos. 4.1. Ejemplos Ejemplo 4: Se pide realizar un programa que permita leer e imprimir una fecha con cierto formato. program ejemplo4; type diames=1.,31; meses=1.,12; annos=1900.,2010; var dia:diames; mes:meses; year:annos; procedure date (𝑑𝑑 : 𝑑𝑖𝑎𝑚𝑒𝑠; 𝑚𝑚 : 𝑚𝑒𝑠𝑒𝑠; 𝑎𝑎 : 𝑎𝑛𝑛𝑜𝑠); begin write(’Usted nació el ’); write (dd:2, ’/’,mm:2,’/’, (aa mod 100):2); end; {fin date} begin write(’Escriba dı́a(dd), mes(mm) y año de su nacimiento (aaaa)’); readln(dia,mes,year); date(dia,mes,year); writeln; until end. Programa principal variables globales Cabecera del proc. Comienza cuerpo proc. Termina cuerpo proc. Comienza cuerpo ppal Termina cuerpo ppal En la cabecera podemos distinguir: date procedure (𝑑𝑑 : 𝑑𝑖𝑎𝑚𝑒𝑠; 𝑚𝑚 : 𝑚𝑒𝑠𝑒𝑠; 𝑎𝑎 : 𝑎𝑛𝑛𝑜𝑠); |{z} {z } | {z } | palabra reservada nombre procedimiento parámetros valor Observemos que este procedimiento sólo se utiliza para imprimir y no devuelve resultados al programa principal. Ejemplo 5: En el siguiente procedimiento se calcula el valor de un polinomio de grado dos para un valor de 𝑥. procedure trinomio (𝑎, 𝑏, 𝑐, 𝑥 : 𝑟𝑒𝑎𝑙; 𝑣𝑎𝑟 𝑦 : 𝑟𝑒𝑎𝑙); begin 𝑦 := 𝑎 ∗ 𝑠𝑞𝑟(𝑥) + 𝑏 ∗ 𝑥 + 𝑐; end; 2 Cabecera del procedimiento Comienza cuerpo proc. Termina cuerpo proc. En la cabecera podemos distinguir: 𝑏, 𝑐, 𝑥 : 𝑟𝑒𝑎𝑙; trinomio procedure | {z } (𝑎, | {z } | {z } palabra reservada nombre función 𝑣𝑎𝑟 𝑦 : 𝑟𝑒𝑎𝑙 | {z } ); parámetros valor parámetros variable Observemos que hay dos tipos de parámetros formales: valor y variable. Los parámetros valor 𝑎, 𝑏, 𝑐 representan los coeficientes del polinomio y 𝑥, el valor para el cual se quiere calcular dicho trinomio. En el parámetro variable 𝑦 se guarda el valor de la función para 𝑥 y esto constituye una salida para el procedimiento. Además, como se devuelve un único valor, también podrı́a haberse construido una función. function trinomio (𝑎, 𝑏, 𝑐, 𝑥 : 𝑟𝑒𝑎𝑙) : 𝑟𝑒𝑎𝑙; begin 𝑡𝑟𝑖𝑛𝑜𝑚𝑖𝑜 := 𝑎 ∗ 𝑠𝑞𝑟(𝑥) + 𝑏 ∗ 𝑥 + 𝑐; end; Cabecera función Comienza cuerpo función Termina cuerpo función Ejemplo 6: En el siguiente problema, se pide escribir un procedimiento que intercambie los valores de dos parámetros cuyo tipo sea “tt´´y utilizar dicho subprograma para permutar el primer elemento de un arreglo con el último y el segundo con el penúltimo. program ejemplo6; type tt= real; vec= array[1..10] of tt; var 𝑛: byte; 𝐴: vec; procedure 𝑖𝑛𝑡𝑒𝑟 (var 𝑥, 𝑦: tt); var 𝑎𝑢𝑥: tt; begin 𝑎𝑢𝑥 := 𝑥; 𝑥 := 𝑦; 𝑦 := 𝑎𝑢𝑥; end; begin write(’Ingrese dimensión del arreglo ≤ 10 ’); readln(𝑛); write(’Ingrese los ’, 𝑛,’ elementos del arreglo’) ; for 𝑖 := 1 to 𝑛 do readln(𝐴[𝑖]); for 𝑖 := 1 to 2 do inter(𝐴[𝑖], 𝐴[𝑛 − 𝑖 + 1]); writeln( ’Nuevo arreglo’); for 𝑖 := 1 to 𝑛 do writeln(𝐴[𝑖]); end. En la cabecera podemos distinguir: inter 𝑥, 𝑦 : tt procedure | {z } ( 𝑣𝑎𝑟 | {z } | {z } ); palabra reservada nombre proc. parámetros variable 3 Programa principal Variables globales Cabecera proc. Variables locales Comienza cuerpo proc. Termina cuerpo proc. Comienza cuerpo ppal Llamado al proc. Termina cuerpo del ppal Observemos que en este procedimiento sólo se han utilizado parámetros variable pues ambos se modifican. Es decir, actúan simultáneamente como entrada de datos y salida de resultados. 4.2 Caracterı́sticas generales 4.2.1 Cabecera del procedimiento: procedure < 𝑖𝑑𝑒𝑛𝑡𝑖𝑓 𝑖𝑐𝑎𝑑𝑜𝑟 > ; o bien procedure < 𝑖𝑑𝑒𝑛𝑡𝑖𝑓 𝑖𝑐𝑎𝑑𝑜𝑟 > (<sección de parámetros formales>); 4.2.2 Declaración de procedimiento: Contiene el nombre del procedimiento, los nombres y tipos de los parámetros formales del procedimiento, parte de declaración, las sentencias que constituyen el cuerpo del procedimiento. Dentro del programa principal, los procedimientos se ubican, al igual que las funciones, entre la declaración de variables y el cuerpo del programa. 4.2.3 Clasificación de parámetros formales (para funciones y procedimientos): Los parámetros formales se clasifican en parámetro “valor” y parámetro “variable”. Los primeros se utilizan, como hemos visto en los ejemplos, para pasar valores desde el programa donde se invoca la rutina hacia la misma, pudiendo ser reemplazados por variables, expresiones, procedimientos o funciones; diremos que sirven como parámetros de entrada. En cuanto a los parámetros “variable´´, los mismos son utilizados para transmitir datos desde el programa hacia la rutina y/o devolver resultados desde la rutina hacia el programa que la llama. En este caso, diremos que son parámetros de entrada y/o salida y se distinguen anteponiendo la palabra var a cada uno de los parámettros variable. Hay que destacar que estos parámetros sólo pueden reemplazados por variables. 4.2.4 Llamada a un procedimiento: Consta del identificador del procedimiento y una lista de parámetros actuales separados por comas, y que tiene como objetivo activar el procdimiento. Los parámetros actuales pueden ser variables, expresiones, procedimientos o funciones, los cuales sustituyen a los correspondientes parámetros formales. Al hacer la sustitución, se debe respetar el orden y tipo de los parámetros y además, tener en cuenta si se está reemplazando un parámetro valor o un parámetro variable. La llamada a un procedimiento desde un programa (u otro subprograma) debe aparecer como una sentencia en sı́ misma. Observemos que el Pascal tiene sus propios procedimientos ya definidos, como ser, writeln, write, readln, clrscr, entre otros. 5. Funciones y procedimientos Comparemos ahora las funciones con los procedimientos. Para la elección de alguna de estas rutinas, es conveniente tener en cuenta estas reglas: una función debe usarse cuando tenemos un único resultado y cero o más parámetros de entrada; 4 en los demás casos, es decir, cuando no hay resultados o hay varios, es más adecuado el uso de un procedimiento. A continuación describimos las ventajas de la utilización de rutinas en la confección de un programa. Permiten subdividir en subprogramas más pequeños un programa, facilitando de esta manera la verificación del programa por partes. Al escribir una rutina, ésta puede ser reutilizada en otros programas, permitiendo ası́ su uso múltiple. Con respecto a la documentación de un programa, descompuesto en varios subprogramas, es conveniente usar nombres adecuados que identifiquen lo que hacen. De esta manera, se facilita la lectura del programa y su mantenimiento (modificación). 6. Bibliografı́a Luis Joyanes Aguilar, Programación en Turbo Pascal - Versiones 5.5, 6.0 y 7.0, McGraw-Hill, 1994. A. Tucker et al. , Fundamentos de Informática: Lógica, resolución de problemas, programas y computadores, McGraw-Hill, 1994. 5