[ Foro de Pascal ]

algoritmo burbuja

29-Dec-2011 03:09
pop war
5 Respuestas

Hola, estube practicando ordenamientos, el de la burbuja específicamente, el algoritmo es el mismo que apliqué en otro lenguajes como Basic y C (con su respectiva sintaxis) y en ambos el resultado fue correcto, ahora, en Pascal no me ordena correctamente. Por ej: si le doy de entrada (3, 5, 90, 78 ,21) me devuelve (21,78,90,0,0) dónde están el 3 y 5, quisiera que me ayuden, calculo que debe ser un problema de sintaxis, pero no se cuál, recién empiezo con este lenguaje. El código es el sig:

uses
crt;

var
a:array[1..5] of integer;
x,n,i,j,aux:integer;

begin

clrscr;

for n:=1 to 5 do
   begin
   readln(x);
   a[n]:=x ;
   end;

writeln;
writeln;

for n:=1 to 5 do
   begin
   writeln(a[n]);
   end;

readkey;

for i:=1 to 4 do
begin
    for j:=1 to (5-i) do
        begin
        if a[j] > a[j+1] then
        aux:=a[j];
        a[j]:=a[j+1];
        a[j+1]:=aux
        end;
end;

writeln;
writeln;

for j:=1 to 5 do
   begin
   writeln(a[j]);
end;
readkey;
end.

Gracias.


29-Dec-2011 11:00
Nacho Cabanes (+84)

Tienes un fallo frecuente: te falta un "begin" y un "end" en la parte que intercambia las tres variables, de modo que cuando se cumple el IF, sólo da el primero de los pasos:

for i:=1 to 4 do
begin
   for j:=1 to (5-i) do
       begin
       if a[j] > a[j+1] then
           BEGIN
           aux:=a[j];
           a[j]:=a[j+1];
           a[j+1]:=aux
           END;
       end;
end;


29-Dec-2011 11:12
Nacho Cabanes (+84)

Confírmame si con el BEGIN y el END va bien.

Aun así, he ampliado el curso, para añadir una "ampliación 3", que sí existía en la versión PDF, pero no en la versión alojada aquí. Esa ampliación 3 habla sobre ordenaciones, y cuenta cómo es el método de burbuja (y otros dos) y cómo aprovechar que los datos están ordenados para hacer una "búsqueda binaria".


29-Dec-2011 13:28
pop war

Sí, ese era el problema, muchas gracias. Quisiera preguntarte también cómo hago para dejar cargada una tabla (matriz) en el código fuente, es decir, no tener que ingresarla cuando corre el programa.


29-Dec-2011 13:50
Nacho Cabanes (+84)

Puedes dejar cargada la matriz usando "const", e indicando los valores entre paréntesis, separados por comas.

He publicado algunas ampliaciones del curso que estaban en el PDF pero no aquí. Entre ellas, en la que habla de cómo usar ensamblador  desde Turbo Pascal, tienes un ejemplo, en el que los datos del sprite forman una matriz de 2 dimensiones:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=473


29-Dec-2011 19:42
pop war

OK; gracias.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)