I. Egydimenziós tömb elemeinek rendezése 1. Adott egy egész számokból álló sorozat. Rendezzük növekvő sorrendbe az elemeit! Buborékrendezés. A tömb elejétől a vége felé haladva összehasonlítjuk a szomszédos elemeket. Amennyiben nem a kért sorrendben helyezkednek el, felcseréljük őket. A bejárás végén a legnagyobb elem a helyére, az-‐az a tömb végére kerül. A bejárást mindaddig ismételjük, míg egy végigfutás alkalmával egyetlen cserére sem kerül sor. Minden bejáráskor egy lépéssel hamarabb leállunk, mivel a rendezendő elemek száma bejárásonként eggyel kevesebb lesz. # include
using namespace std; int main() { int a[20],x; unsigned short i, n, v; bool csere; cout<<"n="; cin>>n; for (i=0;i>a[i]; } v=n-‐1; csere=true; while (csere) { csere=false; for (i=0; ia[i+1]) { x=a[i]; a[i]=a[i+1]; a[i+1]=x; csere=true; } v-‐-‐; } for (i=0; i
var a: array[1..20] of integer; x:integer; i,n,v:byte; csere:boolean; begin write('n=');readln(n); for i:=1 to n do begin write(i,'. elem'); readln(a[i]); end; v:=n-‐1;csere:=true; while csere do begin csere:=false; for i:=1 to v do if a[i]>a[i+1] then begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; csere:=true; end; dec(v); end; for i:=1 to n do write(a[i],' '); end.
2. Olvassunk be két egész számokból álló számsorozatot! Hozzunk létre a két sorozat elemeiből egy növekvő sorrendbe rendezett számsort! Összefésülés. Összehasonlítjuk az első tömb első elemét a második tömb első elemével. A kisebb értékű elemet átmásoljuk az új tömbbe. Továbblépünk abban a tömbben, amelyből átmásoltuk az elemet, majd ezt az elemet hasonlítjuk, a másik tömb változatlan elemével. Mindezt addig folytatjuk, amíg az egyik tömb elemei el nem fogynak. Ezután a másik tömb elemeit sorban átmásoljuk a harmadik tömbbe.
# include using namespace std; void beolvas(int a[], unsigned short int& n) { unsigned short int i; cout<<"elemek szama="; cin>>n; for (i=0;i>a[i]; } } int main() { int a[20], b[20], c[20]; unsigned short int n, m; beolvas(a, n); beolvas(b, m); unsigned short int i=0, j=0, l=0, p; while (i
type tomb=array[1..20] of integer; var a,b,c: tomb; n,m,i,j,l,p:byte; procedure beolvas(var a:tomb; var n:byte); var i:byte; begin write('elemek szama=');readln(n); for i:=1 to n do begin write(i,'. elem:');readln(a[i]); end; end; begin beolvas(a,n); beolvas(b,m); i:=1; j:=1; l:=0; while (i<=n) and (j<=m) do begin inc(l); if a[i]
for (p=j; p<m; p++) { c[l]=b[p]; l++; } for (p=i; p
for p:=j to m do begin inc(l); c[l]:=b[p]; end; for p:=i to n do begin inc(l); c[l]:=a[p]; end; for i:=1 to l do write(c[i],' '); end.
II. Kétdimenziós tömbök – megoldott feladatok 1. Írjatok Pascal/C++ programot, amely beolvas a billentyűzetről egy n (2≤n≤20) természetes számot, majd létrehoz egy n sorból és n oszlopból álló kétdimenziós tömböt, melynek elemeit a következőképpen adjuk meg: – a főátlón lévő elemek értéke 0 – az első oszlopban lévő elemek értéke, kivéve a főátlón találhatót, n lesz – a második oszlopban lévő elemek értéke, kivéve a főátlón találhatót, n-‐1 lesz ... – az utolsó oszlopban lévő elemek értéke, kivéve a főátlón találhatót, 1 lesz A program írja ki a kétdimenziós tömb elemeit a képernyőre, a tömb minden sorát a képernyő külön sorába, egy sor elemeit szóközzel elválasztva egymástól. Például: ha n=4 a képernyőn megjelenő kétdimenziós tömb: 0 3 2 1 4 0 2 1 4 3 0 1 4 3 2 0 Azoknál a feladatoknál, melyeknél a kétdimenziós tömböt nekünk kell feltöltenünk a sorok, illetve az oszlopok ismeretében, és a feladat szövegéből kiderül, hogy az elemek értéke függ az oszlop, vagy sorindextől, ajánlatos felírni egy példát és meghatározni egy összefüggést az elem értéke, a sor és oszlopindex között. Pl. (C++)
Pl. (Pascal)
0
1
2
3
1
2
3
4
0
0
3
2
1
1
0
3
2
1
1
4
0
2
1
2
4
0
2
1
2
4
3
0
1
3
4
3
0
1
3 4
3
2
0
4
4
3
2
0
a[0][0]=0;a[1][0]=n;a[2][0]=n;..,a[n-‐1][0]=n
a[1,1]=0;a[2,1]=n;a[3,1]=n;..,a[n,1]=n
a[0][1]=n-‐1;a[1][1]=0;a[2][1]=n-‐1;..,a[n-‐1][1]=n-‐1
a[1,2]=n-‐1;a[2,2]=0;a[3,2]=n-‐1;..,a[n,2]=n-‐1
….
….
a[0][n-‐1]=1;a[1][n-‐1]=1;a[2][n-‐1]=1;..,a[n-‐1][n-‐1]=0
a[1,n]=1;a[2,n]=1;a[3,n]=1;..,a[n,n]=0
⇓
⇓
a[i][j]=0; ha i=j;
a[i,j]=0; ha i=j;
a[i][j]=n-‐j, ha i!=j; i=0,n-‐1; j=0,n-‐1
a[i,j]=n-‐j+1, ha i<>j; i=1,n; j=1,n
# include using namespace std; int main () { unsigned short int a[20][20],i,j,n; cout<<"n=";cin>>n; for (i=0;i
var a: array[1..20,1..20] of integer; i,j,n:byte; begin write('n=');readln(n); for i:=1 to n do for j:=1 to n do if i=j then a[i,j]:=0 else a[i,j]:=n-‐j+1; for i:=1 to n do begin for j:=1 to n do write(a[i,j],' '); writeln; end; end.
2. Adott egy n soros és m oszlopos (1≤n≤50, 1≤m≤50), legfennebb kétjegyű egész számokat tartalmazó kétdimenziós tömb. Írjál Pascal/C++ programot, amely beolvassa a billentyűzetről az n és m értékeket, majd a tömb elemeit, és megfordítja minden oszlopban az elemek sorrendjét, mint a példában. A program írja a képernyőre n sorba az így kapott kétdimenziós tömb elemeit, az egy soron levő elemeket egy-‐egy szóközzel elválasztva. Példa: ha az n=4, m=3 értékeket és az alábbi kétdimenziós tömböt olvassuk be: 1 7 3 4 5 6 7 8 9 3 4 5 a képernyőre kiírt kétdimenziós tömböt: 3 4 5 7 8 9 4 5 6 1 7 3 Felcseréljük az első sor elemeit az utolsó sor elemeivel, a második sor elemeit az utolsó előtti sor elemeivel. Ezt addig ismételjük, amíg elérünk a középső sorig. # include using namespace std;
var a: array[1..50,1..50] of integer; i,j,n,m,x:byte;
int main () { unsigned short int a[50][50], i, j, n, x; cout<<"n=";cin>>n; cout<<"m=";cin>>m; for (i=0; i>a[i][j]; } for (i=0; i
begin write('n=');readln(n); write('m=');readln(m); for i:=1 to n do for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; for i:=1 to n div 2 do for j:=1 to m do begin x:=a[i,j]; a[i,j]:=a[n-‐i+1,j]; a[n-‐i+1,j]:=x; end; for i:=1 to n do begin for j:=1 to m do write(a[i,j],' '); writeln; end; end.