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

Odpowiedz Nowy wątek
2014-12-22 18:18
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 - 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.

Pozostało 580 znaków

2014-12-22 19:07
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.


edytowany 1x, ostatnio: furious programming, 2014-12-22 19:09

Pozostało 580 znaków

2014-12-22 19:50
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.

Pozostało 580 znaków

2014-12-22 19:58
3
 
var
  wsp : TWsp
 
begin
  // ...
  wsp.x := 1;
  wsp.y := 12312312;
  // ...
end.

Pozostało 580 znaków

2014-12-22 20:30
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?

Pozostało 580 znaków

2014-12-22 21:58
tab[i].x:=1;
tab[i].y:=12312312;

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Właśnie próbowałem znaleźć w internecie, jak to trzeba zrobić, bo z typami nie miałem nigdy styczności i jak próbowałem to robić na różne sposoby to najzwyczajniej miałem błąd kompilacji. Dzięki za pomoc - Tytanowyy 2014-12-22 22:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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