1. Beolvasunk két egész számot. A CSEREL eljárás (függvény) segítségével felcseréljük a két változó tartalmát, majd kiírjuk őket.

Hasonló dokumentumok
/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Verem Verem mutató 01

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Programozás I. gyakorlat

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozás alapjai 9.Gy: Struktúra 2.

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás 5. Dr. Iványi Péter

Megoldott programozási feladatok standard C-ben

1. Írjunk programot mely beolvas két számot és ellenőrzi hogy mindkét szám zérus-e:

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás 6. Dr. Iványi Péter

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

1. Alapok. Programozás II

Programozás alapjai 8.Gy: Program struktúra

10. gyakorlat Tömb, mint függvény argumentum

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Maximum kiválasztás tömbben

Programozás alapjai 3.Gy: C elágazások, ciklusok P R O

Programozas 1. Strukturak, mutatok

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Programozás I gyakorlat. 10. Stringek, mutatók

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

7/8. gyakorlat Karaktertömbök és sztringkezelés

Programozás II. 2. Dr. Iványi Péter

5. Gyakorlat. struct diak {

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Stack Vezérlés szerkezet Adat 2.

Programozás C és C++ -ban

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Programozás I. 5. Előadás: Függvények

INFORMATIKA tétel 2017

3. Osztályok II. Programozás II

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás I. gyakorlat

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

5. gyakorlat. Konstansok Tömbök Stringek

INFORMATIKA tétel 2018

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Informatika terméktervezőknek

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

int tokeletes(int szam) { int i,oszto=0; for(i=1; i<szam; i++) { if(szam %i == 0) { oszto+=i; }

Programozás I gyakorlat

8. gyakorlat Pointerek, dinamikus memóriakezelés

A C programozási nyelv VI. Parancssori argumentumok File kezelés

INFORMATIKA javítókulcs 2016

Programozás I gyakorlat

Szövegek C++ -ban, a string osztály

Programozás I gyakorlat

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Példák tematikus csoportosításban

Programozás 1. Dr. Iványi Péter

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Felvételi tematika INFORMATIKA

Megoldott programozási feladatok standard C-ben

Programozás II. 4. Dr. Iványi Péter

Vezérlési szerkezetek

értékel függvény: rátermettségi függvény (tness function)

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Információs Technológia

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

Mintavételes szabályozás mikrovezérlő segítségével

Információs Technológia

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Java II. I A Java programozási nyelv alapelemei

Programozás C++ -ban 2007/1

malloc free malloc free int sum(int a[4]) { return a[0] + a[1] + a[2] + a[3]; }

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

A programozás alapjai 1 Rekurzió

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozás I gyakorlat. 5. Struktúrák

Átírás:

1. Beolvasunk két egész számot. A CSEREL eljárás (függvény) segítségével felcseréljük a két változó tartalmát, majd kiírjuk őket. void cserel(int *,int *); /* cserel prototípusa */ int main(void) int a,b; printf("\nkérem a két számot"); scanf("%d%d",&a,&b); cserel(&a,&b); /* cserel hívása */ printf("\n\nmegcserélve %d - %d",a,b); void cserel(int *x,int *y) /* cserel definíciója */ int s; s=*x; *x = *y; *y = s;

2. Írjunk beolvasó rutint egy egész és egy valós szám beolvasására! A beolvasást egy függvény végezze el! A főprogramban írassuk ki a beolvasott számokat! void beolv(int *a, float *b); int main(void) int i; float f; beolv(&i,&f); printf("a beolvasott egész: %d, valós: %f",i,f); void beolv(int *a, float *b) printf("kérem az egész számot!"); scanf("%d",a); printf("kérem a valós számot!"); scanf("%f",b);

3. Készítsen függvényt, amely ellenőrzött adat-bevitelt valósít meg egész típusú adatokra. A program olvasson be egy egész számot, de csak bizonyos határok közötti értéket fogadjunk el. int egesz_bevitel (int, int, char *); int main(void) int n; /* string deklarálás kezdeti értékadással */ char csop_str [] = "Kérem a csoport létszámát :"; n = egesz_bevitel (1, 20, csop_str); printf ("\na csoportlétszám: %d", n); int egesz_bevitel (int ah, int fh, char *szoveg) int adat; do puts (szoveg); scanf ("%d", &adat); while (adat < ah adat > fh); return adat;

4. Készítsen függvényt, amely egy tetszőleges stringben (pl. névben) ellenőrzi, hogy szerepel-e abban a dr, Dr vagy DR karakter-sorozat. #include <string.h> int str_mi (char [], int *); int main (void) char nev [31]; int dr_mutat; /* a dr poziciója a névben */ printf ("\nkérem a nevet: "); gets (nev); if (str_mi (nev, &dr_mutat)) printf ("\na dr poziciója a névben: %d", dr_mutat); else printf ("\nnincs dr a névben."); int str_mi (char szoveg [], int *pozicio) int i=0, str_hossz, van = 0; str_hossz = strlen (szoveg); while (i < str_hossz-1 && van == 0) if ( (szoveg [i] == 'd' szoveg [i] == 'D') && (szoveg [i+1] == 'r' szoveg [i+1] == 'R')) van++; *pozicio = i; i++; return van;

5. Készítsünk függvényt az nxm-es, valós típusú adatokat tartalmazó mátrix elemeinek beolvasására, egy másik függvényt az elemek táblázatos formában történő kiíratására. A mátrix statikusan deklarált. void f_mx_be (float *, int, int); void f_mx_ki (float *, int, int); int egesz_bevitel (int, int, char *); int main(void) const max_oszlop = 10; const max_sor = 10; char bes [] = "Kérem a sorok aktuális számát:"; char beo [] = "Kérem az oszlopok aktuális számát:"; float eredmeny_tablazat[max_sor][max_oszlop]; /* a táblázat aktuális sor, illetve oszlop-száma */ int sor, oszlop; oszlop = egesz_bevitel (1, max_oszlop, beo); sor = egesz_bevitel (1, max_sor, bes); /* a statikusan definialt matrix csak vektorkent adhato at fuggvenynek */ f_mx_be (&eredmeny_tablazat[0][0], sor, oszlop); f_mx_ki (&eredmeny_tablazat[0][0], sor, oszlop); int egesz_bevitel (int ah, int fh, char * szoveg) int adat; do printf ("%s",szoveg); scanf ("%d", &adat); while (adat < ah adat > fh); return adat; /* a függvény float típusú elemeket tartalmazó, sor sorból és oszlop oszlopból álló mátrix elemeinek beolvasását végzi el. */ void f_mx_be (float *mx, int sor, int oszl) int i, j; for(i=0; i<sor; i++)

printf ("\nkérem az %d. sor elemeit:", i+1); for(j = 0; j < oszl; j++) /* i-dik sor j-dik elem beolvasása */ scanf ("%f", mx + i * oszl + j); /* a függvény float típusú elemeket tartalmazó, sor sorból és oszlop oszlopból álló mátrix elemeinek kiíratását végzi el. */ void f_mx_ki (float *mx, int sor, int oszl) int i, j; printf ("\na TÁBLÁZAT:\n"); for(i=0; i<sor; i++) /* soremelés minden táblázatsor el tt */ printf ("\n"); for (j = 0; j < oszl; j++) /* i-dik sor j-dik elem kiírása */ printf ("%10.2f", *(mx + i * oszl + j));

6. Oldjuk meg az előző feladatot dinamikusan foglalt mátrix-al. #include <stdlib.h> void f_mx_be (float *, int, int); void f_mx_ki (float *, int, int); int egesz_bevitel (int, int, char *); float **alloc_tomb(int sor, int oszlop); int main(void) const max_oszlop = 10; const max_sor = 10; char bes [] = "Kérem a sorok aktuális számát:"; char beo [] = "Kérem az oszlopok aktuális számát:"; float **eredmeny_tablazat; /* a táblázat aktuális sor, illetve oszlop-száma */ int sor, oszlop; oszlop = egesz_bevitel (1, max_oszlop, beo); sor = egesz_bevitel (1, max_sor, bes); eredmeny_tablazat = alloc_tomb(sor, oszlop); f_mx_be(eredmeny_tablazat, sor, oszlop); f_mx_ki(eredmeny_tablazat, sor, oszlop); float **alloc_tomb(int sor, int oszlop) float **p; int j; p = (float **)calloc(sor, sizeof(float *)); for(j = 0; j < sor; j++) p[j] = (float *)calloc(oszlop, sizeof(float)); return p; int egesz_bevitel (int ah, int fh, char *szoveg) int adat; do printf ("%s",szoveg);

scanf ("%d", &adat); while (adat < ah adat > fh); return adat; void f_mx_be (float **mx, int sor, int oszl) int i, j; for(i=0; i<sor; i++) printf ("\nkérem az %d. sor elemeit:", i+1); for(j = 0; j < oszl; j++) /* i-dik sor j-dik elem beolvasása */ scanf ("%f", &(mx[i][j])); void f_mx_ki (float **mx, int sor, int oszl) int i, j; printf ("\na TÁBLÁZAT:\n"); for(i=0; i<sor; i++) /* soremelés minden táblázatsor el tt */ printf ("\n"); for (j = 0; j < oszl; j++) /* i-dik sor j-dik elem kiírása */ printf ("%10.2f", mx[i][j]);

7. Irjunk programot, amely beolvas egy long értéket, és a long változó négy byte-ját rendre egy-egy karakteres típusú változóban helyezi el! int main() char a, b, c, d, *x; long l; printf("\nkérem a long változó értékét : ") ; scanf("%ld",&l); x = (char *) &l ; printf("\nx = %p", x ); a = *(x+0) ; b = *(x+1) ; c = *(x+2) ; d = *(x+3) ; printf("\nl = %ld",l) ; printf("\na = %c", a ); printf("\nb = %c", b ); printf("\nc = %c", c ); printf("\nd = %c", d );

8. Írjon programot melyben definiálunk egy új struktúrát. A struktúra elemei egy egész szám, egy valós szám és egy karakter. A program töltse fel értékkel a struktúra elemeit, majd nyomtassa ki azokat. #include <stdlib.h> int main() /* definiáljuk a struktúrát és rögtön egy változó típusa is lesz*/ struct valami int egesz; double valos; char karakter; elso; /* adjunk értékeket */ elso.egesz = 1; elso.valos = 2.2; elso.karakter = '3'; /* nyomtassuk ki az értékeket */ printf("egesz = %d : valos = %lf : karakter = %c", elso.egesz, elso.valos, elso.karakter);

9. Írjon programot melyben definiálunk egy új struktúrát. A struktúra elemei egy egész szám, egy valós szám és egy karakter. A program töltse fel értékkel a struktúra elemeit, majd másoljuk át egy másik struktúrába az értékeket és nyomtassa ki az új struktúrát. #include <stdlib.h> int main() /* definiáljuk a struktúrát és rögtön egy változó típusa is lesz*/ struct valami int egesz; double valos; char karakter; elso; struct valami masodik; /* adjunk értékeket */ elso.egesz = 1; elso.valos = 2.2; elso.karakter = '3'; /* struktúrák esetén egyszerű a másolás, csak egy értékadást kell végrehajtani */ masodik = elso; /* nyomtassuk ki a 'masodik' értékeit */ printf("egesz = %d : valos = %lf : karakter = %c", masodik.egesz, masodik.valos, masodik.karakter);

10. Írjon programot melyben definiálunk egy új struktúrát. A struktúra elemei egy egész szám, egy valós szám és egy karakter. A program töltse fel értékkel a struktúra elemeit, majd hívjunk meg egy függvényt ezzel a struktúrával. A függvényen belül változtassuk meg a struktúra értékeit. A függvénynek legyen visszatérési értéke is mely egy struktúra lesz. (Azt kell tapasztalnunk, hogy ahogy struktúrát lehet másolni is, úgy a függvény visszatérsi értékként is használható.) #include <stdlib.h> /* definiáljuk a struktúrát globálisan */ struct valami int egesz; double valos; char karakter; ; /* elso : lokális változó lesz */ struct valami fvg(struct valami elso) elso.egesz = elso.egesz + 2; elso.valos = elso.valos + 2.2; elso.karakter = elso.karakter + 2; return elso; int main() struct valami elso, masodik; /* adjunk értékeket */ elso.egesz = 1; elso.valos = 2.2; elso.karakter = '3'; /* látni fogjuk, hogy elso értékei érintetlenek maradnak */ masodik = fvg(elso); /* nyomtassuk ki az 'elso' értékeit */ printf("egesz = %d : valos = %lf : karakter = %c", elso.egesz, elso.valos, elso.karakter); /* nyomtassuk ki a 'masodik' értékeit */ printf("egesz = %d : valos = %lf : karakter = %c", masodik.egesz, masodik.valos, masodik.karakter);

11. Írjon programot melyben definiálunk egy új struktúrát. A struktúra elemei egy egész szám, egy valós szám és egy karakter. A program töltse fel értékkel a struktúra elemeit, majd hívjunk meg egy függvényt melynek egy argumentuma van egy struktúra mutató. A függvényen belül változtassuk meg a struktúra értékeit. #include <stdlib.h> /* definiáljuk a struktúrát globálisan */ struct valami int egesz; double valos; char karakter; ; /* elso : egy mutató, így valójában a globalis változót módosítjuk */ void fvg(struct valami *elso) elso->egesz = elso->egesz + 2; elso->valos = elso->valos + 2.2; elso->karakter = elso->karakter + 2; int main() struct valami elso; /* adjunk értékeket */ elso.egesz = 1; elso.valos = 2.2; elso.karakter = '3'; /* látni fogjuk, hogy elso értékei módosulnak */ fvg(&elso); /* nyomtassuk ki az 'elso' értékeit */ printf("egesz = %d : valos = %lf : karakter = %c", elso.egesz, elso.valos, elso.karakter);

12. Egy cég dolgozóinak fizetését kell meghatározni. Írjon programot mely a következőket teszi: Kérje be egy cégnél dolgozó emberek adatait o Először azt hogy hány ember dolgozik a cégnél. o Maximum 10 személy. o Ha a felhasználó többet akar megadni, ne engedjük. o Olvassa be a személyek adatait. Egy személy adatait tároljuk egy struktúrában. A struktúrának az alábbi elemei vannak: Dolgozó személyi száma (egész szám) Dolgozó neve Ledolgozott órák száma (egész szám) Kérje be az alapóra árát és a túlóra árát. A beolvasás után nyomtasson ki egy listát o Egy sorba a dolgozó nevét és fizetését o A fizetést az alábbi módon lehet kiszámolni fizetes = alapórabér * órák száma 200-ig + túlórabér * 200 óra után struct dolgozo int szemelyi_szam; char nev[50]; int munka_ora; ; int main() struct dolgozo ember[10]; int nember; int i; double alapora; double tulora; double fizetes; do printf("\ndolgozok szama [max 10]: "); scanf("%d", &nember); while(nember > 10); for(i = 0; i < nember; i++) printf("\ndolgozo neve: "); scanf("%s", ember[i].nev); printf("\ndolgozo szemelyi szama: "); scanf("%d", &(ember[i].szemelyi_szam)); printf("\nledolgozott ora: ");

scanf("%d", &(ember[i].munka_ora)); printf("\nalaporak ara: "); scanf("%lf", &alapora); printf("\ntulorak ara: "); scanf("%lf", &tulora); printf("\nfizetes Dolgozo"); for(i = 0; i < nember; i++) if(ember[i].munka_ora < 200) fizetes = ember[i].munka_ora * alapora; else fizetes = 200 * alapora + (ember[i].munka_ora - 200) * tulora; printf("\n%7.2f %s", fizetes, ember[i].nev);

13. Oldjuk meg az előző feladatot típus deklarálással /* ez lesz az uj tipus */ typedef struct int szemelyi_szam; char nev[50]; int munka_ora; dolgozo; int main() dolgozo ember[10]; /* lathato hogy uj tipus */ int nember; int i; double alapora; double tulora; double fizetes; do printf("\ndolgozok szama [max 10]: "); scanf("%d", &nember); while(nember > 10); for(i = 0; i < nember; i++) /* beolvasas ugyanaz mint elobb */ printf("\ndolgozo neve: "); scanf("%s", ember[i].nev); printf("\ndolgozo szemelyi szama: "); scanf("%d", &(ember[i].szemelyi_szam)); printf("\nledolgozott ora: "); scanf("%d", &(ember[i].munka_ora)); printf("\nalaporak ara: "); scanf("%lf", &alapora); printf("\ntulorak ara: "); scanf("%lf", &tulora); printf("\nfizetes Dolgozo"); for(i = 0; i < nember; i++) if(ember[i].munka_ora < 200)

fizetes = ember[i].munka_ora * alapora; else fizetes = 200 * alapora + (ember[i].munka_ora - 200) * tulora; printf("\n%7.2f %s", fizetes, ember[i].nev);

14. Oldjuk meg az előző feladatot dinamikus memória foglalással #include <stdlib.h> /* memoria foglalashoz */ typedef struct int szemelyi_szam; char nev[50]; int munka_ora; dolgozo; int main() dolgozo *ember; /* vektok lesz */ int nember; int i; double alapora; double tulora; double fizetes; do printf("\ndolgozok szama [max 10]: "); scanf("%d", &nember); while(nember > 10); /* csak annyi helyet foglalunk amennyi kell */ ember = (dolgozo *)calloc(nember, sizeof(dolgozo)); if(ember == NULL) printf("nem lehet memoriat allokalni\n"); exit(1); for(i = 0; i < nember; i++) printf("\ndolgozo neve: "); scanf("%s", ember[i].nev); printf("\ndolgozo szemelyi szama: "); scanf("%d", &(ember[i].szemelyi_szam)); printf("\nledolgozott ora: "); scanf("%d", &(ember[i].munka_ora)); printf("\nalaporak ara: "); scanf("%lf", &alapora); printf("\ntulorak ara: ");

scanf("%lf", &tulora); printf("\nfizetes Dolgozo"); for(i = 0; i < nember; i++) if(ember[i].munka_ora < 200) fizetes = ember[i].munka_ora * alapora; else fizetes = 200 * alapora + (ember[i].munka_ora - 200) * tulora; printf("\n%7.2f %s", fizetes, ember[i].nev);

15. Egy kórház szülészeti osztályának statisztikáját kell elkészíteni. Írjon programot mely a következőket teszi: Kérje be a gyermekek adatait o Először a gyerekek számát. o Maximum 12 gyerek. o Ha a felhasználó többet akar megadni, ne engedjük. o Olvassa be az adatokat. Egy gyerek adatait tároljuk egy struktúrában. A struktúrának az alábbi elemei vannak: Azonosító (egész szám) Csecsemő neve Koraszülött-e Születési súlya (valós szám) A beolvasás után a program határozza meg a fiúk és lányok számát, átlagos születési súlyukat és hány koraszülött fiú illetve lány született. Ezeket az adatokat nyomtassuk ki. #include <stdlib.h> typedef struct char nev[50]; int azonosito; int koraszulott; double suly; int neme; csecsemo; int main() csecsemo gyerek[12]; int ngyerek; int i; int nfiu = 0; int nlany = 0; double atlag_suly = 0.0; int nkorafiu = 0; int nkoralany = 0; do printf("\ngyerekek szama [max 12]: "); scanf("%d", &ngyerek); while(ngyerek > 12); for(i = 0; i < ngyerek; i++) printf("\ncsecsemo neve: ");

scanf("%s", gyerek[i].nev); printf("\ncsecsemo azonosito szama: "); scanf("%d", &(gyerek[i].azonosito)); /* ezt akar ellenorizhetjuk is, hogy 0 vagy 1 a beadott adat */ printf("\nkoraszulott [1/0]: "); scanf("%d", &(gyerek[i].koraszulott)); printf("\nsulya: "); scanf("%lf", &(gyerek[i].suly)); printf("\nneme [fiu = 0, lany = 1]: "); scanf("%d", &(gyerek[i].neme)); for(i = 0; i < ngyerek; i++) atlag_suly += gyerek[i].suly; if(gyerek[i].neme == 0) nfiu++; if(gyerek[i].koraszulott) nkorafiu++; else nlany++; if(gyerek[i].koraszulott) nkoralany++; atlag_suly /= ngyerek; printf("atlag suly: %.2f\n", atlag_suly); printf("fiuk szama: %d, ebbol koraszulott volt %d\n", nfiu, nkorafiu); printf("lanyok szama: %d ebbol koraszulott volt %d\n", nlany, nkoralany);

16. Implementáljon egy bináris fát. Készítsen függvényeket mely hozzáad egy elemet, és egy másikat ami kinyomtatja a teljes fát. A bináris fa egész számokat tárol. Egy elem egy struktúra, mely tárolja a számot és két pointert melyek a baloldali és jobboldali ágat tárolják. A program olvasson be számokat és tárolja a bináris fában, addig, amíg a bekért szám pozitív. Ha negatív számot adunk meg a bekérés véget ér és a program kinyomtatja a fa tartalmát (a számokat egymás alá, sorba rendezve). Végül kilép a program. #include <stdlib.h> /* uj adat tipus: Figyeljuk meg, hogyan definialjuk a strukturat: ilyen modon a strukturan belul struktura pointert is letre tudunk hozni */ typedef struct _binaris_level struct _binaris_level *bal; struct _binaris_level *jobb; int szam; binaris_level; /* egy uj falevel letrehozasa, a lefoglalt strukturara mutato pointert adja vissza */ binaris_level *uj_level(int szam) binaris_level *adat; adat = (binaris_level *)calloc(1,sizeof(binaris_level)); adat->szam = szam; return adat; /* beilleszt egy szamot a binaris faba */ void beilleszt(int szam, binaris_level *root) binaris_level *akt; akt = root; /* elvileg vegtelen ciklus, egy break fogja megszakitani */ while(1) /* ha a szam kisebb, akkor balra megyunk */ if(szam < akt->szam) /* ha a bal oldali level nem ures akkor az lesz az aktualis level es a ciklus folytatodik */ if(akt->bal!= NULL) akt = akt->bal; else

/* a bal oldali level ures, igy ide illesztjuk be a szamot */ akt->bal = uj_level(szam); break; /* ha aszam nagyobb, akkor a jobb oldali agon megyunk */ else if(akt->jobb!= NULL) akt = akt->jobb; else akt->jobb = uj_level(szam); break; /* rekurziv fuggvennyel nyomtatunk, igy a legegyszerubb megfogalmazni */ void nyomtat(binaris_level *akt) if(akt == NULL) ; /* NULL pointer, nem kell semmit se csinalni */ else nyomtat(akt->bal); printf("%d ", akt->szam); nyomtat(akt->jobb); int main() binaris_level *root = NULL; int szam; while(1) scanf("%d", &szam); /* ha negativ szamot adunk meg veget er a ciklus*/ if(szam < 0) break; /* figyelni kell, hogy van-e root */ if(root == NULL) root = uj_level(szam); else beilleszt(szam, root);

/* nyomtatas */ nyomtat(root);

Összetett feladat: Készítsen játékprogramot a veremkezelés szemléltetésére. A játékszabályok: Legyen egy 100 elemet befogadni képes verem. Induláskor töltsünk be 20 elemet. Egy-egy elem egy 1 és 10 közötti véletlen szám és a hozzá tartozó súly, amely szintén egy véletlen szám 1 és 5 között. A játék: tippelni kell a verem tetején lévő számra. Ha eltaláltuk, akkor annyi véletlen számmal tölti tovább a program a vermet, amennyi a kitalált szám és a hozzá tartozó súly szorzata. (A játékos nem ismeri a súlyozó tényezőket, sem a számokat) Ha nem találtuk ki a számot, akkor a verem tetején lévő szám törlődik, s az alatta lévő (következő) számra lehet tippelni. A játékos nyert, ha a verem megtelt. A nyeremény a veremben letárolt véletlen számok súlyokkal szorzott összege. A játékos vesztett, ha a verem kiürült. A verem tárolására egy 100 elemű egydimenziós tömböt fogunk használni. A tömb elemei strukturák. #include <stdlib.h> #define vm 100 struct elem int szam; /* a szám, amit el kell találni */ int suly; /* súly, amivel szorozni kell a számot */ ; int egesz_bevitel (int, int, char *); int verem_start (struct elem [], int m); int verem_jatek (struct elem [], int, int *, int); long nyeremeny (struct elem [], int); int random(int max_value); int main (void) int vt = 0; /* verem mutató, ha 0, üres a verem */ int menu = 1; struct elem verem[vm]; srand(12345); do switch (menu)

case 1: vt = verem_start(verem, vm); break; case 2: switch (verem_jatek (verem, vm, &vt, 0)) case -1: printf ("\nön vesztett! Üres a verem"); break; case 0: printf ("\ngratulálok, Ön nyert!"); break; case 1: printf("\nmár volt egy nyertes játszmája!"); break; case 3: printf("\na nyeremény:%ld ezer Ft", nyeremeny(verem, vm)); break; case 4: switch (verem_jatek (verem, vm, &vt, 1)) case -1: printf ("\nön vesztett! Üres a verem"); break; case 0: printf ("\ngratulálok, Ön nyert!"); break; case 1: printf("\nmár volt egy nyertes játszmája!"); break; printf("\n\n\n"); printf ("\nverem kezelo játék-program"); printf ("\n 0 játék vége"); printf ("\n 1 verem kezdeti töltése"); printf ("\n 2 játék"); printf ("\n 3 nyeremény kiszámítása"); printf ("\n 4 nyílt játék"); menu = egesz_bevitel (0, 5, "\nkérem a kiválasztott menü számát: "); while (menu > 0 && menu < 5); printf ("\nköszönöm az együttmuködést!"); int egesz_bevitel(int ah, int fh, char * szoveg) int adat = 5; do if(adat < ah adat > fh)

printf("\nervenytelen szam"); printf("%s",szoveg); scanf("%d", &adat); while(adat < ah adat > fh); return adat; int verem_start(struct elem vv[], int m) int i; for(i=0; i < 20; i++) vv[i].szam = random (10) + 1; vv[i].suly = random ( 5) + 1; for( ; i < m; i++) vv[i].szam = 0; vv[i].suly = 0; return 19; int verem_jatek(struct elem vv[], int m, int *t, int ok) char bes [] = "\nkérem a tippet:"; int tipp, i, n, k; if (*t == m) return 1; do if(ok) k = *t; printf ("\na VEREM:\n"); while (k >= 0) printf ("%2d/%2d - ",vv[k].szam,vv[k].suly); if (k%10 == 0) printf ("\n"); k--; tipp = egesz_bevitel (1, 10, bes); if (tipp == vv[*t].szam) /* eltalálta!! */ printf ("\neltalálta!"); n = vv [*t].szam * vv [*t].suly; for (i=0; i < n; i++) (*t)++; if(*t >= m) break;

vv [*t].szam = random (10)+1; vv [*t].suly = random (5) +1; else printf ("\nnem találta el a számot.\n"); /*a verem mutató átállítása a következo elemre */ (*t)--; while (*t > 0 && *t < m); if (*t == 0) return -1; else long nyeremeny(struct elem vv[], int m) long ny = 0; int i; for (i=0; i< m; i++) ny = ny + vv[i].szam * vv[i].suly; return ny; /* 0 es max_value-1 kozotti veletlen szamot general */ int random(int max_value) int v, m; m = RAND_MAX; v = (int)((double)rand() / m * max_value); return(v);