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.

148 Capítulo 7. <strong>Programación</strong> estructurada<br />

{m = mín k ∈ IN tal que k 2 ≥ n}<br />

if Sqr(m) = n th<strong>en</strong><br />

WriteLn(n, ’sí es cuadrado perfecto’)<br />

else<br />

WriteLn(n, ’no es cuadrado perfecto’)<br />

La garantía de que el m<strong>en</strong>saje emitido es correcto se ti<strong>en</strong>e porque:<br />

• La rama th<strong>en</strong> se ejecuta cuando resulta cierta la condición (m 2 = N), lo<br />

que basta para que N sea un cuadrado perfecto.<br />

• La rama else se ejecuta cuando la condición m 2 = N es falsa. Como,<br />

además,<br />

m = mín {k ∈ IN tal que k 2 ≥ N}<br />

es seguro que ningún natural k elevado al cuadrado da N. Por consigui<strong>en</strong>te,<br />

N no es un cuadrado perfecto.<br />

El desarrollo de este procedimi<strong>en</strong>to nos lleva a refinar la acción<br />

Buscar el número m descrito<br />

de manera tal que, a su término, se verifique la (post)condición<br />

m = mín k ∈ IN tal que k 2 ≥ N<br />

La búsqueda de m descrita puede llevarse a cabo de diversas maneras. En<br />

los subapartados sigui<strong>en</strong>tes desarrollamos con detalle dos posibilidades.<br />

Búsqueda secu<strong>en</strong>cial<br />

Una primera forma de buscar el mínimo k ∈ IN tal que k 2 ≥ N consiste <strong>en</strong><br />

tantear esa condición sucesivam<strong>en</strong>te para los valores de i = 0, 1, . . . hasta que uno<br />

la verifique. Como el tanteo se realiza asc<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te, el primer i <strong>en</strong>contrado<br />

que verifique el test será, evid<strong>en</strong>tem<strong>en</strong>te, el mínimo m buscado.<br />

El método de búsqueda descrito se puede expresar directam<strong>en</strong>te <strong>en</strong> <strong>Pascal</strong><br />

con un bucle:<br />

i:= 0;<br />

while Sqr(i) < N do<br />

(7.7)<br />

i:= i+1;<br />

{i = m}<br />

Es importante resaltar una propiedad (invariante) de ese bucle: ningún natural<br />

k < i verifica la propiedad k 2 ≥ N, de m; esto es, m ≥ i. Por otra parte,

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

Saved successfully!

Ooh no, something went wrong!