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
Ir a la versión completa