Witam Forumowiczów,
Nazywam się Michał i jestem początkujący jeśli chodzi o programowanie. Mam problem ze swoim algorytmem, który sortuje tablicę dwuwymiarową (nie wierszami czy kolumnami, tylko całą tablicę). Algorytm działa bez aktywnej opcji "Range Checking", lecz gdy ją włączam algorytm się sypie.
Zdaję sobię sprawę, że algorytm może być bardzo toporny, ale jestem zupełnym noobem i nie mam doświadczenia.
Tablicy nie losuje celowo, żeby łatwiej mi było sprawdzić wynik sortowania.
Proszę, zobaczcie algorytm i pomóżcie go naprawić przy zachowaniu obecnego układu pętli jeżeli się da:
program InsertionSort;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n=7;
m=5;
var
T : array [1..7, 1..5] of Integer;
lw, lk: Integer;
key, obecna_kolumna, obecny_wiersz: Integer;
begin
T[1,1]:=18; T[1,2]:=18; T[1,3]:=17; T[1,4]:=17; T[1,m]:=16;
T[2,1]:=16; T[2,2]:=15; T[2,3]:=15; T[2,4]:=14; T[2,m]:=14;
T[3,1]:=13; T[3,2]:=13; T[3,3]:=12; T[3,4]:=12; T[3,m]:=11;
T[4,1]:=11; T[4,2]:=10; T[4,3]:=10; T[4,4]:=10; T[4,m]:=9;
T[5,1]:=9; T[5,2]:=8; T[5,3]:=8; T[5,4]:=7; T[5,m]:=7;
T[6,1]:=6; T[6,2]:=6; T[6,3]:=5; T[6,4]:=5; T[6,m]:=4;
T[n,1]:=4; T[n,2]:=3; T[n,3]:=3; T[n,4]:=2; T[n,m]:=1;
Writeln ('Przed sortowaniem:'); Writeln;
For lw:=1 to n do
begin
Write (' ');
For lk:=1 to m do
begin
if T[lw,lk]<100 then write (' ');
If T[lw,lk]<10 then write (' ');
Write (T[lw,lk], ' ');
end;
Writeln;
end;
//_______SORTOWANIE_______________________________________________________________________________
lk:=1;
For lw:=1 to n do
begin
Repeat
lk:=lk+1;
key:=T[lw,lk];
obecna_kolumna:= lk - 1;
obecny_wiersz:=lw;
while (obecny_wiersz > 0) and (T[obecny_wiersz,obecna_kolumna] > key) do
begin
T[obecny_wiersz, obecna_kolumna+1]:= T[obecny_wiersz, obecna_kolumna];
obecna_kolumna:= obecna_kolumna - 1;
if obecna_kolumna = 0 then begin obecny_wiersz:=obecny_wiersz-1; obecna_kolumna:=m; end;
if obecny_wiersz = 0 then break;
end;
T[obecny_wiersz, obecna_kolumna+1]:=key;
Until lk = m;
lk:=0;
end;
//_________________________________________________________________________________________________
Writeln; Writeln; Writeln ('Po sortowaniu: '); Writeln; //Wyswietlam algorytm po sortowaniu:
For lw:=1 to n do
begin
Write (' ');
For lk:=1 to m do
begin
if T[lw,lk]<100 then write (' ');
If T[lw,lk]<10 then write (' ');
Write (T[lw,lk], ' ');
end;
Writeln;
end;
Readln;
end.