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.

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

por refer<strong>en</strong>cia no es apropiada <strong>en</strong> las funciones, porque su cometido natural<br />

consiste sólo <strong>en</strong> hallar el valor que repres<strong>en</strong>tan.<br />

8.6.3 Funciones con resultados múltiples<br />

Ya se ha dicho que las funciones ti<strong>en</strong><strong>en</strong> <strong>en</strong> <strong>Pascal</strong> la limitación de devolver<br />

únicam<strong>en</strong>te valores pert<strong>en</strong>eci<strong>en</strong>tes a tipos simples. Si queremos que un subprograma<br />

devuelva valores múltiples, se recomi<strong>en</strong>da utilizar procedimi<strong>en</strong>tos. Por<br />

ejemplo, si quisiéramos descomponer una cantidad de dinero <strong>en</strong> monedas de 100,<br />

de 25, duros y pesetas:<br />

procedure Descomponer(cantDinero: integer;<br />

var mon100, mon25, mon5, mon1: integer);<br />

Igualm<strong>en</strong>te, <strong>en</strong> aquellos casos <strong>en</strong> que, además del valor de la función, interese<br />

hallar algún valor adicional (por ejemplo, un código que indique si la función ha<br />

podido calcularse correctam<strong>en</strong>te o si se ha producido algún error), se debe usar<br />

un procedimi<strong>en</strong>to <strong>en</strong> su lugar más <strong>en</strong> consonancia con ese cometido.<br />

8.7 Desarrollo correcto de subprogramas<br />

De la misma forma que se ha expuesto para otros mecanismos del l<strong>en</strong>guaje,<br />

<strong>en</strong> esta sección estudiamos los elem<strong>en</strong>tos necesarios para lograr desarrollar subprogramas<br />

correctos. Hay dos aspectos de interés, la llamada es la que efectúa<br />

un cierto “<strong>en</strong>cargo”, y la definición la que debe cumplim<strong>en</strong>tarlo. Por eso, estos<br />

aspectos son complem<strong>en</strong>tarios. El necesario acuerdo <strong>en</strong>tre definición y llamada<br />

se garantiza por medio de la especificación, “más o m<strong>en</strong>os” formalm<strong>en</strong>te.<br />

En lo que respecta a la definición, para asegurar la corrección de un subprograma<br />

lo consideraremos como lo que es: un “pequeño” programa. Así, la<br />

tarea es<strong>en</strong>cial <strong>en</strong> cuanto al estudio de su corrección consistirá <strong>en</strong> considerar sus<br />

instrucciones compon<strong>en</strong>tes y garantizar que cumple con su cometido, que es el<br />

descrito <strong>en</strong> la especificación. Así, por ejemplo:<br />

function Fac(n: integer): integer;<br />

{Dev. n!}<br />

var<br />

i, prodAcum: integer;<br />

begin<br />

prodAcum:= 1;<br />

{Inv.: i ≤ n y prodAcum = i!}<br />

for i:= 2 to n do<br />

prodAcum:= prodAcum * i;

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

Saved successfully!

Ooh no, something went wrong!