Programación General > Pascal

 metodos de ordenacion

(1/1)

twipsy:
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 ---program vectores01; uses crt;const mini = 1;      maxi = 100;type vector = array [mini..maxi] of integer; Procedure despide;  begin    gotoxy(5,22); write('Pulsa una tecla para continuar...');    readkey;  end; procedure escribe_vector(v:vector;N:byte);var i : integer;  begin    for i := mini to N do write(v[i]:5);    writeln;    end;    procedure SeleccionDirecta (v : vector; N:byte);var vuelta,recorrido,    valor_mas_peque,pos_del_mas_peque : integer;  begin    escribe_vector(v,N);    for vuelta := mini to N - 1 do       begin         valor_mas_peque := v[vuelta];         pos_del_mas_peque := vuelta;         for recorrido := vuelta + 1 to N do            if v[recorrido] < valor_mas_peque                then begin                       valor_mas_peque := v[recorrido];                       pos_del_mas_peque := recorrido;                     end;         if vuelta < pos_del_mas_peque             then begin                   v[pos_del_mas_peque] := v[vuelta];                   v[vuelta] := valor_mas_peque;                 end;         escribe_vector(v,N);                      end;     despide;  end; procedure Baraja(v:vector;N:byte);Var   i, j, index : Integer; Begin For i := 1 to N do  Begin   index := v[i];   j := i-1;   While ((j >= 0) AND (v[j] > index)) do    Begin     v[j+1] := v[j];     j := j - 1;    End;   v[j+1] := index;   escribe_vector(v,N);     End; despide;end; procedure Burbuja(v:vector;N:byte);vari,j,index:integer;beginfor i:=1 to N-1 dofor j:=1 to N-i dobeginif v[i] > v[j+1] thenbeginindex:=v[j];v[j]:=v[j+1];v[j+1]:=index;end;escribe_vector(v,N);end;despide;end; procedure Switch(v:vector;N:byte);  var i,j,index:integer;   cambiado: boolean;  begin    clrscr;   repeat      cambiado := false;     for i := N downto 2 do     if v[i] < v[j+1] then {esta es la linea que da error}         begin          index:=v[j];         v[j]:=v[j+1];         v[j+1]:=index;         cambiado := true;                       end;    until not cambiado;                     despide; end; procedure Sacudida(v:vector;N:byte);  begin    clrscr;    gotoxy(5,5); write('Este método aún no lo tengo implementado');    despide;  end; procedure Shell(v:vector;N:byte);  begin    clrscr;    gotoxy(5,5); write('Este método aún no lo tengo implementado');    despide;  end; procedure presenta(var N:byte);  begin    clrscr;    gotoxy(5,5); write('Este programa nos ordena un  vector de N valores');    gotoxy(5,6); write('Primero  me  rellena  aleatoriamente  el  vector');    gotoxy(5,7); write('Y luego el usuario elige un método de ordenación');    gotoxy(5,8); write('================================================');    gotoxy(5,10); write('Dime cuántos valores quieres que tengamos: ');    readln(N);    despide;  end; procedure rellena_vector(var v:vector; N:byte);var i : integer;  begin    randomize;    for i := mini to N do v[i] := random(1000);  end; function menu(v:vector;N:byte):char;var c : char;  begin    clrscr;    gotoxy(5,5);  write('M E N U   D E   O R D E N A C I O N');    gotoxy(5,6);  write('===================================');    gotoxy(5,8);  write('1.- Método selección directa');    gotoxy(5,9);  write('2.- Método baraja');    gotoxy(5,10); write('3.- Método burbuja');    gotoxy(5,11); write('4.- Método switch');    gotoxy(5,12); write('5.- Método sacudida');    gotoxy(5,13); write('6.- Método shell');    gotoxy(5,14); write('7.- Salir');    gotoxy(5,17); write('Pulsa el número de tu elección: ');    repeat c := readkey; until c IN ['1'..'7'];    clrscr;    case c of      '1' : SeleccionDirecta(v,N);      '2' : Baraja(v,N);      '3' : Burbuja(v,N);      '4' : Switch(v,N);      '5' : Sacudida(v,N);  {Opcional, sólo para sacar un 10}      '6' : Shell(v,N);     {Opcional, sólo para sacar un 10}     end;    menu := c;  end; var v : vector;    N : byte; BEGIN  presenta(N);  rellena_vector(v,N);  repeat until menu(v,N) = '7';END.  
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:

--- Código: Delphi ---procedure Switch(v:vector;N:byte);  var i,j,index:integer;   cambiado: boolean; begin   clrscr;   repeat     cambiado := false;     for i := N downto 2 do     if v[i] < v[j+1] then {esta es la linea que da error}         begin         index:=v[j];  
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:
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:
para el de burbuja suelo hacer:

--- Código: Delphi --- for i:=1 to N do   for j:= i+1 to N do         if v[i]<v[j] then             intercambiar(v[i], v[j]);                           

twipsy:
por fin he conseguido terminarlo y ya esta entregado. muchas gracias por la ayuda

Navegación

[0] Índice de Mensajes

Ir a la versión completa