• Domingo 22 de Septiembre de 2019, 12:16

Autor Tema:  Ordenacion QuickSort  (Leído 619 veces)

Geo_Jervin

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Ordenacion QuickSort
« en: Martes 14 de Abril de 2009, 02:57 »
0
Este es el código el problema es que me da error en la parte acentral y no se porque razón

Código: Pascal
  1.  
  2. Program Quicksort;
  3. uses crt;
  4. type
  5.     vector=array [1..10] of integer;
  6. const
  7.      lista:vector=(8,5,6,3,1,4,2,7,10,9);
  8. var
  9.    k:integer;
  10.    longitud:integer;
  11.  
  12. procedure rapido (var a:vector;n:integer);
  13.     procedure partir (primero,ultimo :integer);
  14.     var
  15.        i,j,central:integer;
  16.        procedure intercambiar (var m,n:integer);
  17.        var
  18.           aux:integer;
  19.        begin
  20.             aux:=m;
  21.             M:=n;
  22.             N:=aux;
  23.        end;
  24.     begin
  25.          i:=primero;
  26.          j:=ultimo;
  27.          central:=a[(primero+ultimo) div 2];
  28.          repeat
  29.                while a[i]central do {Aqui es donde me da el error en a[i]central}
  30.                                   j:=j-1;
  31.                if i<=j then
  32.                        begin
  33.                             intercambiar (a[i],a[j]);
  34.                             i:=i+1;
  35.                             j:=j-1;
  36.                        end;
  37.          until i>j;
  38.          if primero<j then
  39.                       partir(primero,j);
  40.          if i<ultimo then
  41.                      partir(i,ultimo);
  42.     end;
  43. begin
  44.      partir (1,n);
  45. end;
  46. begin
  47.      clrscr;
  48.      k:=0;
  49.      write ('Este es el vector original: ');
  50.      repeat
  51.            begin
  52.                 write (lista[k],' ');
  53.                 k:=k+1;
  54.            end;
  55.      until k=11;
  56.      writeln;
  57.      rapido (lista,10);
  58.      k:=0;
  59.      write ('Este es el vector ordenado: ');
  60.      repeat
  61.            begin
  62.                 write (lista[k],' ');
  63.                 k:=k+1;
  64.            end;
  65.      until k=11;
  66.      readln;
  67. end.
  68.  
  69.  

Espero que me puedan ayudar

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Ordenacion QuickSort
« Respuesta #1 en: Martes 14 de Abril de 2009, 17:36 »
0
Mi primer consejo es que no declares procedimientos dentro de procedmientos dentro de procedimientos... Hazlo fuera:

Código: Pascal
  1. Program Quicksort;
  2. uses crt;
  3. type
  4.     vector=array [1..10] of integer;
  5. const
  6.      lista:vector=(8,5,6,3,1,4,2,7,10,9);
  7. var
  8.    k:integer;
  9.    longitud:integer;
  10.  
  11. procedure intercambiar (var m,n:integer);
  12. var
  13.     aux:integer;
  14. begin
  15.     aux:=m;
  16.     M:=n;
  17.     N:=aux;
  18. end;
  19.  
  20. procedure partir (primero,ultimo :integer);
  21. var
  22.    i,j,central:integer;
  23. begin
  24.      i:=primero;
  25.      j:=ultimo;
  26.      central:=a[(primero+ultimo) div 2];
  27.      repeat while a[i]central do {Aqui es donde me da el error en a[i]central}
  28.            j:=j-1;
  29.            if i<=j then
  30.            begin
  31.                    intercambiar (a[i],a[j]);
  32.                    i:=i+1;
  33.                    j:=j-1;
  34.            end;
  35.      until i>j;
  36.      if primero<j then
  37.            partir(primero,j);
  38.      if i<ultimo then
  39.            partir(i,ultimo);
  40. end;
  41.  
  42. procedure rapido (var a:vector;n:integer);
  43. begin
  44.      partir (1,n);
  45. end;
  46.  
  47. begin
  48.      clrscr;
  49.      k:=0;
  50.      write ('Este es el vector original: ');
  51.      repeat
  52.            begin
  53.                 write (lista[k],' ');
  54.                 k:=k+1;
  55.            end;
  56.      until k=11;
  57.      writeln;
  58.      rapido (lista,10);
  59.      k:=0;
  60.      write ('Este es el vector ordenado: ');
  61.      repeat
  62.            begin
  63.                 write (lista[k],' ');
  64.                 k:=k+1;
  65.            end;
  66.      until k=11;
  67.      readln;
  68. end.
  69.  
En cuanto al tema de acentral, es lógico que te dé error, esa sintaxis es errónea. Supongo que querías poner (o está mal en el libro): a<central

Salud

Geo_Jervin

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Ordenacion QuickSort
« Respuesta #2 en: Miércoles 15 de Abril de 2009, 06:49 »
0
Gracias, Tenes razón con respecto al error si era ese y voy a tomar tu consejo con respecto a los procedimientos