Borland C/C++ mintapéldák tömbökre
1. példa Készíts egy 10 egész szám tárolására alkalmas tömböt. Töltsd fel az 1..10 értékekkel, majd írasd ki az elemeit
#include <stdio.h> #define N 10 #define M 10 int main() { int tomb[N]; int i; for(i=0; i<M; i++) { tomb[i]=i+1; } printf(" %d", tomb[i]); return 0;
2. példa Írjunk programot, ami beolvas 10 számot és fordított sorrendben kiírja azokat.
#include <stdio.h> #define MERET 10 int main(){ int szamok[MERET]; int c; for (c = 0 ; c<MERET ; c++){ printf("%d. szam : ", c+1); scanf("%d",&szamok[c]); /*lehetne*/ /*scanf("%d",szamok+c);/**/ /*is*/ } printf("A beirt szamok forditott sorrendben : \n"); for(c = MERET-1 ; c>=0 ; c--){ printf("%d\t",szamok[c]); printf("\n"); return 0;
3. példa Írjunk programot, amely egy integer típusú tömbből kiválasztja a legkisebb elemet
#include <stdio. h>. void main(). { #include <stdio.h> void main() { //a egy 10 elemû,integer tömb,inicializálva. int a[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; int i, min; min = a[0]; for(i=0; i<10; i++) { // Ha az aktuális minimum nagyobb a // tömbelemnél if( min > a[i] ) min = a[i] ; } printf("\nA legkisebb elem = %2d",min); }
4. példa Írjunk programot, amely egy integer típusú tömbből kiválasztja a legnagyobb elemét.
#include <stdio. h>. void main(). { #include <stdio.h> void main() { //a egy 10 elemû,integer tömb,inicializálva. int a[10] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; int i, max; max = a[0]; for(i=0; i<10; i++) { // Ha az aktuális minimum nagyobb a // tömbelemnél if( max < a[i] ) max = a[i] ; } printf("\nA legnagyobb elem = %2d",min); }
5. példa Írjunk programot, amely két double típusú tömbbe beolvas értékeket és utána összeadja a tömbök elemeit elemhelyesen.
#include <stdio. h>. #include <conio. h>. main(). { #include <stdio.h> #include <conio.h> main() { double a[3][3], b[3][3], c[3][3]; int i, j; for(i=0; i<3; i++) // Beolvasás az a mátrixba { for(j=0; j<3; j++) { printf("A[%d][%d] = ",i,j) ; scanf("%lf",&a[i][j]) ; } } printf("\n-------------------------------\n\n");
for(i=0; i<3; i++). // Beolvasás a b mátrixba. { for(i=0; i<3; i++) // Beolvasás a b mátrixba { for(j=0; j<3; j++) { printf("B[%d][%d] = ",i,j) ; scanf("%lf",&b[i][j]) ; } } printf("\n-------------------------------\n\n"); for(i=0; i<3; i++) // A c = a + b képzése { for(j=0; j<3; j++) c[i][j] = a[i][j] + b[i][j]; } for(i=0; i<3; i++) // A c mátrix kiiratása { for(j=0; j<3; j++) printf("%8.2lf%c", c[i][j],( ((j+1)%3 == 0) '\n' : ' ') ); } getch(); }
6. példa Deklarálj egy megfelelő hosszúságú karaktertömböt, majd írd bele a "Hello Vilag!" szöveget! Írasd ki az str értékét kétféleképpen!
#include <stdio.h> #include <string.h> int main() { /* char str[] = "Hello Vilag!" */ /* azért nem így írtam, hogy használjuk a string.h-t" */ char str[20]; strcpy(str, "Hello Vilag!"); printf("%s\n", str); return 0; }
7. példa Deklarálj egy megfelelő hosszúságú karaktertömböt, majd írd bele a "Hello Vilag!" szöveget! Írasd ki az str értékét kétféleképpen! Módosítsd a programot úgy, hogy a következő sorba csak a "Hello" szöveget írja ki!
#include <stdio.h> #include <string.h> int main() { char str[20]; strcpy(str, "Hello Vilag!"); printf("%s", str); str[5]='\0'; return 0; }
8. példa Példa kétdimenziós tömb definíálásra futásidőben történő előkészítése és felhasználása. #include <stdio.h> #define OSZLOP 6 #define SOR 8 int arr[ OSZLOP ][ SOR ]; /* tömbdefiníció */ mainQ { int i, j; /* indexváltozók */ for { i = 0; i < OSZLOP; i++ ) for { j = 0; j < SOR; j++ ) arr{ i ][ j ] = i * j; } /* for */ for ( i = 0; i < OSZLOP; i++ ) { /* tömb felhasználása */ printf( "arr[ %d ][*}:\t", i ); for { j = 0; j < SOR; j++ ) printf ( "%5d", arrI 1 ]\ j ] ); } /* for */ printf ( "\n" }; } /* main */
9. példa Példa string beolvasására karakteres tömbbé 9. példa Példa string beolvasására karakteres tömbbé. Mire való és melyik a string vége (EOS) karakter? Hogyan adunk karaktertömbnek kezdeti értéket? #include <stdio.h>. char szoveg[ 100 ] = "Ez a kezdeti szoveg"; main() { int i, meret; char c; printf("'%s'\n", &szoveg[ 0 ]); printf( "Uss be egy uj szoveget ENTER-el lezarva: " ); for(i=0; (c = getchar()) != EOF && c != '\n'; i++ ) szoveg[ i ] = c; } /* for */ szoveg[ i ] = 0; /* EOS generalasa */ for(i = 0,meret = 0;szoveg[1] != 0;i++) meret++; printf( "Az uj szoveg hossza = %d\n", meret ); } /* main */
10. példa Példa karaktertömb egyszerű másolására 10. példa Példa karaktertömb egyszerű másolására. Figyeljük meg, hogy a karaktertömb neve az első elem címével egyezik meg!
11. példa Írj egy függvényt, ami egy egész tömböt kap paraméterül és lecseréli benne az elemeket az abszolút értékükre. A tömb kiírását szintén függvény végezze!
#include <stdio.h> #define N 10 void tombabs(int tomb[], int meret) { int i; for(i=0; i<meret; i++) { if(tomb[i]<0) { tomb[i] = -tomb[i]; } void kiir(int tomb[], int meret) { printf(" %d", tomb[i]); putchar('\n');
int main() { int i, T[N], e=1; for(i=0; i<N; i++) { T[i]=e; e *= -2; } kiir(T, N); tombabs(T, N); return 0;
12. példa Írj egy függvényt, ami egy egész tömböt kap paraméterül és lecseréli benne az elemeket az abszolút értékükre. A tömb kiírását szintén függvény végezze!
#include <stdio.h> #define N 10 void tombabs(int tomb[], int meret) { int i; for(i=0; i<meret; i++) { if(tomb[i]<0) { tomb[i] = -tomb[i]; } void kiir(int tomb[], int meret) { printf(" %d", tomb[i]); putchar('\n');
int main() { int i, T[N], e=1; for(i=0; i<N; i++) { T[i]=e; e *= -2; } kiir(T, N); tombabs(T, N); return 0;
13. példa Készíts egy 3x3-as mátrixot, töltsd fel elemekkel, majd írasd ki az elemeit sor illetve oszlopfolytonosan is!
#include <stdio.h> #define N 3 int main() { int tomb[N][N]; int i, j; for(i=0; i<N; i++) { for(j=0; j<N; j++) { scanf("%d", &(tomb[i][j])); } printf("%d", tomb[i][j]); printf("%d", tomb[j][i]); return 0;
fclose(be); ki = fopen("kettovel.txt","w"); if (ki == NULL) return 2; for( i = 0 ; i< c;i++){ if (tomb[i] % 2 == 0) fprintf(ki,"%d\t",tomb[i]); } fprintf(ki,"\n"); fclose(ki); return 0;
14. példa Írjunk programot, ami beolvas 10 számot és fordított sorrendben kiírja azokat.
#include <stdio.h> #define MERET 10 int main(){ int szamok[MERET]; int c; for (c = 0 ; c<MERET ; c++){ printf("%d. szam : ", c+1); scanf("%d",&szamok[c]); /*lehetne*/ /*scanf("%d",szamok+c);/**/ /*is*/ } printf("A beirt szamok forditott sorrendben : \n"); for(c = MERET-1 ; c>=0 ; c--){ printf("%d\t",szamok[c]); printf("\n"); return 0;
15. példa Írjunk programot, ami beolvas egy nevet és kiírja.
#include <stdio.h> int main(){ char nev[80]; printf("Neved : "); scanf("%s",&nev[0]); /*lehetne*/ /*scanf("%s",nev);/**/ /*is*/ printf("Hello %s !\n",nev); return 0; }
16. példa Írjunk programot, ami beolvassa egy dolgozat osztályzatait és közepes eredmény esetén kiírja, hogy ‘Tanuljon többet’, míg jeles esetén kiírja, hogy ‘Eleget készültél.’
#include <stdio.h> int main(){ enum osztalyzatok {elegtelen, elegseges, kozepes, jo, jeles}; enum osztalyzatok jegy; printf("Osztályzat : "); scanf("%d",&jegy); if (jegy < 1 || jegy > 5) return 1; switch (jegy){ case elegtelen : case elegseges : case kozepes : printf("Tanulj többet ! \n"); break; case jo : case jeles: printf("Eleget készültél ! \n"); } return 0;
17. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendeti maximum kiválasztás szerint.
void csere( int tomb[], int i, int j ) { int seged = tomb[ i ]; tomb[ i ] = tomb[ j ]; tomb[ j ] = seged; } void maxkival( int tomb[], int meret ) int j; for ( j = meret - 1; j > 0; --j ) int max = j, i; for ( i = 0; i < j; ++i ) if ( tomb[ i ] > tomb[ max ] ) max = i; csere( tomb, max, j );
18. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendeti minimum kiválasztás szerint.
void csere( int tomb[], int i, int j ) { int seged = tomb[ i ]; tomb[ i ] = tomb[ j ]; tomb[ j ] = seged; } void minkival( int tomb[], int meret ) int j; for ( j = 0; j < meret - 1; ++j ) int min = j, i; for ( i = j + 1; i < meret; ++i ) if ( tomb[ i ] < tomb[ min ] ) min = i; csere( tomb, min, j );
19. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendeti beszúrásos rendezés alapján
void beszurasos( int tomb[], int meret ) { int j; for ( j = 1; j < meret; ++j ) int kulcs = tomb[ j ], i = j - 1; while ( i >= 0 && tomb[ i ] > kulcs ) tomb[ i + 1 ] = tomb[ i ]; --i; } tomb[ i + 1 ] = kulcs;
20. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendezi buborék rendezés alapján.
void csere( int tomb[], int i, int j ) { int seged = tomb[ i ]; tomb[ i ] = tomb[ j ]; tomb[ j ] = seged; } void buborek1( int tomb[], int meret ) int i, j; for ( i = meret - 1; i > 0; --i ) for ( j = 0; j < i; ++j ) if ( tomb[ j + 1 ] < tomb[ j ] ) csere( tomb, j, j + 1 );
#define HAMIS 0 #define IGAZ ( !HAMIS ) void csere( int tomb[], int i, int j ) { int seged = tomb[ i ]; tomb[ i ] = tomb[ j ]; tomb[ j ] = seged; } void buborek2( int tomb[], int meret ) int i, j, voltcsere = IGAZ; for ( i = meret - 1; i > 0 && voltcsere; --i ) voltcsere = HAMIS; for ( j = 0; j < i; ++j ) if ( tomb[ j + 1 ] < tomb[ j ] ) csere( tomb, j, j + 1 ); voltcsere = IGAZ;
21. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendezi Shell rendezés alapján.
void shell( int tomb[], int meret ) { int lk[] = { 6, 3, 1 }; int lkindex; for ( lkindex = 0; lkindex < sizeof( lk ) / sizeof( int ); ++lkindex ) int lepeskoz = lk[ lkindex ]; int eltolas, j; for ( eltolas = 0; eltolas < lepeskoz; ++eltolas ) for ( j = lepeskoz + eltolas; j < meret; j += lepeskoz ) int i = j - lepeskoz; int kulcs = tomb[ j ]; while ( i >= 0 && tomb[ i ] > kulcs ) tomb[ i + lepeskoz ] = tomb[ i ]; i -= lepeskoz; } tomb[ i + lepeskoz ] = kulcs;
22. példa Írjunk olyan függvényt amely egy tömb elemeit sorbarendezi Shell rendezés alapján.
void csere( int tomb[], int i, int j ) { int seged = tomb[ i ]; tomb[ i ] = tomb[ j ]; tomb[ j ] = seged; } void gyors( int tomb[], int bal, int jobb ) if ( bal < jobb ) int also = bal, felso = jobb + 1, kulcs = tomb[ bal ]; for ( ; ; ) while ( ++also < felso && tomb[ also ] < kulcs ) ; while ( tomb[ --felso ] > kulcs ) if ( also >= felso ) break; csere( tomb, also, felso ); csere( tomb, felso, bal ); gyors( tomb, bal, felso - 1 ); gyors( tomb, felso + 1, jobb );
23. példa Írjunk olyan függvényt amely egy tömb elemei között lineárisan keres meg egy elemet.
int linearis( int tomb[], int meret, int ertek ) { int i; for ( i = 0; i < meret && tomb[ i ] < ertek; ++i ) ; return i < meret && tomb[ i ] == ertek ? i : -1; }
24. példa Írjunk olyan függvényt amely egy tömb elemei között binárians keres meg egy elemet.
int binaris( int tomb[], int meret, int ertek ) { int also = 0, felso = meret - 1; while ( also <= felso ) int kozepso = ( also + felso ) / 2; if ( tomb[ kozepso ] == ertek ) return kozepso; if ( tomb[ kozepso ] > ertek ) felso = kozepso - 1; else also = kozepso + 1; } return -1;
25. példa Írjunk olyan programot,amely a két 10 elemû, integer típusú tömböt a buborékrendezéssal rendezi.
#include <stdio.h> #include <conio.h> void main() { int x[10] = { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int y[10] = { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int i, j, csere, s; // Sima buborékrendezés clrscr(); for(i=0; i<10-1; i++) { for(j=0; j<10-i-1; j++) { if( x[j] > x[j+1] ) { s = x[j] ; x[j] = x[j+1] ; x[j+1] = s ; } printf("\nSima buborékrendezés, menetek száma: %d\n",i); for(i=0; i<10; i++) printf("%3d",x[i]); printf("\n");
26. példa Írjunk olyan programot, amely egy 5x5-ös mátrixot a fôátlójára tükrözi.
#include <stdio.h> #include <conio.h> void main() { int a[5][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15, 16,17,18,19,20, 21,22,23,24,25 }; int i,j,s; clrscr(); printf("\nEREDETI : "); printf("\n\n"); for(i=0; i<5; i++) { for(j=0; j<5; j++) { printf(" %2d",a[i][j]); } printf("\n"); // Most következik a mátrix tükrözése for(i=0; i<5; i++) { for(j=i; j<5; j++) s = a[j][i]; a[j][i] = a[i][j]; a[i][j] = s; printf("\nTÜKRÖZÖTT : ");printf("\n\n"); getch();
27. példa Írjunk olyan programot, amely egy 2x3 - as és egy 3x2 - es mátrixot összeszoroz.
#include <stdio.h> #include <conio.h> #define N 3 #define M 2 main() { int a[N][M] ={ 1, 2, 3, 4, 5, 6 }; int b[M][N] ={ 1, 2, 3, 4, 5, 6 long c[N][N]; int i, j, k; for(i=0; i<N; i++) { for(j=0; j<N; j++) { c[i][j]=0L; for(k=0; k<M; k++) { { c[i][j] += a[i][k]*b[k][j]; } clrscr(); for(j=0; j<N; j++) { printf("C[%d][%d] = %3ld%c",i,j,c[i][j], (j == N-1) ? '\n' : }' '); getch();
Gyakorló feladatok tömbökre 1.) Töltsünk fel egy 10 elemû integer vektort ! Ezután számítsuk ki a vektor ele- mek átlagát ! 2.) Határozzuk meg ugyanennek a vektornak a legnagyobb elemét ! 3.) Töltsünk fel két 10 elemû integer vektort ! Ezután határozzuk meg a két vektor összeg ill. különbség vektorát ! 4.) Számítsuk ki az elôbbi két vektor skalárszorzatát ! 5.) Egy 20 fôs csoport zárthelyi eredményeit kell kiértékelni. A pontszámhatárok a következôk : 0 - 15 elégtelen 16 - 25 elégséges 26 - 35 közepes 36 - 45 jó 46 - 50 jeles Az egyes zh. pontszámokat egy vektorba kell beolvasni, ki kell iratni az egyes zh-k osztályzatát, és meg kell állapítani, hogy hány elégtelen, elégséges ... volt a csoportban ! 6.) Töltsünk fel egy 5x5-ös integer mátrixot ! Ezután határozzuk meg mindegyik sorának legnagyobb ill. legkisebb elemét ! 7.) Töltsünk fel egy 5x5-ös double mátrixot ! ( Inicializálással is megoldható ! ) Ezután határozzuk meg sor ill. oszlop összegeit. Az összegeket megfelelô méretü és típusú tömbökben tároljuk és irassuk is ki ! 8.) Töltsünk fel két 5x5-ös double mátrixot ! ( Inicializálással is megoldható ! ) Ezután képezzük a. különbség mátrixot és irassuk ki ! 9.) Olvassunk be egy nxn - es mátrixot ! Készítsünk programot amely egy menü rendszerbôl történô választás alapján a következô értékeket számítja ki : 1. egy tetszôleges sor átlaga 2. egy tetszôleges oszlop átlaga 3. valamennyi sor átlaga 4. valamennyi oszlop átlaga 5. az összes elem átlaga
10. feladat: Irjunk egy egyszerüsített morze jeleket elôállító programot ! A program inputja egy négyjegyü egész szám ! Le is kell ellenôrizni, hogy valóban négyjegyü-e ! A számot elôször átkódoljuk úgy, hogy az egyeseket a százasokkal ill. a tízeseket az ezresekkel cseréljük fel. Az így kapott számot kell morze jelek sorozatává alakítani a következôképpen : Az elsô jel a START legyen, ezt három szóköz kövesse. Ezután következzen a kódnak megfelelô jelsorozat szóközökkel elválasztva. Ezt a jelsorozatot kövesse három szóköz ill. a STOP jel. Mindaddig "morzézni" kell amíg az 'i' billentyüt nyomjuk le a program által feltett kérdésre. A szükséges morze kódok a következôk : START = -.-.- 1 = .---- 2 = ..--- 3 = ...-- 4 = ....- 5 = ..... 6 = -.... 7 = --... 8 = ---.. 9 = ----. 0 = ----- STOP = .-.-.
11. feladat: Irjunk programot, amely beolvas egy karakter típusú vektorba egy számot. A szám max. 6 db egész jegyet, tizedespontot és két tizedesjegyet tartalmaz. Igazítsuk a számot jobbra úgy, hogy a formátuma 9.2 legyen !