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.

114 Capítulo 6. Instrucciones estructuradas<br />

La codificación de este algoritmo es bastante simple: En primer lugar, conocida<br />

la función a la que queremos calcular un cero, debemos solicitar el máximo<br />

error permitido, epsilon, y los extremos del intervalo donde buscar el cero de<br />

la función, a y b. Después habrá que reducir el intervalo hasta que sea m<strong>en</strong>or<br />

que 2 * epsilon; <strong>en</strong> la reducción del intervalo se irán cambiando los valores de<br />

los extremos del intervalo, para lo cual se usarán las variables izda y dcha. La<br />

primera aproximación <strong>en</strong> seudocódigo es la sigui<strong>en</strong>te:<br />

Program Biparticion (input, output);<br />

var<br />

epsilon, a, b, izda, dcha: real;<br />

begin<br />

Leer el error permitido, epsilon;<br />

Leer los extremos del intervalo, a,b;<br />

izda:= a; dcha:= b;<br />

Reducir el intervalo<br />

Imprimir el resultado<br />

<strong>en</strong>d. {Biparticion}<br />

La lectura y salida de datos no pres<strong>en</strong>ta mayor dificultad, por su parte la<br />

tarea reducir el intervalo requiere la utilización de una variable adicional, c,<br />

para almac<strong>en</strong>ar el valor del punto c<strong>en</strong>tral del intervalo. Podemos refinar esta<br />

tarea mediante un bucle while, ya que no sabemos si será necesario ejecutar al<br />

m<strong>en</strong>os una reducción del intervalo de partida (aunque es lo previsible):<br />

while (dcha - izda) > 2 * epsilon do begin<br />

{Inv.: signo(f(izda)) = signo(f(dcha))}<br />

c:= (dcha + izda) / 2;<br />

if f(dcha) * f(c) < 0 th<strong>en</strong><br />

{El cero se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> [c,dcha]}<br />

izda:= c<br />

else<br />

{El cero se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> [izda,c]}<br />

dcha:= c;<br />

<strong>en</strong>d {while}<br />

{PostC.: c es la aproximación buscada}<br />

Lo único que queda por completar, dejando aparte la <strong>en</strong>trada y salida de<br />

datos, consiste <strong>en</strong> la comprobación de la condición de la instrucción if-th<strong>en</strong>-else,<br />

es decir f(dcha) * f(c) < 0, cuya codificación se realizará una vez conocida<br />

la función f.<br />

El programa final del método es el sigui<strong>en</strong>te:

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

Saved successfully!

Ooh no, something went wrong!