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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

por valor. El procedimi<strong>en</strong>to LeerNumPos le da su valor inicial, que después se<br />

pasa a ProductoCifras para su procesami<strong>en</strong>to.<br />

La función ProductoCifras ti<strong>en</strong>e dos variables locales acumProd (<strong>en</strong> la que<br />

se acumula el producto de las cifras del número) y cifrUnidades (donde se anotan<br />

los valores de dichas cifras). Estas variables se utilizan solam<strong>en</strong>te d<strong>en</strong>tro de<br />

ProductoCifras, no t<strong>en</strong>i<strong>en</strong>do ninguna utilidad fuera de la función, por lo que se<br />

han declarado como locales. Quedan ocultas al programa principal y al procedimi<strong>en</strong>toLeerNumPos,<br />

pero son visibles desde el procedimi<strong>en</strong>toQuitaUltimaCifra<br />

para el que son no locales.<br />

La función ti<strong>en</strong>e también un parámetro por valor llamado numero, a través<br />

del cual se recibe el dato inicial, y que actúa además como variable, que se va<br />

modificando al ir quitándole cifras.<br />

El procedimi<strong>en</strong>to QuitaUltimaCifra se ha definido d<strong>en</strong>tro del procedimi<strong>en</strong>to<br />

ProductoCifras, por lo que es local a esta función y ti<strong>en</strong>e s<strong>en</strong>tido sólo d<strong>en</strong>tro de<br />

la misma, que es donde se necesita, quedando oculto al resto del programa. No<br />

ti<strong>en</strong>e variables locales, pero utiliza los parámetros por refer<strong>en</strong>cia n y ultima. En<br />

el primero se recibe el número sobre el que operar y devuelve el número sin la<br />

última cifra, actuando como dato y como resultado. La cifra de las unidades se<br />

devuelve <strong>en</strong> el parámetro ultima, que repres<strong>en</strong>ta sólo este resultado. Ambos son<br />

locales por ser parámetros, y se pasan por refer<strong>en</strong>cia para <strong>en</strong>viar los resultados<br />

a ProductoCifras.<br />

Hay que observar que el id<strong>en</strong>tificador n se ha utilizado como parámetro de<br />

LeerNumPos y de QuitaUltimaCifra, sin provocar ningún conflicto.<br />

Cada uno de estos bloques trazados <strong>en</strong> el programa repres<strong>en</strong>ta el ámbito <strong>en</strong> el<br />

cual están definidos los id<strong>en</strong>tificadores del bloque. Existe un bloque exterior <strong>en</strong><br />

el que son reconocidos todos los id<strong>en</strong>tificadores predefinidos de <strong>Pascal</strong>. D<strong>en</strong>tro<br />

de este bloque universal se <strong>en</strong>cu<strong>en</strong>tra el bloque del programa, correspondi<strong>en</strong>te<br />

a los id<strong>en</strong>tificadores globales. Si d<strong>en</strong>tro del bloque del programa se defin<strong>en</strong><br />

subprogramas, cada uno constituye un bloque local, si bi<strong>en</strong> su nombre es global,<br />

lo que permite que sea llamado desde el programa. Sin embargo, si se defin<strong>en</strong><br />

subprogramas d<strong>en</strong>tro de otros subprogramas, los primeros constituy<strong>en</strong> bloques<br />

locales, si bi<strong>en</strong> los id<strong>en</strong>tificadores del bloque exterior son no locales al bloque<br />

interior, mi<strong>en</strong>tras que sus parámetros formales son locales y no ti<strong>en</strong><strong>en</strong> vig<strong>en</strong>cia<br />

<strong>en</strong> el bloque del programa principal.<br />

Los id<strong>en</strong>tificadores globales y los no locales son reconocidos <strong>en</strong> la totalidad de<br />

su bloque incluso d<strong>en</strong>tro de los bloques interiores. Solam<strong>en</strong>te hay una excepción:<br />

cuando d<strong>en</strong>tro del bloque local existe un id<strong>en</strong>tificador con el mismo nombre. En<br />

este caso, el id<strong>en</strong>tificador global queda oculto por el local, y toda m<strong>en</strong>ción a ese<br />

id<strong>en</strong>tificador <strong>en</strong> el ámbito más interno corresponde al objeto más local.

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

Saved successfully!

Ooh no, something went wrong!