Sortowanie całej tablicy dwuwymiarowej przez wstawianie w Delphi

0

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.
0

Nazywam się Michał i jestem początkujący jeśli chodzi o programowanie.

Cześć michał...
Nie żebym chciał być jakiś specjalnie chamski, ale generalnie nie widzę po co nam to mówisz...

jestem zupełnym noobem i nie mam doświadczenia.

Już się nie chwal, wiemy że jak piszesz w newbie to nie jesteś pr0.

Algorytm działa bez aktywnej opcji "Range Checking", lecz gdy ją włączam algorytm się sypie.

Skoro znasz Range Checking, to pewnie znasz też debugger?
I gdybyś popatrzył obiektywnie, to bardzo super że opisałeś problem ale nie podałeś co wywala debugger, a zapewne podpowiedział jaki to błąd a nawet w której linii. Nie sądzisz że to przydatne? Bo ja tak sądzę.

Generalnie to gdybyś poszukał w google to byś wiedział że należy użyć debuggera który pomoże ci znaleźć i naprawić ten błąd. Gdybyś mimo jego użycia miał problemy z rozpoznaniem błędu, to wstaw informacje które wywala debugger (call stack, stany zmiennych, kod błędu etc. etc.)

P.S. Jeżeli nie umiesz używać debuggera, to masz googla, on wie i ci powie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1