Problema: escriba un procedimiento que intercambie los valores de dos variables.
Las peculiaridades de esta tarea son que necesitamos que los cambios realizados en el procedimiento sean conocidos por el programa que llama.
Intentemos escribir el procedimiento así:
var x, y: entero;
procedimiento Swap(a, b: entero); // con tal descripción de los parámetros del procedimiento,
var c: entero;
begin // copiará los valores de los argumentos (x e y)
// las variables a y b son variables independientes no relacionadas con x e y
c := un;
un := b;
b := c;
fin;
comenzar
x := 1;
y := 2;
Intercambiar (x, y); //los valores de las variables x e y (argumentos) se copian en los parámetros a y b
writeln('x = ', x, ', y = ', y); // x=1, y=2
fin.
Si ejecuta este programa, puede ver que los valores de las variables x e y no han cambiado. Para que los parámetros cambien los valores de los argumentos, debe usar pasar datos por referencia.Para hacer esto, después del nombre del tipo de datos en la cabecera de la subrutina se debe poner la palabra var
procedimiento Swap(var a, b: entero); // ahora las variables a y b obtienen las direcciones de las variables x e y en la memoria
var c: entero;
comenzar
c := un;
un := b;
b := c;
fin;
Uso: Si pasa un argumento por referencia, entonces solo el nombre de la variable (NO un número y NO una expresión aritmética) puede estar en este lugar al llamar al procedimiento.< br />
NO llame a un procedimiento como este:
Intercambiar(x, 4);
Intercambiar(5+x, y);