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.

14 Capítulo 1. Problemas, algoritmos y programas<br />

1.3.2 Corrección de algoritmos<br />

El aspecto de la corrección es de crucial importancia para qui<strong>en</strong> desarrolla un<br />

algoritmo. Sin embargo, es imposible detectar los posibles errores de una forma<br />

sistemática. Con frecu<strong>en</strong>cia, la búsqueda de errores (depuración) consiste <strong>en</strong> la<br />

comprobación de un algoritmo para unos pocos juegos de datos. Sin embargo, eso<br />

no garantiza nada más que el bu<strong>en</strong> funcionami<strong>en</strong>to del algoritmo para esos juegos<br />

de datos y no para todos los posibles. Volvi<strong>en</strong>do al algoritmo de la suma l<strong>en</strong>ta, la<br />

comprobación con los juegos de datos [2, 3] y [3, -1] ofrecería resultados correctos,<br />

y sin embargo el algoritmo únicam<strong>en</strong>te termina cuando el primer sumando es (un<br />

<strong>en</strong>tero) positivo.<br />

Fr<strong>en</strong>te a la comprobación, la verificación consiste <strong>en</strong> la demostración del bu<strong>en</strong><br />

funcionami<strong>en</strong>to de un algoritmo con respecto a una especificación. Esto es, la<br />

verificación trata de garantizar que, para todos los datos considerados (descritos<br />

<strong>en</strong> la especificación), el algoritmo lleva a los resultados (también descritos <strong>en</strong> la<br />

especificación) deseados. Por eso, aunque frecu<strong>en</strong>tem<strong>en</strong>te se habla de corrección<br />

de un algoritmo, sin más, <strong>en</strong> realidad hay que decir corrección de un algoritmo<br />

con respecto a una especificación.<br />

Por lo g<strong>en</strong>eral, la verificación se basa <strong>en</strong> establecer aserciones (propiedades)<br />

del estado de la máquina <strong>en</strong> cada paso del algoritmo. Se profundizará <strong>en</strong> esta<br />

idea a lo largo de todo el texto. Por ejemplo, para verificar el funcionami<strong>en</strong>to del<br />

algoritmo de “suma l<strong>en</strong>ta”, consideremos que se hace funcionar sobre dos <strong>en</strong>teros<br />

g<strong>en</strong>éricos m y n. Claram<strong>en</strong>te, al llegar a la posición 3 por vez primera, a = m y<br />

b = n. Por otra parte, <strong>en</strong> la posición 3 se ti<strong>en</strong>e invariablem<strong>en</strong>te la propiedad<br />

a + b = m + n<br />

indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te de las vueltas que se d<strong>en</strong> y de las modificaciones que se<br />

efectú<strong>en</strong> sobre a y b, 4 ya que cada unidad que se reste a a se le suma a b. Ahora<br />

bi<strong>en</strong>, cuando se pasa de la posición 3 a la 6 es por ser a = 0, con lo que se ti<strong>en</strong>e,<br />

simultáneam<strong>en</strong>te, el invariante a + b = m + n y a = 0, es decir:<br />

b = m + n<br />

lo que asegura que la salida es correcta. . . cuando ésta se produzca. Un algoritmo<br />

que ofrece una solución correcta cuando para, pero del que no sepamos si para<br />

o no, se dice parcialm<strong>en</strong>te correcto. Ese es el caso de la suma l<strong>en</strong>ta de números<br />

<strong>en</strong>teros.<br />

Además, si inicialm<strong>en</strong>te a es un número natural, es seguro que el algoritmo<br />

para, ya que la operación a ← a − 1 lo llevará a cero, precisam<strong>en</strong>te <strong>en</strong> a vueltas<br />

del bucle. Si se asegura que un algoritmo es parcialm<strong>en</strong>te correcto y que para<br />

4 Por ello, esta propiedad se conoce como invariante.

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

Saved successfully!

Ooh no, something went wrong!