Funciones y procedimientos. Segunda parte

Anuncio
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
Descargar