Dvojrozmerné pole

Pri jednorozmernom poli sme videli, že prvky sú poukladané zasebou, každý prvok okrem prvého má predchodcu a každý okrem prvého má nasledovníka. Prvok poľa môže byť ľubovoľný (ale pre všetky prvky rovnaký) typ - prvkom poľa môže byť zas pole - čím vznikne 2-rozmerné pole . Prvky takejto štruktúry sú usporiadané do tabuľky, prístup ku položkám je cez poradové číslo riadku a stĺpca.
Jednorozmerné pole
Položka1
Položka2
...
Položka n
Všetky položky pola sú jednoduché hodnoty
Ak do každej položky takéhoto pola zapíšeme opäť pole o m prvkoch, získame tabuľku.
Dvojrozmerné pole
 Stĺpec
R
i
a
d
o
k
 123 ... m
1položka 11položka 12položka 13...položka 1m
2položka 11položka 22položka 23...položka 2m
. ...
npoložka n1položka n2položka n3...položka nm
Deklarovanie
Existuje viacero spôsobov ako vytvoriť dvojrozmerné pole:
(vo všetkých variantoch je výtvárané pole/tabuľka o 100 riadkoch a 3 stĺpcoch)
variant1
...
Var A: array[1..100, 1..3] of integer;
    B: array[1..100, 1..3] of integer;
		
variant2
...
Type pole=array[1..100, 1..3] of integer;
Var A: pole;
    B: pole;
		
variant3
...
Type riadok=array[1..3] of integer;
     pole=array[1..100] of riadok;
Var A: pole;
    B: pole;
    r: riadok;
		
Prvý spôsob je najstručnejší a preto sa najviac používa. (A:=B; zahlási chybu)
Druhý spôsob použijeme ak potrebujeme v podprogramoch vytvárať polia rovnakého typu (pre priradenie).
      (A:=B; tu je to v poriadku)
Tretí spôsob používame ak chceme priraďovať celé riadky do pomocných premenných (či už v hlavnom programe alebo aj v podprogramoch )
      (A:=B; je v poriadku)
      (r:=A[2]; je v poriadku)
Použitie
Prechod poľa
Na prechod poľa potrebujeme dva cykly vnorené
prechod poľa
...
const maxr=100;
      maxs=3;
type pocetriad=1..maxr;
     pocedtstl=1..maxs;
Var A: array[pocetriad, pocetstl] of integer;
    i: pocetriad;
	j: pocetstl;
Begin
    for i:=1 to maxr do
	  for j:=1 to maxs do
	  begin 
	  { napr. a[i,j]:=...
	    alebo write(a[i,j]} 
	  end;
End.
Pole ako parameter
Podobne ako jednorozmerné pole aj dvojrozmerné pole môže byť parametrom v podprograme. Tiež musí byť vytvorený názov typu poľa (deklarácia poľa podľa variantu 2 resp. 3). Všeobecne je odporúčané prenášať pole odkazom (pomocou Var), čo šetrí pamäť zásobníka a aj zrýchľuje volanie podprogramu.
Poznámka:
Narozdiel od jednorozmerného poľa dvojrozmerné pole nemôže byť otvorené (bez udania počtu prvkov)
(array of char);
Príklad:
Pole ako parameter
...
Procedure NaplnPole(r,s:integer; Var pole:Tpole)
Var i,j: integer;
Begin
for i:= 1 to r do 
     For j:= 1 to s do
	    pole[i,j]:=random(10);
End.

Function MaxPole(r,s:integer; Var pole:Tpole)
Var i,j,m: integer;
Begin
m:=pole[1,1];
for i:= 1 to r do 
     For j:= 1 to s do
	    if pole[i,j]>m then m:=pole[i,j];
MaxPole:=m;		
End.

V prvom podprograme, keďže pole chceme modifikovať je použitie Var nutnosťou. V druhom podprograme nie je Var nutnosťou ale z "technických" dôvodov odporúčané.
Typické úlohy
Výpis poľa
V nasledovnej ukážke sa prvky riadku zmestia na jeden riadok obrazovky a výpis poľa sa bude robiť po riadkoch.
výpis poľa
...
const maxr=100;
      maxs=3;
type pocetriad=1..maxr;
     pocedtstl=1..maxs;
Var A: array[pocetriad, pocetstl] of integer;
    i: pocetriad;
	j: pocetstl;
Begin
    for i:=1 to maxr do
	begin
	  for j:=1 to maxs do write(a[i,j];
	  writeln;     {po vypisani riadku odriadkujeme}
	end;  
End.
Naplnenie poľa, zmena poľa
Pole možno naplniť
  • hodnotami vypočítanými napr. z funkcie A[i,j]:= f(i,j)
  • náhodnými hodnotami
  • vstupom z klávesnice
  • vstupom zo súboru
Celé sa vykoná prechodom cez pole.
Úlohy na riešenie