• Domingo 22 de Diciembre de 2024, 11:57

Autor Tema:  metodos de ordenacion  (Leído 2920 veces)

twipsy

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
metodos de ordenacion
« en: Jueves 9 de Diciembre de 2010, 22:51 »
0
estoy haciendo unos ejercicios de ordenacion que me ha mandado el g*********. el caso es que en el de ordenacion switch me da un error de compilacion que o acabo de entender
Código: Pascal
  1. program vectores01;
  2.  
  3. uses crt;
  4. const mini = 1;
  5.       maxi = 100;
  6. type vector = array [mini..maxi] of integer;
  7.  
  8. Procedure despide;
  9.   begin
  10.     gotoxy(5,22); write('Pulsa una tecla para continuar...');
  11.     readkey;
  12.   end;
  13.  
  14. procedure escribe_vector(v:vector;N:byte);
  15. var i : integer;
  16.   begin
  17.     for i := mini to N do write(v[i]:5);
  18.     writeln;  
  19.   end;
  20.    
  21. procedure SeleccionDirecta (v : vector; N:byte);
  22. var vuelta,recorrido,
  23.     valor_mas_peque,pos_del_mas_peque : integer;
  24.   begin
  25.     escribe_vector(v,N);
  26.     for vuelta := mini to N - 1 do
  27.        begin
  28.          valor_mas_peque := v[vuelta];
  29.          pos_del_mas_peque := vuelta;
  30.          for recorrido := vuelta + 1 to N do
  31.             if v[recorrido] < valor_mas_peque
  32.                 then begin
  33.                        valor_mas_peque := v[recorrido];
  34.                        pos_del_mas_peque := recorrido;
  35.                      end;
  36.          if vuelta < pos_del_mas_peque
  37.             then begin
  38.                    v[pos_del_mas_peque] := v[vuelta];
  39.                    v[vuelta] := valor_mas_peque;
  40.                  end;
  41.          escribe_vector(v,N);               
  42.        end;
  43.     despide;
  44.   end;
  45.  
  46. procedure Baraja(v:vector;N:byte);
  47. Var
  48.    i, j, index : Integer;
  49.  
  50. Begin
  51.  For i := 1 to N do
  52.   Begin
  53.    index := v[i];
  54.    j := i-1;
  55.    While ((j >= 0) AND (v[j] > index)) do
  56.     Begin
  57.      v[j+1] := v[j];
  58.      j := j - 1;
  59.     End;
  60.    v[j+1] := index;
  61.    escribe_vector(v,N);
  62.    
  63.   End;
  64.  despide;
  65. end;
  66.  
  67. procedure Burbuja(v:vector;N:byte);
  68. var
  69. i,j,index:integer;
  70. begin
  71. for i:=1 to N-1 do
  72. for j:=1 to N-i do
  73. begin
  74. if v[i] > v[j+1] then
  75. begin
  76. index:=v[j];
  77. v[j]:=v[j+1];
  78. v[j+1]:=index;
  79. end;
  80. escribe_vector(v,N);
  81. end;
  82. despide;
  83. end;
  84.  
  85. procedure Switch(v:vector;N:byte);
  86.   var i,j,index:integer;
  87.    cambiado: boolean;
  88.  begin
  89.    clrscr;
  90.    repeat
  91.      cambiado := false;
  92.      for i := N downto 2 do
  93.      if v[i] < v[j+1] then {esta es la linea que da error}
  94.          begin
  95.          index:=v[j];
  96.          v[j]:=v[j+1];
  97.          v[j+1]:=index;
  98.          cambiado := true;              
  99.          end;
  100.    until not cambiado;                  
  101.    despide;
  102.  end;
  103.  
  104. procedure Sacudida(v:vector;N:byte);
  105.   begin
  106.     clrscr;
  107.     gotoxy(5,5); write('Este método aún no lo tengo implementado');
  108.     despide;
  109.   end;
  110.  
  111. procedure Shell(v:vector;N:byte);
  112.   begin
  113.     clrscr;
  114.     gotoxy(5,5); write('Este método aún no lo tengo implementado');
  115.     despide;
  116.   end;
  117.  
  118. procedure presenta(var N:byte);
  119.   begin
  120.     clrscr;
  121.     gotoxy(5,5); write('Este programa nos ordena un  vector de N valores');
  122.     gotoxy(5,6); write('Primero  me  rellena  aleatoriamente  el  vector');
  123.     gotoxy(5,7); write('Y luego el usuario elige un método de ordenación');
  124.     gotoxy(5,8); write('================================================');
  125.     gotoxy(5,10); write('Dime cuántos valores quieres que tengamos: ');
  126.     readln(N);
  127.     despide;
  128.   end;
  129.  
  130. procedure rellena_vector(var v:vector; N:byte);
  131. var i : integer;
  132.   begin
  133.     randomize;
  134.     for i := mini to N do v[i] := random(1000);
  135.   end;
  136.  
  137. function menu(v:vector;N:byte):char;
  138. var c : char;
  139.   begin
  140.     clrscr;
  141.     gotoxy(5,5);  write('M E N U   D E   O R D E N A C I O N');
  142.     gotoxy(5,6);  write('===================================');
  143.     gotoxy(5,8);  write('1.- Método selección directa');
  144.     gotoxy(5,9);  write('2.- Método baraja');
  145.     gotoxy(5,10); write('3.- Método burbuja');
  146.     gotoxy(5,11); write('4.- Método switch');
  147.     gotoxy(5,12); write('5.- Método sacudida');
  148.     gotoxy(5,13); write('6.- Método shell');
  149.     gotoxy(5,14); write('7.- Salir');
  150.     gotoxy(5,17); write('Pulsa el número de tu elección: ');
  151.     repeat c := readkey; until c IN ['1'..'7'];
  152.     clrscr;
  153.     case c of
  154.       '1' : SeleccionDirecta(v,N);
  155.       '2' : Baraja(v,N);
  156.       '3' : Burbuja(v,N);
  157.       '4' : Switch(v,N);
  158.       '5' : Sacudida(v,N);  {Opcional, sólo para sacar un 10}
  159.       '6' : Shell(v,N);     {Opcional, sólo para sacar un 10}
  160.     end;
  161.     menu := c;
  162.   end;
  163.  
  164. var v : vector;
  165.     N : byte;
  166. BEGIN
  167.   presenta(N);
  168.   rellena_vector(v,N);
  169.   repeat until menu(v,N) = '7';
  170. END.
  171.  
  172.  

