Vous êtes sur la page 1sur 2

Algoritmos y Estructuras de Datos

estructura sin recorrer el Bloque. Si al intentar ingresar por primera vez a la estructura, la condicin es falsa, se sale
de la misma sin ejecutar el bloque. Conclusin: en el mientras podra ocurrir que el bloque no se ejecute nunca.

Problema: Leer los tres coeficientes a (distinto de cero), b, c, de varias ecuaciones de segundo
grado (no se sabe cuantas) e ir resolvindolas en el campo real a medida que se lee cada terna.

Ac se nos presenta un problema muy comn en algoritmia, tenemos que reiterar un cierto
conjunto de acciones pero no se sabe cuantas veces, no vamos a usar un para ya que este lo
usaremos cuando al ingresar a la estructura se conoce la cantidad de veces que se debe repetir el
Bloque. Usaremos un mientras, pero ahora la cuestin es como indicamos el fin de la repeticin.
Esto se consigue mediante un hecho (una lectura, un clculo,.) que no pueda ser interpretado
como un dato, sino como una seal de fin de entrada de los mismos. En este ejemplo ser
ingresando un valor de cero para a

.
leer a

mientras a <> 0

leer b , c

delta b2 - 4 . a . c

delta >= 0
V F

x1 = ( -b - delta ) / ( 2 . a )

x2 = ( -b + delta ) / ( 2 . a ) escribir No hay solucin

escribir x1 , x2

leer a

program ecuas2 (input,output) ;


var a , b , c , delta , x1 , x2 : real ;
begin read(a) ; while a<>0 do begin
readln(b,c);
delta := b*b 4*a*c;
if delta >= 0 then
begin x1 := (-b sqrt(delta))/(2*a);
x2 := (-b + sqrt(delta))/(2*a);
writeln(x1,x2)
end
else
writeln ( No hay solucion )
read(a)
end
end .

21
Algoritmos y Estructuras de Datos

program ecuas3 (input,output);


var a, b, c, x1, x2, delta : real ;
begin read( a ) ;
repeat read( b, c ) ;
delta := b*b 4*a*c ;
if delta >= 0 then begin x1 := (-b sqrt(delta))/(2*a);
x2 := (-b + sqrt(delta))/(2*a);
write(x1,x2)
end
else write (No hay solucin);
read( a )
until a = 0
end.

Vale la pena hacer notar que hemos resuelto el mismo problema con un mientras y con un
repetir, pero la condicin fue exactamente una contraria a la otra.

Validacin de una entrada:

Supongamos que queremos leer un entero que debe ser mayor o igual que 7 y menor o igual que
15. Lo haremos con un mientras y con un repetir

con while con repeat


. .
. .
write(Ingrese un entero entre 7 y 15) ; .
read( n ) ; repeat write(Ingrese un entero entre 7 y 15) ;
while n < 7 or n > 15 do read( n )
begin write(Error, ingrese de nuevo) ; until n >= 7 and n <= 15;
read( n ) .
end ; .
. .
. .
Ambas funcionan bien, pero con el while resulta mas amigable.
Notar nuevamente que las condiciones son opuestas.

23

Vous aimerez peut-être aussi