09.05.2013 Views

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

Algoritmos y Programación en Pascal

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8.2. Subprogramas con parámetros 167<br />

variables. Este segundo mecanismo se d<strong>en</strong>omina paso de parámetros por<br />

refer<strong>en</strong>cia (también por dirección o por variable), y ti<strong>en</strong>e como consecu<strong>en</strong>cia<br />

que toda modificación de los parámetros formales se efectúa directam<strong>en</strong>te<br />

sobre los parámetros reales, y esos cambios permanec<strong>en</strong> al finalizar<br />

la llamada. Es decir, que se puede producir una transfer<strong>en</strong>cia de información<br />

desde el subprograma al programa, o dicho de otro modo, que los<br />

parámetros por refer<strong>en</strong>cia no sólo actúan como datos de <strong>en</strong>trada, sino que<br />

también pued<strong>en</strong> repres<strong>en</strong>tar resultados de salida del procedimi<strong>en</strong>to.<br />

Para distinguir los parámetros pasados por valor de los pasados por variable,<br />

éstos últimos van precedidos de la palabra reservada var <strong>en</strong> la definición<br />

del subprograma.<br />

Veamos las difer<strong>en</strong>cias <strong>en</strong>tre parámetros por valor y refer<strong>en</strong>cia mediante un<br />

ejemplo consist<strong>en</strong>te <strong>en</strong> un procedimi<strong>en</strong>to que increm<strong>en</strong>ta el valor de una variable<br />

<strong>en</strong> una unidad. En el caso de parámetros por valor, el increm<strong>en</strong>to ti<strong>en</strong>e efectos<br />

únicam<strong>en</strong>te d<strong>en</strong>tro del procedimi<strong>en</strong>to, mi<strong>en</strong>tras que <strong>en</strong> el caso de parámetros por<br />

refer<strong>en</strong>cia los efectos se exti<strong>en</strong>d<strong>en</strong> también al programa principal.<br />

En el paso de parámetros por valor,<br />

procedure EscribirSigui<strong>en</strong>te (v: integer);<br />

{Efecto: escribe <strong>en</strong> la pantalla v + 1}<br />

begin<br />

v:= v + 1;<br />

WriteLn(v)<br />

<strong>en</strong>d; {EscribirSigui<strong>en</strong>te}<br />

la sigui<strong>en</strong>te secu<strong>en</strong>cia de instrucciones produce la salida que se muestra a la<br />

derecha:<br />

w:= 5;<br />

WriteLn(w); 5<br />

EscribirSigui<strong>en</strong>te(w); 6<br />

WriteLn(w) 5<br />

En este ejemplo, la variable w que hace de parámetro real ti<strong>en</strong>e inicialm<strong>en</strong>te<br />

el valor 5, como puede verse <strong>en</strong> la salida. Este valor se copia <strong>en</strong> el parámetro<br />

formalvyd<strong>en</strong>tro del procedimi<strong>en</strong>tovse increm<strong>en</strong>ta <strong>en</strong> una unidad. Sin embargo,<br />

por tratarse de parámetros por valor, este cambio <strong>en</strong> v no ti<strong>en</strong>e efecto sobre el<br />

parámetro real w, lo que comprobamos al volver al programa principal y escribir<br />

su valor que sigue si<strong>en</strong>do 5.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!