Programozás 1 (Pascal)
12
Kétdimenziós tömbök
12.1 Kétdimenziós tömbök
Az eddig
használt egydimenziós tömbökön túl használhatunk többdimenziós
tömböket is. Példaként nézzük meg, hogyan is képzelhetünk el egy 4x5 méretű
kétdimenziós tömböt és hogyan hivatkozhatunk a tömb elemeire:
Láthotjuk, hogy
az egyes elemekre az elem sorának és oszlopának megadásával hivatkozhatunk,
például a harmadik sor harmadik eleme: a[3,3].
Az ábrán
látható tömbben minden elem értéke 0. Mivel a többdimenziós tömbökkel egymásba ágyazott ciklusok
segítségével
dolgozunk (a külső ciklus adja meg a sorindexeket, a belső az
oszlopindexeket), a tömb összes elemének 0-ra állítása is két ilyen
egymásba ágyazott ciklus segítségével oldható meg:
program Pelda30a;
var
a:array[1..4,1..5] of integer; i,j:integer; begin for i:=1 to
4 do for j:=1 to 5 do
a[i,j]:=0; end.
A tömb
kiírása a képernyőre is két egymásba ágyazott ciklus segítségével lesz megoldva.
A belső ciklus fog kiírni egy sort, a külső ciklus pedig megadja a sorok számát.
Az előző példa kiírással kiegészítve:
program Pelda30b;
var
a:array[1..4,1..5] of integer; i,j:integer; begin for i:=1 to
4 do for j:=1 to
5 do a[i,j]:=0;
for i:=1 to 4 do
begin for j:=1 to
5 do write(a[i,j]:2);
writeln;
end; end.
Készítsünk
most egy programot, amely kigenerálja egy 10x10-es kétdimenziós tömbbe a 10-es
szorzótáblát, majd kiírja a képernyőre. A tömbünkbe tehát a következő értékeket
szeretnénk kigenerálni:
Ehhez a tömb
mindegyik elemébe berakjuk az oszlopindexének és a sorindexének a szorzatát.
Programunk így néz ki:
program Pelda31a;
var
t:array[1..10,1..10] of integer;
i,j:integer;
begin
{
kigenerálás...
}
for i:=1 to 10 do
for j:=1 to 10 do t[i,j]:=i*j;
{
kiírás...
}
for i:=1 to 10 do
begin
for j:=1 to 10 do write(t[i,j]:4);
writeln;
end;
end.
A fenti
programban a tömb kigenerálását és kiírását elvégezhetjük ugyanabban a ciklusban
is. Programunk ekkor így módosul:
program
Pelda31b;
var
t:array[1..10,1..10] of integer; i,j:integer; begin
{
kigenerálás
és kiírás ugyanabban a ciklusban
}
for i:=1 to 10 do
begin for j:=1 to 10 do
begin
t[i,j]:=i*j;
write(t[i,j]:4);
end;
writeln;
end; end.
|