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<iostream> int main() int a[20],x; unsigned short i, n, v; bool csere; cout<<"n="; cin>>n; cout<<i<<". elem:"; cin>>a[i]; v=n- 1; csere=true; while (csere) csere=false; for (i=0; i<v; i++) if (a[i]>a[i+1]) x=a[i]; a[i]=a[i+1]; a[i+1]=x; csere=true; v- - ; for (i=0; i<n; i++) cout<<a[i]<<" "; var a: array[1..20] of integer; x:integer; i,n,v:byte; csere:boolean; write(i,'. elem'); readln(a[i]); v:=n- 1;csere:=true; while csere do csere:=false; for i:=1 to v do if a[i]>a[i+1] then x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; csere:=true; dec(v); write(a[i],' ');
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<iostream> void beolvas(int a[], unsigned short int& n) unsigned short int i; cout<<"elemek szama="; cin>>n; cout<<i<<". elem:"; cin>>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<n && j<m) if (a[i]<b[j]) c[l]=a[i]; i++; c[l]=b[j]; j++; 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; write('elemek szama=');readln(n); write(i,'. elem:');readln(a[i]); beolvas(a,n); beolvas(b,m); i:=1; j:=1; l:=0; while (i<=n) and (j<=m) do if a[i]<b[j] then c[l]:=a[i]; inc(i); end c[l]:=b[j]; inc(j);
for (p=j; p<m; p++) c[l]=b[p]; for (p=i; p<n; p++) c[l]=a[p]; for (i=0; i<l; i++) cout<<c[i]<<" "; for p:=j to m do c[l]:=b[p]; for p:=i to n do c[l]:=a[p]; for i:=1 to l do write(c[i],' '); 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++) 0 1 2 3 0 0 3 2 1 1 4 0 2 1 2 4 3 0 1 3 4 3 2 0 a[0][0]=0;a[1][0]=n;a[2][0]=n;..,a[n- 1][0]=n a[0][1]=n- 1;a[1][1]=0;a[2][1]=n- 1;..,a[n- 1][1]=n- 1. Pl. (Pascal) 1 2 3 4 1 0 3 2 1 2 4 0 2 1 3 4 3 0 1 4 4 3 2 0 a[1,1]=0;a[2,1]=n;a[3,1]=n;..,a[n,1]=n 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[i][j]=0; ha i=j; a[i][j]=n- j, ha i!=j; i=0,n- 1; j=0,n- 1 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]=n- j+1, ha i<>j; i=1,n; j=1,n # include <iostream> int main () unsigned short int a[20][20],i,j,n; cout<<"n=";cin>>n; for (j=0;j<n;j++) if (i==j) a[i][j]=0; a[i][j]=n- j; for (j=0;j<n;j++) cout<<a[i][j]<<" "; cout<<endl; var a: array[1..20,1..20] of integer; i,j,n:byte; for j:=1 to n do if i=j then a[i,j]:=0 a[i,j]:=n- j+1; for j:=1 to n do write(a[i,j],' '); writeln; 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 <iostream> 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<n; i++) cout<<"a["<<i<<","<<j<<"]="; cin>>a[i][j]; for (i=0; i<n/2; i++) x=a[i][j]; a[i][j]=a[n- i- 1][j]; a[n- i- 1][j]=x; cout<<a[i][j]<<" "; cout<<endl; write('m=');readln(m); for j:=1 to m do write('a[',i,',',j,']='); readln(a[i,j]); for i:=1 to n div 2 do for j:=1 to m do x:=a[i,j]; a[i,j]:=a[n- i+1,j]; a[n- i+1,j]:=x; for j:=1 to m do write(a[i,j],' '); writeln;