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.

6.4. Diseño y desarrollo de bucles 111<br />

{Salida de datos:}<br />

WriteLn(’El coci<strong>en</strong>te es’, coc,’ y el resto es ’, resto)<br />

<strong>en</strong>d. {Coci<strong>en</strong>te}<br />

En el programa anterior se ha destacado una aserción que permanece constante<br />

antes, durante y tras la ejecución del bucle; tal aserción recibe el nombre<br />

de invariante del bucle (abreviadam<strong>en</strong>te Inv.). En g<strong>en</strong>eral, para la construcción<br />

de cualquier bucle convi<strong>en</strong>e buscar un invariante que refleje la acción del bucle<br />

<strong>en</strong> cada iteración, pues esto facilitará la programación y la verificación posterior.<br />

El invariante de un bucle debe verificarse <strong>en</strong> cuatro mom<strong>en</strong>tos:<br />

Comi<strong>en</strong>zo: El invariante debe cumplirse justo antes de ejecutar el bucle por<br />

primera vez.<br />

Conservación: Si el invariante y la condición del bucle se cumpl<strong>en</strong> antes de<br />

una iteración y se ejecuta el cuerpo del bucle, <strong>en</strong>tonces el invariante seguirá<br />

si<strong>en</strong>do cierto tras su ejecución.<br />

Salida: El invariante, junto con la falsedad de la condición (que se ti<strong>en</strong>e a la<br />

salida del bucle), nos permitirá deducir el resultado, que es la postcondición<br />

del bucle.<br />

Terminación: El cuerpo del bucle deberá avanzar hacia el cumplimi<strong>en</strong>to<br />

de la condición de terminación del bucle, de forma que se garantice la<br />

finalización del mismo.<br />

Para verificar cualquier bucle hay que comprobar estas tres etapas, donde la<br />

parte g<strong>en</strong>eralm<strong>en</strong>te más difícil es la comprobación de conservación del invariante.<br />

Para el bucle anterior t<strong>en</strong>emos que<br />

1. Las asignaciones a las variables coc y resto antes del bucle hac<strong>en</strong> que el<br />

invariante se cumpla antes de la primera iteración.<br />

2. Supuesto que el invariante se cumple antes de una iteración, esto es ddo =<br />

dsor * coc + resto, hay que demostrar que el cuerpo del bucle conserva<br />

el invariante. En nuestro caso, debemos comprobar que los nuevos valores<br />

para coc y resto sigu<strong>en</strong> cumpli<strong>en</strong>do el invariante, pero esto es trivial ya<br />

que<br />

dsor * (coc + 1) + (resto - dsor) =<br />

dsor * coc + dsor + resto - dsor =<br />

dsor * coc + resto = ddo

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

Saved successfully!

Ooh no, something went wrong!