Borland C/C++ mintapéldák tömbökre
description
Transcript of Borland C/C++ mintapéldák tömbökre
Borland C/C++ mintapéldáktö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; } for(i=0; i<M; i++) { 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(){
//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(){
//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(){
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(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'; printf("%s", str); return 0; }
8. példaPé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" }; } /* for */ } /* main */
9. példaPé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éldaPélda karaktertömb egyszerű másolására. Figyeljük meg, hogy a karaktertömb neve az első elem címével egyezik
meg! #include <stdio.h>
char tombbol [] = "Ezt a tombot masoljuk";Char tombbe[ 20 ];
main (){int i;
i = 0;while ( tombbol [ i ] != '\0' ){tombbe [ i } = tombbol [ i ];i++;
} /* while */tombbe[ i ] = '\0'; /* EOS generalasa */printf( "A masolando string: %s\n", tombbol );printf( "A masolt string : %s\n"; tombbe );
} /* main */
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) { int i; for(i=0; i<meret; i++) { 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); kiir(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) { int i; for(i=0; i<meret; i++) { 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); kiir(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])); } } for(i=0; i<N; i++) { for(j=0; j<N; j++) { printf("%d", tomb[i][j]); } } for(i=0; i<N; i++) { for(j=0; j<N; 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"); break; }• 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ék rendezé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"); for(i=0; i<5; i++)
{for(j=0; j<5; j++){ printf(" %2d",a[i][j]);}printf("\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 2main(){
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(i=0; i<N; i++){ 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ökre1.) 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 cso portban !
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ó ! ) Ezu tá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ó ! ) Ezu tá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ü rend szerbôl történô választás alapján a következô értékeket számítja ki :
1. egy tetszôleges sor átlaga2. egy tetszôleges oszlop átlaga3. valamennyi sor átlaga4. valamennyi oszlop átlaga5. 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á ala kítani a következôképpen : Az elsô jel a START legyen, ezt
három szóköz kö ves se. Ezután következzen a kódnak megfelelô jelsorozat
szóközökkel elválaszt va. Ezt a jelsorozatot kövesse három szóköz ill. a STOP
jel. Mindaddig "morzéz ni" 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 !