el error en cuestion es el siguiente:
sin título.pas(94,20) Warning: Local variable "j" does not seem to be initialized (uso geany)

como lo puedo solucionar? esta bien el resto del codigo?

gracias y disculpen las molestias

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: metodos de ordenacion
« Respuesta #1 en: Viernes 10 de Diciembre de 2010, 00:20 »
0
Código: Delphi
  1. procedure Switch(v:vector;N:byte);
  2.   var i,j,index:integer;
  3.    cambiado: boolean;
  4.  begin
  5.    clrscr;
  6.    repeat
  7.      cambiado := false;
  8.      for i := N downto 2 do
  9.      if v[i] < v[j+1] then {esta es la linea que da error}
  10.          begin
  11.          index:=v[j];
  12.  
  13.  

Si te fijas, pones if v < v[j+1]

A que equivale j+1?
J no tiene valor definido.
1) o le pones algun valor
2) o bien, me parece que en vez de j+1 es "i+1"

Saludos ^^

twipsy

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: metodos de ordenacion
« Respuesta #2 en: Viernes 10 de Diciembre de 2010, 16:14 »
0
ya he arreglado el switch y funciona perfectamente. ahora debo arreglar la parte del burbuja ya que no me sale el resultado que debe salir (directamente solo ordena 1 numero, el resto nada).

estoy trabajando en la solucion pero me seria de ayuda si me pudierais decir que debo cambiar del codigo

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: metodos de ordenacion
« Respuesta #3 en: Viernes 10 de Diciembre de 2010, 19:54 »
0
para el de burbuja suelo hacer:
Código: Delphi
  1.  
  2. for i:=1 to N do
  3.    for j:= i+1 to N do
  4.          if v[i]<v[j] then
  5.              intercambiar(v[i], v[j]);
  6.              
  7.            
  8.  
  9.  

twipsy

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: metodos de ordenacion
« Respuesta #4 en: Viernes 10 de Diciembre de 2010, 21:24 »
0
por fin he conseguido terminarlo y ya esta entregado. muchas gracias por la ayuda