Sei sulla pagina 1di 2

Algoritmos y Estructuras de Datos

Comparemos ambas soluciones. Si bien la segunda es mas clara para leer (tanto el Chapin
como el Pascal), es menos eficiente. Veamos por que:

Supongamos que los tres caracteres sean D , P y H, es decir c1=D , c2=P y c3=H,

En el primer algoritmo, se ejecutara el IF (A1), luego el IF (A2), luego un WRITE y se


terminara el algoritmo.

En cambio, en el segundo algoritmo, se ejecutara el IF (B1), luego el IF (B2), luego un


WRITE, luego el IF (B3), luego el IF (B5),y se terminara el algoritmo. Hemos realizado en el
segundo algoritmo dos IFs de mas.

Supongamos que los tres caracteres sean M , B y W, es decir c1=M , c2=B y c3=W,

En el primer algoritmo, se ejecutara el IF (A1), luego el IF (A3), luego el IF (A4), luego un


WRITE y se terminara el algoritmo.

En cambio, en el segundo algoritmo, se ejecutara el IF (B1), luego el IF (B3), luego el IF


(B4), luego un WRITE, luego el IF (B5),y se terminara el algoritmo. Hemos realizado en el
segundo algoritmo un IF de mas.

Si el juego de tres caracteres es Z , F y M, es decir c1=Z , c2=F y c3=M, no hay


diferencia en cuanto a ambos algoritmos (queda para el alumno la verificacin).

De todos modos, ya que no conocemos el juego de datos que entrar, concluimos que el primer
algoritmo es mas eficiente.

Pero tenemos otra posibilidad de resolver el problema que tal vez no sea la primer forma que
nos viene a la mente al intentar el algoritmo, pero que tal vez sea tanto o mas eficiente que la
primera

Mtodo 3 : Leamos las tres letras e intercambiemos para dejar la menor en c1. Para esto
comparo c1 con c2 y si c1 es mayor que c2 las intercambio mediante un valor auxiliar. En c1
qued la menor de esas dos. Luego comparo c1 con c3 y hago lo mismo que en el caso anterior.
Estoy seguro que en c1 est la letra mas chica de las tres. Luego simplemente comparo c2 con c3
e imprimo en consecuencia.

Pongamos este mtodo en Chapin y Pascal

14
Algoritmos y Estructuras de Datos
else writeln(c1,c3,c2)
else if ((c2<c1) and (c2<c3)) then
if c1<c3 then writeln(c2,c1,c3)
else writeln(c2,c3,c1)
else
if c1<c2 then writeln(c3,c1,c2)
else writeln(c3,c2,c1)
end; writeln;
for indi:=1 to 6 do
begin
case indi of
1: begin c1 := 'P' ; c2 := 'Q' ; c3 := 'R' end ;
2: begin c1 := 'P' ; c2 := 'R' ; c3 := 'Q' end ;
3: begin c1 := 'Q' ; c2 := 'P' ; c3 := 'R' end ;
4: begin c1 := 'Q' ; c2 := 'R' ; c3 := 'P' end ;
5: begin c1 := 'R' ; c2 := 'P' ; c3 := 'Q' end ;
6: begin c1 := 'R' ; c2 := 'Q' ; c3 := 'P' end
end;
write('Metodo 2 - ',c1,c2,c3,' ');
if ((c1<c2) and (c1<c3)) then if c2<c3 then writeln(c1,c2,c3)
else writeln(c1,c3,c2);
if ((c2<c1) and (c2<c3)) then if c1<c3 then writeln(c2,c1,c3)
else writeln(c2,c3,c1);
if ((c3<c1) and (c3<c2)) then if c1<c2 then writeln(c3,c1,c2)
else writeln(c3,c2,c1);
end; writeln;
for indi:=1 to 6 do
begin
case indi of
1: begin c1 := 'P' ; c2 := 'Q' ; c3 := 'R' end ;
2: begin c1 := 'P' ; c2 := 'R' ; c3 := 'Q' end ;
3: begin c1 := 'Q' ; c2 := 'P' ; c3 := 'R' end ;
4: begin c1 := 'Q' ; c2 := 'R' ; c3 := 'P' end ;
5: begin c1 := 'R' ; c2 := 'P' ; c3 := 'Q' end ;
6: begin c1 := 'R' ; c2 := 'Q' ; c3 := 'P' end
end;
write('Metodo 3 - ',c1,c2,c3,' ');
if c2<c1 then begin aux:=c1 ; c1:=c2 ; c2:=aux end;
if c3<c1 then begin aux:=c1 ; c1:=c3 ; c3:=aux end;
if c2<c3 then writeln(c1,c2,c3)
else writeln(c1,c3,c2)
end;
write('Pulse una tecla . . .'); read(rta)
end.

16

Potrebbero piacerti anche