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.

172 Capítulo 8. Procedimi<strong>en</strong>tos y funciones<br />

{3}<br />

WriteLn(’El factorial de ’, numero, ’ es ’, Fac(numero))<br />

{5}<br />

<strong>en</strong>d. {DemoParametros}<br />

Al comi<strong>en</strong>zo del programa sólo se dispone de la variable numero que está<br />

indefinida <strong>en</strong> el punto {1} del programa (y <strong>en</strong> su correspondi<strong>en</strong>te estado de<br />

memoria).<br />

El programa llama al procedimi<strong>en</strong>to LeerNumPos y le pasa por refer<strong>en</strong>cia el<br />

parámetro real numero. Al producirse la llamada, la ejecución del programa<br />

principal queda susp<strong>en</strong>dida y se pasan a ejecutar las instrucciones del procedimi<strong>en</strong>to<br />

LeerNumPos. Como numero se ha pasado por refer<strong>en</strong>cia, <strong>en</strong> la llamada,<br />

numero y n, que es el parámetro formal de LeerNumPos, coincid<strong>en</strong> <strong>en</strong> memoria.<br />

Dado que inicialm<strong>en</strong>te numero está indefinido también lo estará n <strong>en</strong> el estado<br />

{2A}, al principio de LeerNumPos.<br />

Una vez activadoLeerNumPos, éste pide al usuario un número <strong>en</strong>tero positivo,<br />

que queda asignado a n. Supongamos que el valor introducido ha sido, por<br />

ejemplo, 5. En el punto {2B}, este valor es el que queda asignado a n y a numero<br />

al coincidir ambos.<br />

Al terminar el procedimi<strong>en</strong>to LeerNumPos, se reanuda la ejecución del programa<br />

principal, con lo cual n desaparece de la memoria (estado {3}).<br />

Le llega el turno a la instrucción de escritura, que hace una llamada a Fac<br />

pasándole por valor el cont<strong>en</strong>ido de numero. De nuevo, al producirse la llamada,<br />

la ejecución del programa principal queda susp<strong>en</strong>dida, hasta que Fac termine y<br />

devuelva el resultado.<br />

La función dispone del parámetro formal num, que recibe el cont<strong>en</strong>ido de<br />

numero, y de dos variables propias i y prodAcum, que al com<strong>en</strong>zar la función<br />

(estado {4A}) están indefinidas.<br />

Al terminar el bucle for, se ha acumulado <strong>en</strong> prodAcum el producto 2 * 3 *<br />

4 * 5 sucesivam<strong>en</strong>te, por lo que su valor es 120. Dicho valor, que corresponde<br />

al del factorial pedido, es asignado al nombre de la función (estado {4B}), qui<strong>en</strong><br />

lo devuelve al programa principal.<br />

❡❡ <br />

El nombre de la función se utiliza como un almac<strong>en</strong>ami<strong>en</strong>to temporal del<br />

resultado obt<strong>en</strong>ido para transferirlo al programa principal. Aunque puede<br />

ser asignado como una variable, el parecido <strong>en</strong>tre ambas termina aquí. El<br />

nombre de la función no es una variable y no puede ser utilizado como tal<br />

(es decir sin parámetros) a la derecha de la instrucción de asignación.<br />

Al terminar la función, su valor se devuelve al programa principal, termina<br />

la escritura y finalm<strong>en</strong>te termina el programa (estado {5}).

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

Saved successfully!

Ooh no, something went wrong!