viernes, octubre 15, 2010

Subprogramas y Procedimientos

Subprogramas en Pascal

Los subprogramas son como pequeños programas dentro de un programa, incluso se parecen a los programas por comenzar con una cabecera, ir seguida de las declaraciones y una parte de sentencias. Los subprogramas se encuentran en la parte de declaración del programa, sin embargo operan en su propio entorno, separados pero no siempre aislados del programa principal. Un subprograma puede declarar variables que son sólo accesibles desde el subprograma, puede usar variables del programa principal y puede usar una mezcla de los dos.

Los subprogramas son de dos tipos: procedimientos y funciones.

Procedimientos
Los procedimientos comienzan por la palabra reservada Procedure seguida de un identificador y un punto y coma. Después de la cabecera viene la parte de declaración. Al ejecutar un procedimiento se crean en memoria las constantes y variables de la parte de declaración, pero después de que se haya terminado el procedimiento desaparecen, lo cual supone un ahorro de memoria.

A continuación de la declaración están las sentencias, entre las palabras clave Begin y End y un punto y coma. Los procedimientos se activan en el programa principal dando su nombre como una sentencia simple.

Con frecuencia los procedimientos necesitan que se les dé uno o más valores, que se conocen como parámetros. Estos se incluyen en la cabecera, dentro de los paréntesis que siguen al identificador. Las declaraciones de parámetros son como las declaraciones de variables en la forma y propósito. Cada identificador se separa por punto y coma, cada uno se ha de definir como un tipo con nombre. A continuación se muestra un procedimiento que repite un carácter en pantalla, el número de veces que se quiera,

Procedure Repite(caracter; Car, conta: Integer);
Var i:Integer;
Begin
For i:=1 to conta Do
Write(caracter);
End;


y así para invocar que aparezca la letra A 80 veces seguida en pantalla,

Repite ("A",80)

donde se han pasado dos parámetros. Estos parámetros pueden ser de otro tipo, como variables, expresiones, como por ejemplo,

caracter:="A"; conta:=80;

Repite(LowerCase(caracter),conta);


donde LowerCase es una función que saca la letra minúscula de la indicada.

A su vez los parámetros se pueden pasar por valor o referencia. Si se pasa por valor, se transfiere una copia del valor del parámetro actual al procedimiento, el procedimiento no accede a la variable real y por lo tanto no puede modificarla. Un procedimiento puede cambiar el valor de un parámetro por valor, pero a la vuelta al programa queda sin modificar el valor actual del parámetro original

Si se desea pasar un parámetro por referencia, el parámetro actual debe ser una variable o una constante con tipo. Delante de la declaración del parámetro formal hay que poner la palabra clave Var.

Seguidamente se da un ejemplo para cada una de las dos formas de paso de parámetros,

a) Por valor

Procedure incrementa(mas_uno:Integer)

Begin
mas_uno:=mas_uno+1;
WriteLn(mas_uno);
End;


y al ejecutar las instrucciones siguientes,

avance:=1;
incrementa(avance);
WriteLn(avance)


la salida sería de 2 y 1.

b) Por referencia

Procedure incrementa(Var mas_uno:Integer)

Begin
mas_uno:=mas_uno+1;
WriteLn(mas_uno);
End; y al ejecutar las instrucciones siguientes,

avance:=1;
incrementa(avance);
WriteLn(avance)

la salida sería de 2 y 2.

Funciones
La diferencia entre un procedimiento y una función es que el identificador de una función asume un valor cuando la función ha terminado y devuelve este valor a la rutina que la llamó en sustitución del nombre de la función. En un sentido amplio el nombre de la función es también una variable. Todo lo indicado previamente respecto a la definición de los procedimientos se aplica a las funciones. La palabra clave es Function. A continuación se indica un ejemplo de función que convierte un parámetro de tipo Char a letra minúscula, si dicho parámetro está en el rango de la A a la Z.,

Function miniscula(caracter:Char);Char

Begin
If caracter in "A".."Z" Then
minuscula:=Char(Ord(caracter)+32)
Else
minuscula:=caracter;
End;


Otras posibilidades

El Pascal ofrece muchas más posibilidades, como por ejemplo la definición de tipos por el usuario, o el tipo Set(conjunto), de gran interés dado que no aparecen en la mayoría de los lenguajes. Otro tipo a destacar es el denominado puntero. La recursividad es una característica de mucha utilidad, es decir que cierta instrucción se puede llamar a si misma. Aquí no se tratan estas posibilidades aunque se usan ampliamente en la programación a escala avanzada en Pascal.

No hay comentarios.:

Publicar un comentario