Pascal I.
01. A program szerkez...
01. Gyakorló feladatok
02. Változók használata
02. Gyakorló feladatok
03. A FOR ciklus
03. Gyakorló feladatok
04. Egymásba ágyazo...
04. Gyakorló feladatok
05. Karakterláncok ...
05. Gyakorló feladatok
06. Az IF feltételvizsgálat
06. Gyakorló feladatok
07. A CASE elágazás
07. Gyakorló feladatok
08. A WHILE..DO ciklus
08. Gyakorló feladatok
09. A REPEAT..UNTIL ...
09. Gyakorló feladatok
10. Tömbök (ARRAY ...
10. Gyakorló feladatok
11. Műveletek tömbökkel
11. Gyakorló feladatok
12. Kétdimenziós töm...
12. Gyakorló feladatok
13. Műveletek kétdime...
13. Gyakorló feladatok
|
Programozás 1 (Pascal)
13
Műveletek kétdimenziós tömbökkel
13.1 Legkisebb, legnagyobb elem megkeresése
Készítsünk
programot, amely egy 6x6-os kétdimenziós tömbbe kigenerál 10 és 70 közötti
véletlen számokat, majd kiírja a kigenerált tömböt. A program második része
keresse meg a tömb legkisebb és legnagyobb elemét, majd írja ki ezt a
képernyőre.
A tömb
kigenerálása - ahogy már megszoktuk - két egymásba ágyazott ciklus segítségével
lesz megvalósítva.
A
tömb legkisebb ill. legnagyobb elemét hasonlóan fogjuk megkeresni, mint az
egydimenziós tömbnél. Veszünk két változót - min, max, melyekbe a
keresés előtt beállítjuk az a[1,1] elem
értékét. Ez után végigmegyünk a tömb összes elemén (két egymásba ágyazott
ciklus segítségével), és ha találunk kisebb ill. nagyobb elemet, akkor ezt
megjegyezzük a min ill. max változókban. Végül a ciklusok lefutása
után kiírjuk a min és max változók értékét.
program Pelda32a;
var
a: array[1..6,1..6] of integer;
i,j,min,max:integer;
begin
{
tömb kigenerálása
}
randomize;
for i:=1 to 6 do
for j:=1 to 6 do a[i,j]:=random(61)+10;
{
tömb kiírása
}
for i:=1 to 6 do
begin
for j:=1 to 6 do write(a[i,j]:3);
writeln;
end;
{
min, max keresése
}
min:=a[1,1];
max:=a[1,1];
for i:=1 to 6 do
for j:=1 to 6 do
begin
if a[i,j]<min then min:=a[i,j];
if a[i,j]>max then max:=a[i,j];
end;
{
min, max kiírása
}
writeln('Legkisebb elem: ',min);
writeln('Legnagyobb elem: ',max);
end.
Próbáljuk meg módosítani az előző feladatot úgy, hogy
ne csak a maximum és minimum értékét írja ki, hanem azt is, hogy ezeket az
elemeket melyik sor melyik oszlopában találta meg (tehát a maximum és a minimum
tömbindexeit is).
Ehhez bevezetük
négy új változót: min_i, min_j, max_i, max_j,
melyekben mindig amikor változtatunk a min ill. max értékén,
megjegyezzük az éppen elmentett elem tömbindexeit. Programunk ezekkel a
módosításokkal így néz ki:
program
Pelda32b;
var
a: array[1..6,1..6] of integer;
i,j,min,max,min_i,min_j,max_i,max_j:integer;
begin
{
tömb kigenerálása
}
randomize;
for i:=1 to 6 do
for j:=1 to 6 do a[i,j]:=random(61)+10;
{
tömb kiírása
}
for i:=1 to 6 do
begin
for j:=1 to 6 do write(a[i,j]:3);
writeln;
end;
{
min, max keresése
}
min:=a[1,1];
min_i:=1;
min_j:=1;
max:=a[1,1];
max_i:=1;
max_j:=1;
for i:=1 to 6 do
for j:=1 to 6 do
begin
if a[i,j]<min then begin
min:=a[i,j];
min_i:=i;
min_j:=j;
end;
if a[i,j]>max then begin
max:=a[i,j];
max_i:=i;
max_j:=j;
end;
end;
{
min, max kiírása
}
writeln('Legkisebb elem: ',min,' (',min_i,'. sor ',min_j,'. oszlop)');
writeln('Legnagyobb elem: ',max,' (',max_i,'. sor ',max_j,'. oszlop)');
end.
13.2
Tömb tükrözése a függőleges tengelye szerint
Készítsünk
programot, amely egy 7x7-es kétdimenziós tömbbe kigenerál 100 és 999 közötti
véletlen számokat, majd tükrözi a tömböt a függőleges tengelye szerint. A
program írja ki az eredeti, majd a tükrözés utáni tömböt is.

Ehhez előbb a tömb első, majd a
második, harmadik, stb. sorait fogjuk tükrözni egymás után. Egy külső ciklus
fogja megadni hogy éppen melyik sor tükrözését végezzük. Ezen belül lesz egy
belső ciklus, amely az adott sort tükrözését végzi el – ez egy hasonló ciklus,
mint amilyent az egydimenziós tömb tükrözésénél használtunk.
Programunk
így néz ki:
program
Pelda33;
const n=7;
var
a: array[1..n,1..n] of integer;
i,j,x:integer;
begin
{
tömb kigenerálása
}
randomize;
for i:=1 to n do
for j:=1 to n do a[i,j]:=random(900)+100;
{
tömb kiírása
}
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:4);
writeln;
end;
{
tömb tükrözése
}
for i:=1 to n do
begin
{
egy sor tükrözése
}
for j:=1 to n div 2 do begin
x:=a[i,j];
a[i,j]:=a[i,n-j+1];
a[i,n-j+1]:=x;
end;
end;
{
tömb kiírása
}
writeln;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:4);
writeln;
end;
end.
|