TURBO PASCAL
7) Procedimiento y Función
La programación estructurada trata de dividir el programa en bloques más pequeños, buscando una mayor legibilidad, y más comodidad a la hora de corregir o ampliar. Estos bloques serán de dos tipos: procedimientos (procedure) y funciones (function).
La diferencia entre ellos es que un procedimiento ejecuta una serie de acciones que están relacionadas entre sí, y no devuelve ningún valor, mientras que la función sí va a devolver valores.
Su sintaxis es la siguiente:
Procedure identificador (parámetros);
Var
Variables locales;
Begin
Sentencias;
End;
Veamos este ejemplo:
Program Acceso;
Uses
CRT;
Const
ClaveCorrecta = 1 (Esta constante es global)
Procedure Password;
Var
clave:integer; (Esta variable es local)
Begin
Writeln ('Introduzca su clave de acceso');
Readln (clave);
If clave<>ClaveCorrecta then
Begin
Writeln ('La clave no es correcta!');
Exit
End;
End;
Begin
CLRSCR;
Password;
Readln;
End.
- Un procedimiento puede tener sus propias variables, que llamaremos variables locales, frente a las del resto del programa, que son globales. Desde dentro de un procedimiento podemos acceder a las variables globales (como ClaveCorrecta del ejemplo anterior), pero desde fuera de un procedimiento no podemos acceder a las variables locales que hemos definido dentro de él.
- La orden Exit, que no habíamos visto aún, permite interrumpir la ejecución del programa (o de un procedimiento) en un determinado momento.
Veamos este otro ejemplo:
Program Numeros;
Uses
CRT;
Procedure Inicio(X1,Y1,Z1:integer);
Begin
X:=X1; Y:=Y1; Z:=Z1
End;
Begin
CLRSCR;
Inicio(1,2,3);
Writeln ('X=', X, ' Y=', Y, ' Z=', Z');
Inicio(4,5,6);
Writeln ('X=', X, ' Y=', Y, ' Z=', Z');
Readln;
End.
Su sintaxis es la siguiente:
Procedure identificador (parámetros): tipo;
Var
Variables locales;
Begin
Sentencias;
End;
Veamos este ejemplo:
Program Sumatoria;
Uses
CRT;
Var
Z:integer;
Function Suma (X1, X2 : integer) : integer;
Begin
Suma:= X1 + X2;
End;
Begin
CLRSCR;
Z:=Suma(1,1);
Writeln ('1+1=',Z);
Z:=Suma(2,2);
Writeln ('2+2=',Z);
Readln;
End.
· Parámetros:
Las funciones y procedimientos normalmente las trabajamos con variables globales, limitando su campo de acción. Con el uso de parámetros logramos indicar los valores y variables iniciales de los procesos, logrando una mayor flexibilidad y portabilidad.
Contamos con dos tipos de parámetros:
Parámetros por valor:
Cuando se pasa un parámetro por valor, se obtiene una copia temporal de la variable usada, dentro de la función o procedimiento se trabaja con la copia obtenida, no importando las operaciones que se realicen con la copia, la variable introducida como parámetro, no será afectada en su valor inicial al terminar el proceso. Su sintaxis es la siguiente:
Procedure identificador (variable: Tipo);
Veamos este ejemplo:
Program PruebaDeParametros;
Var
dato:integer;
Procedure Modifica(variable:integer);
Begin
variable:=3;
Writeln ('Dentro: ', variable);
End;
Begin
dato:=2;
Writeln ('Antes: ', dato);
Modifica (dato);
Writeln ('Después: ', dato);
End.
¿Qué diríais que pasa?, al finalizar escribirá el valor dato... ¿3?
¡¡¡¡PUES NO!!!! Escribe un 2. Las modificaciones que hagamos a dato dentro del procedimiento Modifica sólo son válidas mientras estemos dentro de ese procedimiento. Daos cuenta de que lo que modificamos es la variable genérica que hemos llamado variable, y que no existe fuera del procedimiento.
Eso es pasar un parámetro por valor. Pero, ¿cómo hacemos si realmente queremos modificar el parámetro?. Pues nada más que añadir la palabra Var delante de cada parámetro que queremos permitir que se pueda modificar.
Parámetro por referencia:
Cuando se pasa un parámetros por referencia, los cambios que se realicen a la variable introducida como parámetro, se mantendrán vigentes al terminar el proceso, en este caso especifico solo se admiten variables. Su sintaxis es la siguiente:
Procedure identificador (Var variable: Tipo);
Veamos este ejemplo:
Program PruebaDeParametros;
Var
dato:integer;
Procedure Modifica(Var variable:integer);
Begin
variable:=3;
Writeln ('Dentro: ', variable);
End;
Begin
dato:=2;
Writeln ('Antes: ', dato);
Modifica (dato);
Writeln ('Después: ', dato);
End.
Esta vez la última línea del programa sí que escribe un 3 y no un 2, porque hemos permitido que los cambios hechos a la variable salgan del procedimiento. Esto es pasar un parámetro por referencia.