Sortowanie tablicy dwuwymiarowej (druga macierz) oraz wytłumaczenie jednej rzeczy z SetLength

0

Witam,

otóż robię sobie zadanka ze strony Młodzieżowej Akademii Informatycznej. Trafiłem na takie, z którym mam problem, otóż za zadanie jest posortowanie współrzędnych. Sortowanie według współrzędnych X działa, natomiast z Y nic nie mogę wykombinować, próbowałem porównywać, czy [i][1] = [i+1][1] i jeżeli nie, to wtedy zamieniać ich kolejność, lecz nic z tego, wtedy w ogóle była kicha, prosiłbym więc o wskazówkę.

Druga sprawa, to użycie SetLength - http://4programmers.net/Delphi/SetLength
Użyłem tejże funkcji, lecz nie rozumiem, dlaczego od tego momentu muszę używać i jako zero, chociaż zdaję sobie sprawę że tak powinno być ( np. w c, c++ ), ale najzwyczajniej nie rozumiem dlaczego.
No dla przykładu wezmę pod lupę ten kod:

     for j:= 0 to 1 do write(wsp[i-1][j],' ');

Dzięki za pomoc i pozdrawiam gorąco!

program punkty1;
uses crt;
var wsp:array of array of integer;
var n:integer;

procedure wczytaj_wsp;
var i: integer;
    j,temp:integer;
begin
  readln(n);
  setlength(wsp, n, 2);
  for i:=1 to n do
  begin
    for j:=0 to 1 do
    begin
    read(temp);
    wsp[i-1][j] := temp;
    end;
  end;
end;
procedure wypisz_wsp;
var i:integer;
    j:integer;
begin
  for i:=1 to n do
  begin
    for j:= 0 to 1 do write(wsp[i-1][j],' ');
    writeln;
  end;
end;
procedure sortuj_wsp;
var i, m:integer;
    j, temp, temp2:integer;
begin
  for m:=1 to n-1 do
  begin
  for i:=1 to n-1 do
    begin
    for j:= 0 to 0 do
      begin
      if(wsp[i-1][j] > wsp[i][j]) then
          begin
          temp:= wsp[i][j];
          temp2 := wsp[i][j+1];
          wsp[i][j] := wsp[i-1][j];
          wsp[i][j+1] := wsp[i-1][j+1];
          wsp[i-1][j] := temp;
          wsp[i-1][j+1] := temp2;
          end;
      end;
    end;
  end;
end;
begin
   clrscr;
   wczytaj_wsp;
   sortuj_wsp;
   clrscr;
   wypisz_wsp;
   readln;
   readln;
end.
1

Zrób to jeszcze raz, tym razem z głową; I wywal te zmienne globalne - macierz przekazuj przez referencję w parametrze;

Poza tym SetLength to jest procedura, a nie funkcja; I dlaczego macierz wsp przechowuje wartości typu Integer?! Użyj typu TPoint i macierzy jednowymiarowej, bo tylko utrudniasz sobie życie.

0

Dzięki za odpowiedź, chociaż nie miałem wcześniej styczności z Typami, to w takim razie spróbuję teraz, tylko jeżeli mogę Cie prosić, to chciałbym, byś mnie naprowadził, otóż rejestruję dany typ:

type Twsp = record
            x:ShortInt;
            y:ShortInt;
            end; 

Następnie jednowymiarową tablicę:

 var tab:array of Twsp

I w tym momencie stoję w miejscu, bo zastanawiam się, jak zapełnić tablicę typami rekordowymi.

3
 
var
  wsp : TWsp

begin
  // ...
  wsp.x := 1;
  wsp.y := 12312312;
  // ...
end.
0

Dzięki za odpowiedź, jeszcze jedno pytanie, może dosyć banalne, jak będzie wyglądała współrzędna n za pomocą typów? No bo muszę gdzieś pozostałe współrzędne przechować. Jakoś to z tablicą połączyć czy jak?

2
tab[i].x:=1;
tab[i].y:=12312312;

Polecam jakiś kurs przeczytać (po raz kolejny).

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