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.

78 Capítulo 5. Primeros programas completos<br />

Las situaciones del estado inmediatam<strong>en</strong>te anterior a la ejecución de una<br />

instrucción e inmediatam<strong>en</strong>te posterior a la misma se llaman precondición<br />

y postcondición respectivam<strong>en</strong>te.<br />

El planteami<strong>en</strong>to anterior es la especificación formal de un problema <strong>en</strong><br />

forma de ecuación, que puede leerse así: se pide un algoritmo I tal que,<br />

si se ejecuta cuando x = x0, y = y0, z = z0, a su término se obti<strong>en</strong>e<br />

x = y0, y = z0, z = x0. Para interpretar correctam<strong>en</strong>te una especificación<br />

deb<strong>en</strong> t<strong>en</strong>erse <strong>en</strong> cu<strong>en</strong>ta además las declaraciones de los objetos involucrados.<br />

En resum<strong>en</strong>, pued<strong>en</strong> <strong>en</strong>t<strong>en</strong>derse las instrucciones como funciones que conviert<strong>en</strong><br />

un estado <strong>en</strong> otro. Las condiciones por las que atraviesa la ejecución de<br />

un programa pued<strong>en</strong> especificarse más o m<strong>en</strong>os formalm<strong>en</strong>te como com<strong>en</strong>tarios,<br />

ayudándonos a compr<strong>en</strong>der el funcionami<strong>en</strong>to de un algoritmo y a verificar su<br />

corrección.<br />

Recíprocam<strong>en</strong>te, es posible plantear un problema especificando las condiciones<br />

inicial y final que el algoritmo solución debe verificar. Este modo de proceder<br />

nos lleva a desarrollar algoritmos correctos, ya que el razonami<strong>en</strong>to sobre su funcionami<strong>en</strong>to<br />

no surge a posteriori, sino durante el proceso de desarrollo. Por<br />

supuesto, <strong>en</strong>contrar algoritmos que verifiqu<strong>en</strong> una especificación dada requiere<br />

cierta experi<strong>en</strong>cia <strong>en</strong> el desarrollo de los mismos; precisam<strong>en</strong>te <strong>en</strong> ello consiste<br />

la programación.<br />

Un medio aconsejable para adquirir el hábito de desarrollar algoritmos disciplinadam<strong>en</strong>te<br />

consiste <strong>en</strong> esforzarse por razonar sobre la corrección de los programas<br />

desde el principio, como se ha indicado <strong>en</strong> el punto primero, incluy<strong>en</strong>do<br />

posteriorm<strong>en</strong>te la especificación de las condiciones necesarias <strong>en</strong> el desarrollo de<br />

los algoritmos.<br />

5.4.2 Desarrollo desc<strong>en</strong>d<strong>en</strong>te con especificaciones<br />

Incorporando aserciones <strong>en</strong> el proceso desc<strong>en</strong>d<strong>en</strong>te de programación, resulta<br />

que también las especificaciones van refinándose, indicando el cometido de cada<br />

parte del programa y las condiciones iniciales <strong>en</strong> que se ejecuta cada pieza del<br />

programa y las finales a su término. Así por ejemplo, el paso “Obt<strong>en</strong>er los<br />

catetos, catA y catB”, ti<strong>en</strong>e por objeto cambiar el valor de las variables catA y<br />

catB, que es desconocido, y anotar <strong>en</strong> ellas los valores (digamos que a y b son<br />

los valores verdaderos dados <strong>en</strong> el input), lo que se expresa así:<br />

{CatA =?,catB =?}<br />

Obt<strong>en</strong>er los catetos, CatA y catB<br />

{CatA = a,catB = b }

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

Saved successfully!

Ooh no, something went wrong!