Feladatgyűjtemény

Ezen az oldalon rengeteg feladat található a gyakorláshoz. Egy részük megoldással együtt, míg a többi anélkül.

A megoldással együtt olvasható feladatok ebben a PDF fájlban találhatóak. Felhívjuk itt is a figyelmet arra, hogy a megoldások olvasgatása lényegében nulla tapasztalatot és gyakorlatot ad, így az eredményes vizsgához érdemben nem tud hozzásegíteni! A megoldásokat akkor érdemes megnézni, ha a saját megoldás elkészítése közben elakadtok.

A lenti listában rengeteg további feladat található. Ezekhez megoldás nincsen; segítséget az oktatók tudnak adni, illetve a központi e-mail címre is írhattok kérdéseket.

1 Programok, alapvető input-output, feltételek

  1. Készítsen programot, mely kiírja a standard output-ra (képernyőre) azt a szöveget, hogy „Hello World”!
  2. Készítsen programot, mely a felhasználó által megadott decimális (poz. egész) számot átváltja 16-os számrendszerbe (hexadecimális), és az eredményt kiírja a képernyőre.
  3. Készítsen programot, amely bekér a felhasználótól egy valós számot (Celsius fok), az eredményt átváltja Fahrenheit értékbe, és kiírja az eredményt a képernyőre (0°C=32°F, 40°C=104°F, lineáris)!
  4. Készítsen programot, mely a felhasználótól bekért két számról megállapítja, hogy oszthatók-e egymással!
  5. Készítsen programot, mely egy síkbeli háromszög
    a.) kerületét
    b.) területét
    c.) szögeit
    d.) a három magasság hosszát (ma, mb, mc)
    képes kiszámítani.
    A háromszög pontjait (x,y) koordinátáival jellemezzük, használja a tav() függvényt (lásd: Függvények)
  6. Készítsen programot, mely a felhasználótól bekért számról megállapítja, hogy az
    a.) pozitív, negatív vagy nulla,
    b.) egész vagy nem egész.
    Az eredményt a képernyőre szöveges válasz formájában írja ki!
  7. Készítsen programot, mely három változó (a,b,c) értékét a felhasználótól megkérdezi, majd a számok közötti relációt kiírja a képernyőre. Természetesen előfordulhat egyenlőség is.
    Lehetséges példák eredményre: "b<c<a", "c<a=b", "a=b=c", stb
  8. Készítsen programot, amely a felhasználó által megadott a, b és c háromszög oldalhosszúságok ismeretében
    a.) eldönti, hogy létezik-e a háromszög
    b.) meghatározza, hogy ha létezik a háromszög, az derékszögű, hegyesszögű vagy tompaszögű. (Használhatja a Pitagorasz-tételt.)
  9. Készítsen programot, mely két időpontot kérdez a felhasználótól (óra, perc, másodperc külön), majd kiszámítja a két időpont közötti időtartamot másodpercben, és az eredményt kiírja a képernyőre.
  10. Készítsen programot, mely bekéri a felhasználótól, hogy a kasszában hány 100, 200 és 500 Ft-os található. A program számolja ki, hogy mennyi a beírt pénz összege Forintban.
  11. Készítsen programot, mely képes megoldani az alábbi egyenletrendszert:
    ax + by = p
    cx + dy = q
    
    Az adatok: a,c,b,d, p és q. Vizsgálja meg, hogy az egyenletrendszer megoldható-e, illetve függetlenek-e az egyeneletek. Ha létezik megoldás, számolja ki x és y értékét!
  12. Készítsen programot, amely egy pozitív egész számról négyzetgyökvonás nélkül eldönti, hogy négyzetszám-e!
  13. Készítsen programot, mely a felhasználótól három síkbeli pont (x,y) koordinátáinak bekérése után
    a.) meghatározza, hogy a pontok köré írható-e kör
    b.) megadja a köréírható kör sugarát és középpontjainak (x,y) koordinátáit.
  14. Készítsen programot, mely a felhasználótól négy térbeli pont (x,y,z) koordinátáinak bekérése után
    a.) meghatározza, hogy a pontok köré írható-e gömb
    b.) megadja a köréírható gömb sugarát és középpontjainak (x,y,z) koordinátáit.
  15. Készítsen programot, melyben a felhasználó megadja egy tetszőleges négyszög csúcsainak koordinátáit. A program számítsa ki a négyszög kerületét. (Feltételezzük, hogy a bevitt pontok által meghatározott szakaszok nem metszik egymást.)
  16. Írjon egy programot, amelyik 0 és 99 között generál egy egyenletes eloszlású véletlen számot a szabványos rand() segítségével! (A modulós módszerrel generáltak nem egyenletes eloszlásúak.)
  17. Írjon olyan programot, amely a bemeneten talált tab karakterek mindegyikét annyi szóközzel helyettesíti, amennyi a következő tabulátor stop-ig hátravan! A tabulátor stop-ok legyenek 8 karakterenként.
    Például, bemenet:
    \t\tHello,
    világ\t!
    
    Kimenet:
    1234567|1234567|1234567
                    Hello,
    világ   !
    
  18. Készítsen programot, mely beolvas a felhasználótól egy fizetést, és a fizetés nagyságától függően kiírja, hogy az alacsony, atlagos, vagy magas! (A határokat #define-nal is megadhatja.)
  19. Készítsen programot, mely beolvas egy karaktert, és megállapítja róla, hogy az nagybetű, kisbetű, szám vagy egyéb karakter!

2 Ciklusok

  1. Írjon programot, amely kiírja a képernyőre az első öt olyan számot, amelynek pontosan három osztója van!
  2. Készítsen programot, amely kér a felhasználótól egy (pozitív egész) számot, a megadott szám faktoriálisát kiszámítja és kiírja a képernyőre!
  3. Írja ki a képernyőre az összes N-nél kisebb négyzetszámot!
  4. Készítsen programot, mely egy nxn-es mátrix formájában kiírja a pozitív egész számokat 1-től n^2-ig. Az n értékét induláskor kérje be a felhasználótól!
  5. Írjon programot, mely kiírja a képernyőre az első n Fibonacci számot. Az n változó értékét a felhasználó adhassa meg!
  6. Készítsen programot, mely a képernyőre "\" ill. "/" karakterek megfelelő helyre történő kirajzolásával átlót rajzol a képernyőre! Két eset lehetséges: jobb felső sarokból bal alsóba, vagy bal felsőből jobb alsóba: ezt induláskor a felhasználó dönthesse el. A kurzort nem pozícionálhatja, csak megfelelő számú szóköz és sortörés felhasználásával érje el a kívánt eredményt.
    Az átlóhoz felhasznált terület a képernyőn 22x22 karakter.
  7. Készítsen programot, mely a felhasználó által megadott x és y számok függvényében a szöveges képernyőre kirajzol egy
    a.) x*y karakter méretű, "o" betűkből álló keretet!
    b.) x vízszintes élhosszúságú, y magas paralelogrammát "o" betűkből. Például:
    x=7, y=3 esetén:
      ooooooo
     ooooooo
    ooooooo
    
  8. Készítsen programot, mely egy m oszlopból és n sorból álló mátrixot rajzol a képernyőre, melynek minden eleme egy axb méretű, "o" betűkből álló téglalap. A téglalapok között k szóköz/sortörés távolságot hagyjon.
    Példa: m=3, n=2, a=5, b=2, k=1 értékekre:
    ooooo ooooo ooooo
    ooooo ooooo ooooo
    
    ooooo ooooo ooooo
    ooooo ooooo ooooo
    
  9. Készítsen programot, mely két szám legnagyobb közös osztóját számolja ki. A két számot a felhasználótól kérje be!
  10. Készítsen programot, mely a felhasználó által megadott pozitív egész számot felbontja prímtényezők szorzatára!
  11. Készítsen programot, amely a felhasználó által megadott szám prímtényezős felbontását írja ki. Például:
      20 | 2
      10 | 2
       5 | 5
       1 |
    
  12. Készítsen programot, mely a felhasználó által megadott [n,m] zárt intervallum között növekvő sorrendben kiírja az összes prím számot! Végezzen ellenőrzést, hogy a megadott két szám helyes-e: egyik szám sem lehet kisebb 2-nél, egésznek kell lennie. Ha a felhasználó m-re kisebb számot ad meg, mint n-re, akkor a két számot automatikusan cserélje meg!
  13. Készítsen programot, mely meghatározza és kiírja az összes hárommal és öttel egyaránt osztható, 1000-nél kisebb természetes számot.
  14. Készítsen programot, mely bekér N darab természetes számot (először N-t kérjük be). Az adatok beírása után a program írja ki a páros és páratlan számok darabszámát, és a páratlan számok összegét!
  15. Készítsen programot, mely 10x10 szorzótáblát rajzol a képernyőre. Az eredmény nagyjából így kezdődjön:
      1x1=1   1x2=2   1x3=3 ...
      2x1=2   2x2=4   2x3=6 ...
      3x1=3   ...
    
  16. Készítsen programot, mel bekér egy számot (k), majd kiszámítja az alábbi összeget:
    y=1x2 + 2x3 + 3x4 + ... + k(k+1)
  17. Készítsen programot, mely bekér a felhasználótól egy számot (b), majd egy akkora háromszöget rajzol a képernyőre "o" betűkből, mely éppen a megadott b számú sora van. Például b=3 esetén:
      o
     ooo
    ooooo
    
  18. Készítsen programot, mely bekér a felhasználótól egy természetes számot (n). Ezután a felhasználótól n darab egész szám megadását kéri, majd kiírja a képernyőre az n megadott szám közül
    a.) a legkisebbet
    b.) a legnagyobbat
    c.) az átlagát
    A beolvasott számokat a program nem tárolhatja el.
  19. Készítsen programot, mely egész számokat olvas be a billentyűzetről. A beolvasás végét 0 jelzi. A program számolja meg, hogy
    a.) hány adatot olvasott be (a 0-t ne számítsa bele)
    b.) a beolvasott számokból mennyi volt pozitív!
    A számokat nem tárolhatja el.
  20. Készítsen programot, amely bekér egész számokat mindaddig, amíg nem ad meg 0-t a felhasználó. A program határozza meg és írja ki a beadott egész számok
    a.) közül a legkisebbet és a legnagyobbat.
    b.) átlagát.
    (A 0-t ne számítsa bele a beadott számokba, ez csak a bevitel végét jelzi.)
  21. Készítsen játékprogramot, amely gondol egy számot 1 és 100 között.
    a.) A felhasználó addig találgathat, amíg nem találja el a keresett számot. A számítógép minden rossz tipp után írja ki, hogy a gondolt szám nagyobb vagy kisebb!
    b.) Egészítse ki az előző programunkat úgy, hogy a játékos csak maximum 4-szer tippelhet. Ha a negyedik tippre sem találja el a gondolt számot, a program írja ki a gondolt számot, majd fejeződjön be a futása.
  22. Készítsen programot, amely kiszámolja a/b+c/d (két tört összegét), majd az eredményt törzsalakú törté alakítja (amely már nem egyszerűsíthető tovább)!
  23. Készítsen programot, mely bekér a felhasználótól egy számot 1-10 között (n). Egy előre lefoglalt (100 elemű) tömb első nxn elemét véletlen egész számokkal tölti fel, majd kiírja azt négyzetes mátrix alakban a képernyőre. Ezután megkeresi a tömb legkisebb elemét, és felcseréli azt az első elemmel, majd az eredményt újból megjeleníti egy nxn-es négyzetes mátrix formájában. Például n=3-ra:
    45 61 -3
     5 21 71
    12 -9 43
    
    -9 61 -3
     5 21 71
    12 45 43
    
  24. Írjon programot, mely kiszámítja az
    a(n)=(1+1/n)^n
    sorozat k-adik elemét. A k változó értékét kérdezze meg a felhasználótól! (A hatványozáshoz nem használhatja a pow függvényt.)
  25. Készítsen programot, mely dobókocka dobásokat szimulál: egy dobás egy véletlenszám kérése 1-től 6-ig. Két dobókocka dobás eredményét adja össze, és végezzen 1000 mintavételt. Számolja meg a két dobás összegéből eredő 2-esek, 3-asok, 4-esek, stb. 12-esek hányszor fordulat elő, és jelenítse meg az eredményt a képernyőn!
  26. Helyettesítsük az 1-9 számjegyekkel az autóbuszjegyen található lyukasztási helyeket! Írjon programot, amely kiírja az összes olyan buszjegy "kódját", amely három helyen van kilyukasztva! Törekedjen a képernyő minél jobb kihasználására! A program írja ki a kombinációk számát is.
  27. Készítsen programot, mely kiszámítja e^x értékét a Taylor sorával. Az iteráció mélységét (a Taylor sor hosszát) a felhasználótól megadott természetes szám adja meg. A Taylor sor szerinti definíció:
    e^x = 1 + x + (x^2)/2! + (x^3)/3! + ...
    
  28. Készítsen programot, mely egy természetes szám számjegyeinek összegét képes meghatározni.
  29. Készítsen programot, mely Armstrong-számokat keres, és a találatkat megjeleníti a képernyőn.
    N-jegyű Armstrong számoknak nevezzük azokat a számokat, melyek számjegyei N-dik hatványainak összege éppen a számot adja. Például: egy négyjegyű Armstrong-szám a 1634, mivel:
    1634=1^4+6^4+3^4+4^4
    
  30. Készítsen programot, mely addig olvas be egész számokat, amíg a felhasználó kétszer egymás után nullát nem ad. Ekkor a program álljon le, és írja ki a beolvasott számok összegét.
  31. Készítsen programot, amely a felhasználó által beírt mondatot madárnyelven ír ki: "Teve tuvudsz ivigy beveszevelnivi?"
  32. Készítsen programot, mely a felhasználótól beolvasott természetes számot visszafele írja ki. Például 651-re a válasz: 156.
  33. Adott az alábbi számsorozat: a(n)=4n+7. Készítsen programot, mely a felhasználó által megadott [p, q] intervallumon belül meghatározza, hogy
    a.) hány eleme van a sorozatnak
    b.) felsorolja az intervallumba eső elemeket.
  34. Készítsen programot, mely meghatározza az összes olyan legfeljebb ötjegyű természetes számot, amelynek első két jegyéből alkotott szám osztója az eredeti számnak!
  35. Adott a síkon középpontjának (x,y) koordinátáival és sugarával egy kör. Készítsen programot, mely megadja a körbe eső egész koordinátájú pontok számát!
  36. Készítsen programot, mely a felhasználótól bekér egy természetes számot, majd megállapítja róla, hogy a szám Fibonacci-szám-e!
  37. Egy repülőgéppel repülünk, és 100 m-ként megmérjük a felszín tengerszint feletti magasságát méterben. Készítsen programot, mely a beérkező adatok (scanf) eltárolása nélkül megállapítja, hogy
    a.) jártunk-e a tenger felett?
    b.) átrepültünk-e sziget felett? Ha igen, hány sziget felett?
    Az első és utolsó mérést szárazföldön végeztük. (Az adatbeolvasás végét a -1 adat bevitele jelezze!)
  38. Készíts programot, amelyik megadja, hogy valahány forintot hogy lehet a forgalomban lévő címletű pénzekből legkevesebb számúval kifizetni. Például: 1040 Ft = 1 db 1000-es, 2 db 20-as.
  39. A felhasználó gondol egy számra 1 és 100 között, a gép pedig megpróbálja kitalálni. Például: "kisebb a szám, mint 25?", erre a felhasználó "i"gen vagy "n"em választ ad. Mi a nyerő stratégia a gép részéről, hogy tudja a legkevesebb kérdésből kitalálni? Valósítsa meg a programot! (Gondolkodtató: ha a gép a nyerő stratégiát alkalmazza, meg tudja-e mondani, ha a felhasználó következetlen választ ad, csalni próbál? Miért?)
  40. Készítsen programot, amely egy felhasználó által megadott számot kiír az ugyancsak általa megadott számrendszerben. Például a 16 a 3-as számrendszerben: 1*3^2 + 2*3^1 + 1*3^0.
  41. Készítsen programot, amelyik a szinusz függvény egy periódusát rajzolja ki 40 sorban, 60 karakter széles sorokra. Az egyes pontokba csillag karaktereket rajzoljon. Kicsiben lerajzolva:
      *
       *
        *
        *
       *
      *
     *
    *
    *
     *
      *
    
  42. Készítsen programot, amellyel számokat olvasunk be sorban, amíg a felhasználó nullát nem ad. A program állapítsa meg a számsorozat rendezettségét: egyenlő, monoton növekvő, szigorú monoton növekvő, monoton csökkenő, szigorú monoton csökkenő. Ha a sorozatról menet közben kiderül, hogy rendezetlen, fejezzük be a bevitelt. (A számok tárolásásra nincs szükség, tömböt nem használhat.)
  43. Készítsen programot, mely kiírja az 1 köbméternél kisebb térfogatú, 10 cm-ként növekvő sugarú gömbök térfogatait!

3 Bitműveletek

  1. Készítsen programot, mely egy unsigned char típusú változóban tükrözi a biteket, vagyis a legnagyobb helyiértékű bit helyet cserél a legkisebbel, az 1. a 6-ikkal, stb. Pl: 0x5C -> 0x3A
  2. Készítsen programot, amelyik meghatározza, hogy az azt futtató gépen hány bites az unsigned int típus.
  3. Írjon olyan
    unsigned int invert(insigned int x, int p, int n)
    
    függvényt, amely az x-ben p pozíciótól kezve n bitet invertál! Például bemenet: x=10110 (binárisan), p=2, n=3-ra a kimenet x=01010.
  4. Készítsen függvényt, amelyik egy 32 bites előjel nélküli szám byte-sorrendjét megfordítja. (Tételezzük fel, hogy az unsigned int a futtató gépen 32 bites.) Például, ha a bemenet 0x11223344, a függvény kimenete legyen 0x44332211.
  5. Készítsen programot, mely egy pozitív egész szám kettes számrendszerbeli alakját írja ki a képernyőre! A program kisebb szám esetén egészítse ki a kapott eredményt kezdő nullákkal úgy, hogy annak hossza 16 digit legyen (16 bites ábrázolás).
  6. Készítsen programot, mely elvégzi az alábbi műveletet, és a végeredményt kiírja a képernyőre hexadecimális alakban! A két kezdeti szám hexadecimális formában legyen adott a program számára.
        1011 1110
    &   1111 1100
    -------------
    ~
    -------------
    
    |   1100 1000
    -------------
    
    <<2 
    -------------
    
    
  7. Készítsen programot, mely elvégzi az alábbi műveletet, és a végeredményt hexadecimális alakban kiírja a képernyőre! A két kezdeti szám hexadecimális alakban legyen adott a program számára.
        1110 1001
    &   0101 1101
    -------------
    
    |   1100 1100
    -------------
    ~
    -------------
    
    ^   1001 1010
    -------------
    
    &   1101 0001
    -------------
    ~
    -------------
    
    ^   1010 1110
    -------------
    
    |   0001 0110
    -------------
    ~
    -------------
    >>1
    -------------
    
  8. Készítsen programot, mely elkészíti az alábbi logikai függvények igazságtáblázatát, és kiírja a képernyőre:
    a.) ÉS
    b.) VAGY
    c.) NOT
    d.) NOR
    e.) XOR
  9. Írjon programot, mely bekér egy max 16 hosszú bitsorozatot karakterlánc formában karakterenként úgy, hogy csak 0-ás és 1-es karakterek bevitelét engedélyezi. A bevitel végét a 9-es szám bevitele jelzi. Ezután írja ki az ilyen módon kettes számrendszerben megadott szám tízes számrendszerbeli alakját! (Elsőleg legnagyobb helyiértéket adja meg a felhasználó.)

4 Függvények

  1. Készítsen függvényt, amelyik adott évszámról eldönti, hogy az szökőév-e. (Szökőév minden negyedik, nem szökőév minden századik, mégis az minden 400-adik. A 2000. évben ezért volt szökőév.)
  2. Készítsen függvényt, amelyik megadja két számról, hogy egyezik-e az előjelük!
  3. Írjon függvényt, amely megkap két valós számot, és visszaadja azok számtani és mértani közepét! (Az egyik értéket visszatérési értékként adja vissza, a másikat pedig egy címmel adott paraméterbe töltse be.)
  4. Készítsen függvényt, mely egy pont x és y koordinátáival tér vissza. A függvény paraméterként kapja egy pont x és y koordinátáját, valamint egy szöget és egy távolságértéket. Számítsa ki a visszatérési értékként szereplő pont x és y koordinátáit, hogy az a megadott ponttól meghatározott szögben és távolságban legyen. (A két koordináta közül csak az egyik adható vissza a függvény visszatérési értékeként, a másik értéket a paraméterek között átadott mutató segítségével adja vissza!)
  5. Készítsen függvényt (tav2), amely a paraméterként kapott (x,y) koordinátáival jellemzett pontok geometriai távolságával tér vissza!
  6. Készítsen függvényt, mely megállapítja egy egész szám jegyeinek a számát!

5 Tömbök

  1. Készítsen programot, mely a legkisebb és legnagyobb értékeket keresi meg egy mátrixban.
    a.) Készítsen programot, mely megkeresi egy értékekkel előre feltöltött kétdimenziós tömb legkisebb és legnagyobb értékét.
    b.) A programot fejlesszük úgy tovább, hogy ne csak a minimum és maximum értékeket, hanem azok mátrixban elfoglalt helyét is adja meg. Több minimum vagy maximum esetén azt a választ adja a program, hogy "Nincs legnagyobb érték" vagy legkisebb.
    c.) A programot egészítsük ki azzal, hogy az megjeleníti a mátrixot mátrix alakban, és a legkisebb érték elé a "MIN", a legnagyobb elé a "MAX" jelzést teszi ki.
  2. Készítsen programot, amely egy v[10] tömb elemeit 3 hellyel ciklikusan balra lépteti! A feladat megoldható segédtömb nélkül is!
  3. Adott egy rendezetlen tömb. Készítsen programot, mellyel a felhasználó kiválaszhatja a tömb egy elemét és meghatározza a nála kisebb és nagyobb elemek számát!
  4. Készítsen programot, mely meghatározza egy mátrix soraiban az elemek minimumát, majd a minimális elemek maximumát!
  5. Adott egy 40 elemű egészekből álló tömb. A tömböt tölse fel a program véletlen számokkal 1 és 40 között.
    Kérjen egy természetes számot a felhasználótól 1 és 40 között, majd végezzen keresést: megtalálható-e a megadott szám a tömbben, ha igen, elsőként hanyadik helyen? Ha nem található, a program közölje, hogy nincs találat.
  6. Készítsen programot, mely egy 50 elemű tömböt véletlen egész számokkal tölt fel 0 és 200 között.
    a.) A program ezután keressen a tömbben két olyan elemet (páros), melyekre teljesül, hogy a nagyobbik elem a kisebbik duplája.
    b.) Keresse meg az összes ilyen párost!
  7. Adott egy egész értékekkel feltöltött m tömb. Készítsen programot, mely a felhasználótól kért két számról eldönti, hogy
    a.) a két szám szerepel-e a tömbben
    b.) ha igen, akkor melyik szerepel előbb?
  8. Készítsen programot, mely egy nxn-es egészekből álló négyzetes mátrix átlójához képesti jobb alsó felében szereplő elemek összegét határozza meg.
  9. Egy kozmetikai üzletben vendégek használnak kabinokat. A kabinokban különböző hosszúságú kezelések folytathatók, egy nap összesen legfeljebb 100 darab. A kezeléseknek van kezdő időpontjuk és egy hosszuk. A kezelések csak minden negyed órában kezdhetők meg.
    A nyitvatartást reprezentáló nyitó és záró időpontokat a programban megadott konstansok tárolják.
    Készítsen programot, mely az érkező vendég számára kilistázza az aznap még szabadon maradt kezdőidőpontokat annak függvényében, hogy milyen hosszú kezelésre kívánjuk a kabint lefoglalni.
    A program az időpontokat percben (0 és 1440 között) tárolja, az időpontok kiírását a megszokott ÓÓ:PP formában végezze. A kiválasztott időpont foglalását tárolja el, következő foglalásokat ne engedjen úgy felvenni, hogy az előzőekkel átfedés jöjjön létre.
  10. Egy m nevű, n elemű int túpusú tömbben (m) keressük azt az elemet, amely a tömb elemeinek átlagához a legközelebb esik. Legyen ps egy intre mutató típus. Készítsen programot, melynek végeredményeképpen ps mutató a tömb keresett elemére mutat! (Tegyük fel, hogy a tömbben tárolt elemek között nincs két egyforma.)
  11. Adott két n elemszámú, egészekből álló tömb (m és b). m tömb véletlen elemekkel van feltöltve. Készítsen programot, amely b tömb elemeit feltölti úgy, hogy minden b[i] értéke az m tömb első (i+1) elem értékének összege legyen. Például b[2]=m[0]+m[1]+m[2].
  12. Adott egy m egészekből álló tömb, véletlen értékekkel feltöltve.
    Készítsen programot, mely a felhasználótól bekért p egész számról meghatározza, hogy a tömbben p-nél nagyobb, vagy p-nél kisebb számokból van-e több!
  13. Adott az alábbi struktúra és tömb:
    struct pont {
      double x,y;
    };
    pont m[100];
    
    A tömb véletlenszerű pontkoordinátákkal fel van töltve.
    Készítsen programot, mely megállapítja, hogy a felhasználó által megadott (x,y) középpontú, r sugarú körön belül az m tömb hány pontja esik, és melyek azok!
  14. Adott egy pontokat leíró struktúra és tömb:
    struct pont {
      double x,y;
    };
    pont m[100];
    
    A tömb elemei véletlenszámokkal fel vannak töltve. Készítsen programot, mely meghatározza azt a legkisebb sugarú kört, melybe az összes pont belefér vagy még éppen a körön van! A program írja ki a kapott kör középpontját (x,y) és sugarát!
  15. Egy tóra négyzethálót fektetünk, és minden rácspontban megmérjük a víz mélységét, amit egy nxm méretű kétdimenziós valós tömbben tárolunk. A négyzetháló szélső rácspontjai a szárazföldön vannak. Készítsen programot, mely meghatározza a leggyorsabban mélyülő helyet.
  16. Eratoszthenész szitája prímszámokat keres. A módszer a következő. Felírjuk az összes számot N-ig. 2 prímszám, kihúzzuk a többszöröseit. 3 a következő, kihúzzuk n*3-at. 4-et már kihúztuk (2*2). 5 a következő prím, kihúzzuk n*5-öt stb.
    Sajnos a rendelkezésre álló memória véges, ezért minden bitet ki kell használnunk Ha egy 8 bites char (tegyük fel, hogy ekkora) típusban minden bitet külön megjelölünk, egy 60000 karakteres tömböt lefoglalva 480000-ig ki tudjuk írni az összes prímszámot.
    Valósítsa meg a leírt programot!
  17. Készítsen programot, amely N (maximum 100) darab véletlen számot állít elő, amelyek között nincsenek egyformák!
  18. Készítsen programot, mely egy adott tömbben megszámolja, hogy hány olyan elem van, amely csak egyszer fordul elő. A tömb adataira később nincs szükség, módosíthatja azt.
  19. Készítsen programot, mely meghatározza egy adott (véletlen számokkal feltöltött) tömbben, hogy melyik értékből található benne a legtöbb. A tömb elemeinek értékét módosíthatja.
  20. Adott egy egész számokat tartalmazó tömb (m). Készítsen programot, mely a felhasználótól bekér egy egész számot (z), majd eldönti, hogy van-e két olyan elem a halmazban, amelyek szorzata éppen z!
  21. Egy 195 fős előadóba előadást szerveznek. A székek 13 sorban, összesen 15 oszlopban (téglalap) helyezkednek el. A székek számozása a (színpaddal szembeni) bal alsó sarokból kezdődik, jobbra növekszik, és a legfelső sorban vannak a legnagyobb számú székek.
    A jegyirodában egy 195 elemű egész tömbben tárolják a már kiadott foglalásokat. A foglalt helyeket a megfelelő székszámhoz írt 1-es jelöli, 0 a szabad hely. Készítsen programot, mely az újonnan érkező vendégek számára a kívánt számú, egymás melletti ülőhelyet kikalkulálja! Vigyázzon a sorok szélére!
  22. Adott egy mxn-es mátrix. Készítsen programot, mely megkeresi a mátrixnak azt az elemét, amely a legtöbb sorban előfordul! A program írja ki ennek az elemnek az értékét!
  23. Az m tíz elemű, egész számokból álló tömb egy decimális szám (x) számjegyeit tartalmazza helyiérték szerint csökkenő sorrendben. Készítsen programot, mely
    a.) kiszámítja az így ábrázolt szám (x) értékét!
    b.) előállítja m-ben az eredetinél egyel nagyobb szám (x+1) ugyanilyen ábrázolását, illetve közölje, ha volt túlcsordulás!
  24. Az m,k két tíz elemű, egész számokból álló tömb egy-egy decimális szám (x,y) számjegyeit tartalmazza helyiérték szerint csökkenő sorrendben. Készítsen programot, mely
    a.) kiszámítja az így ábrázolt két szám összegét (x+y) és az eredményt x-be ugyanilyen ábrázolásban visszatárolja, illetve közölje, ha volt túlcsordulás!
  25. Kártyás játékot írunk. Mutasson egy olyan C-s adatszerkezetet, amely tárolhatja egy kártya adatait (szín: pikk, treff, ... és szám: A, 2, 3, ... J, Q, K). Töltsön fel egy tömböt egy pakli kártyáival. Utána keverje meg a tömböt. A keverő algoritmus ne cserélje feleslegesen sokszor a tömb elemeit! Végül írja ki, milyen sorrendben szerepelnek a kártyák a megkevert pakliban.
  26. Memóriajátékot írunk. 6x6 kártya van lefordítva a játékosok előtt, 18 pár, amelyek egyformák. A kártyákon betűk vannak, A, B, C, ... Írjon egy programrészletet, amelyik generál egy állást. Természetesen egy betű csak kétszer szerepelhet (egy pár)!
  27. Írjon programot, amelyik egy adott dátumról (év, hónap, nap) kiírja, hogy az év hányadik napja. Az év paraméterre a szökőévek miatt van szükség. (Szökőév minden negyedik, nem szökőév minden századik, mégis az minden 400-adik. A 2000. évben ezért volt szökőév.)

6 Függvények és tömbök

  1. Készítsen függvényt (MatrixForm), mely megjelenít egy nxm méretű mátrixot a képernyőn. A program vegye figyelembe, hogy a mátrix elemeiben tárolt értékek eltérő hosszúságúak. Az egy oszlopba tartozó értékek jobbra igazítva szerepeljenek. Bemenő paraméter a mátrixra (két dimenziós tömbre) mutató pointer, valamint n és m.
  2. Készítsen függvényt (TranspSq), mely egy nxn-es (négyzetes) mátrix transzponáltját képezi, és az eredményt az eredeti mátrixba tárolja vissza! Bemenő paraméterek a mátrixra mutató pointer és n értéke.
  3. Készítsen függvényt (Transp), mely egy nxm-es mátrix transzponáltját képezi! Az eredménymátrix számára foglaljon dinamikusan pontosan annyi helyet, amennyire a mátrix tárolásához szükség lesz. Bemenő paraméterek a mátrixra mutató pointer, valamint n és m, visszatérési értéke az eredmény mátrixra mutató pointer.
  4. Készítsen függvényt (MatrixMul), mely egy nxm-es és egy mxk-s mátrixot képes összeszorozni! Az eredménymátrix számára foglaljon dinamikusan pontosan annyi helyet, amennyire a mátrix tárolásához szükség lesz. Bemenő paraméterek a két mátrixra mutató pointer, valamint, m, n és k értéke, visszatérési érték az eredménymátrixra mutató pointer.
  5. Készítsen függvényt (MatrixConst), mely egy nxm-es mátrixot képes egy megadott konstanssal összeszorozni! Az eredményt az eredeti mátrixba tegye. Bemenő paraméterek a mátrixra mutató pointer, m, n és k konstans értéke, visszatérési érték nem kell.
  6. Készítsen függvényt, mely egy bemenő nxn-es mátrix adjungáltját képezi. Bemenő paraméter a mátrixra mutató pointer, valamint n értéke. Az eredmény kerüljön az eredeti mátrix helyére.
  7. Készítsen függvényt, mely egy valós számokból álló tömb elemeit összegzi!
  8. Készítsen függvényt, amely egy tömb 3 legkisebb elemét határozza meg!
  9. Készítsen függvényt, mely a paraméterben kapott egész tömbről megvizsgálja, hogy elemeinek értéke
    a.) monoton növekvő
    b.) szigorú monoton növekvő
    c.) szomszédos elemek E sugaron belül helyezkednek el (különbségük nem nagyobb, mint E vagy -E)
    A függvény bemenő paramétere a tömbre mutató pointer, a tömb elemeinek száma, valamint a c.) feladatnál E értéke. Visszatérési értéke int, mely igaz esetén 1, egyébként 0 legyen.
  10. Írjon függvényt, amely egy kétdimenziós tömb adott két sorát felcseréli! A függvény bemenő paramétere: a kétdimenziós tömb kezdőcíme, oszlopok és sorok száma, a két cserélendő sor száma.
  11. Készítsen függvényt, amely egy kétdimenziós, nxn-es négyzetes mátrixról megállapítja, hogy
    a.) a főátlójában csupa nulla számok vannak-e
    b.) a főátló felett csupa nulla számok vannak-e.
    A függvény bemenő paramétere a kétdimenziós tömbre mutató pointer, valamint n értéke, visszatérési értéke legyen 1, ha a feltétel teljesül, egyébként 0.
  12. Készítsen függvényt, mely egy adott m tömbben tömbben megszámolja az első 0 elem utáni pozitív számok számát!
  13. Készítsen függvényt (buborek), mely bemetként kap egy int típusú tömbre mutató pointert, és egy elemszámot), és a függvény buborékrendezést hajt végre a kapott tömbön. Készítsen teszkörnyezetet, hogy a függvényt ki is próbálhassa!
  14. Készítsen függvényt (kozvkival), mely bemetként kap egy int típusú tömbre mutató pointert, és egy elemszámot), és a függvény közveten kiválasztásos rendezés hajt végre a kapott tömbön. Készítsen teszkörnyezetet, hogy a függvényt ki is próbálhassa!
  15. Készítsen függvényt (kozvbeszur), mely bemetként kap egy int típusú tömbre mutató pointert, és egy elemszámot), és a függvény közvetlen beszúrásos rendezés hajt végre a kapott tömbön. Készítsen teszkörnyezetet, hogy a függvényt ki is próbálhassa!
  16. Játékot írunk, amely egy maximum 20 nevet tároló dicsőséglistát vezet. A maximum 100 karakteres nevek mindegyikéhez egy (egész) pontszám tartozik.
    Írja meg a következő függvényeket:
    1. függvény: eldönti egy adott pontszámról, hogy felkerül-e a listára. Igaz/hamis értékkel tér vissza.
    2. függvény: kiírja a képernyőre a dicsőséglistát.
    3. függvony: felvesz egy új bejegyzést (név, pontszám) a listára, és visszatér a helyezéssel. (-1, ha nem került fel a listára.) A legkisebb pontszámú bejegyzés ilyenkor törlődik.

7 Rekurzió

  1. Készítsen programot, amely tetszőleges méretű labirintust generál. Példa a program kimenetére:
    X XXXXX
    X X   X
    X XXX X
    X   X X
    XXX X X
    X   X X
    XXX X X
    X      
    XXXXXXX
    
    A labirintusban ne legyen kör! A bejárat és a kijárat lehet előre rögzített helyen.
  2. Készítsen függvényt, mely rekurzív algoritmussal kiszámítja az n-ik Fibonacci számot!
  3. Aknakeresőt írunk. Egy két dimenziós pályán néhány akna van elszórva. A felhasználó szabadon léphet bármelyik mezőre. Ha aknára lép, veszít; ha nem, akkor megmutatjuk neki, hogy a választott mező mellett hány másik mező tartalmaz aknát (0 és 8 között).
    Ha 0, akkor a szomszédos mezők egyike sem tartalmaz aknát, vagyis azokra biztonságosan lehet lépni; ha azoknál is valamelyik mezőre 0 adódik, természetesen még tovább, arra is. Készítsen függvényt, amely egy összefüggő, akna nélküli területet teljesen felderít!

8 Esetszétválasztás

  1. Készítsen egyszerű menüvezérelt programot. A program tároljon el egy számot, melynek kezdőértéke a=1. Ezt követően a program jelenítse meg a képernyőn a értékét, és az alább látható menüt. A megfelelő menüpont számának megadása (scanf-el) esetén a program írja ki, hogy melyik menüpontot választottuk, majd hajtsa végre a-n a kiválasztott műveletet, írja ki újból a új értékét és a menüt. A menüből mindaddig lehessen újból választani, míg a kilépést nem választja a felhasználó.
    A menü:
    0. Alapérték visszaállítása (a=1)
    1. Hozzáad 1-et
    2. Előjelét megfordítja
    3. Szorozza 2-vel
    4. Kivon 5-öt
    9. Kilépés
    
  2. Készítsen programot, mely egy, a felhasználó által megadott 1 és 99.999 közötti természetes számot képes kiírni betűvel! 2000-ig minden számot egybeírunk, 2000 fölött az ezres és ezer alatti rész közé kötőjelet kell tenni. Példák:
    625: hatszazhuszonot
    44: negyvennegy
    1975: ezerkilencszazhetvenot
    8000: nyolcezer
    23470: huszonharomezer-nyolcszazhetven
    

9 Állapotgépek

  1. Készítsen kettős mássalhangzó számláló programot!
    a.) Írjon programot, mely a billentyűzetről érkező karaktereket figyeli, és megszámolja a beírt szövegben található "ly" és "sz" kettős mássalhangzójú betűk számát. A szöveget nem tárolhatja el a program, csak a találatok számát. A szöveg beírása és a számlálás az ESC billentyű leütésével véget ér, ekkor a program íjra ki tételesen az összeszámlált mennyiségeket.
    b.) Az előbbi programot egészítsük ki azzal, hogy a "zs" betűket is számolja, de vigyázzunk, egy leütött karaktert csak egyetlen kettős mássalhangzójú betűhöz számoljunk, méghozzá az elsőhöz (pl. "egészség": 1db "sz", 0db "zs")
  2. Készítsen programot, mely a "comm.c" file-t beolvassa, és törli belőle az összes szabványos C komentet (tehát a /* */ és // jelekkel alkotott megjegyzéseke)! Az eredményt írja ki a "eredm.c" file-ba. (Vigyázat, előfordulhat a kétféle jelhasználat egymásba ágyazódása is!)
  3. Készíts programot, amely a standard bemenetről érkező karaktersorozatról megmondja, hány ly betű található benne!
  4. Készítsen programot, amelyik a standard bemenetről érkező C forráskódú programot a standard kimenetre másolja; közben elhagyva a megjegyzéseket! Figyeljen arra, hogy sztring belsejében, " " karakterek között is lehetnek /* */ részek, amelyek azonban nem számítanak megjegyzésnek.
  5. Adja meg egy tetszőleges, standard bemenetről érkező szövegről, hogy hány mondat van benne. Mondatnak tekintünk minden olyan karaktersorozatot, amelyik nagybetűvel kezdődik, ponttal, kérdőjellel vagy felkiáltójellel végződik.
  6. Írjon programot, amelyik HTML formátumú fájlból eltávolítja a szedés jelöléseit, vagyis a <…> szerű karaktersorozatokat, ezzel többé-kevésbé olvashatóvá téve azt normál szövegként. (Például <br>, <title>).
  7. Írjon olyan programot, amely külön-külön sorokban nyomtatja ki a bemenetére érkező szavakat!

10 Sztringek

  1. Készítsen programot, amely bekéri a felhasználó nevét, majd üdvözli őt a nevén szólítva!
  2. Készítsen függvényt (myToUpper) mely egy sztringben képes a latin abc betűit nagybetűssé alakítani! A bemenet legyen a sztringre mutató kezdőpointer, a végeredmény ugyanebbe a sztringbe kerüljön bele!
  3. Készítsen programot, mely bekér egy keresztnevet, majd azt betűnként függőlegesen lefelé kiírja. Például ha a név "Imre", akkor az eredmény:
    I
    m
    r
    e
    
  4. Készítsen programot, mely bekér egy mondatot, majd
    a.) megszámolja és kiírja, hogy a mondatban hány szóköz található.
    b.) kiírja a mondatot szóközök nélkül.
  5. Készítsen függvényt, mely paraméterben egy sztringet és további két karaktert (mit és mire) kap. A függvény keresse meg a sztringben a "mit" változóban megadott karaktereket, és cserélje azokat a "mire" változóban megadottakra. A függvény visszatérési értéke a kicserélt karakterek számát jelentse.
  6. Készítsen függvényt (numLower), ami megkap egy stringre mutató pointert, és visszaadja az adott szövegben található kisbetűk számát. (Használhatja a ctype.h islower(int) függvényét.)
  7. Készítsen programot, mely adott sztringben megszámolja, hányszor fordul elő az "a" névelő. A névelő lehet mondat elején, de végén nem, viszont vessző állhat előtte is és utána is, egyébként szóköz karakterek határolják.
  8. Készítsen függvényt, amelyik egy megadott sztringet úgy módosít, hogy törli belőle a szóköz karaktereket. Például: "Ez a paraméter" → "Ezaparaméter"
  9. Írjon olyan függvényt, amely megfordít egy paraméterben megadott sztringet! Pl. "sztring" -> "gnirtzs".
  10. Írjon olyan int htoi(const char *s) függvényt, amelyik a megadott hexadecimális számjegyekből álló sztringet a neki megfelelő egész értékké alakít! Pl. htoi("1ef") visszatérési értéke 495.
  11. Írjon egy függvényt, amely egy adott sztringben megkeresi egy másik sztring legutolsó előfordulását, és visszaadja annak pozícióját, illetve -1-et, ha nem található. A megoldáshoz ne használja a könyvtári strrstr függvényt! Például "abcdabce"-ben keressük "abc"-t, a visszatérési érték 4.
  12. Írjon olyan "squeeze" függvényt, amely az első paraméterben megadott sztringből az összes olyan karaktert törli, amelyik szerepel a második paraméterben megadott sztringben. Például "megadott sztring", "gt" paraméterekkel meghívva a függvényt az első paraméter így módosul: "meado szrin".
  13. Készítsen függvényt, mely a paraméterben átadott sztringet nagybetűssé alakítja!
  14. Írjon programot, amely beolvas egy karakterláncot, és megállapítja, hogy vannak-e benne olyan karakterek, amelyek pontosan egyszer fordulnak elő. A program írja ki ezeket a karaktereket, ha pedig nincsenek a karakterláncban egyedi karakterek, akkor közölje a felhasználóval!
  15. Készítsen programot, amely egy tetszőleges bevitt szöveget Morse kóddal ír a képernyőre! (Elegendő a betűket átalakítani, írásjelek, számok nem szükségesek.)

11 Dinamikus memóriakezelés

  1. Készítsen függvényt, amely megkap egy stringre mutató pointert és visszatér egy újonnan foglalt string címével, amely a paraméterstring kisbetűs elemeit tartalmazza az eredeti sorrendben. Az új string számára pontosan annyi helyet foglaljon, amennyire szükség van!
  2. Készítsen függvényt, mely rekurzív módon egy kétdimenziós nxn-es mátrix determinánsát határozza meg. A függvény létrehozhat átmenetileg további dinamikus adatszerkezeteket, melyeket még a futás előtt felszabadít!
  3. Készítsen programot, amelyik egy megadott jelszóról eldönti, hogy az kellően erős-e. Erős jelszó az, amelyik tartalmaz kisbetűt, nagybetűt és számot is. Használhatja a ctype.h függvényeit.

12 Fájlok

  1. Készítsen programot, mely az „adat1.dat” file tartalmát beolvassa és kiírja a képernyőre!
  2. Készítsen programot, mely bekéri a felhasználó nevét, és azt az „adat1.dat” file-ba eltárolja! (Ha már létezett a file korábban, írja felül.)
  3. Készítsen programot, mely induláskor írja ki a képernyőre, hogy hanyadszorra indítják. Az indítások számát tárolja az "indit.ini" file-ban. (Ha a file még nem létezik, akkor ez az első indítás, ha már létezik, akkor olvassa ki belőle az eddigi indítások számát, adjon hozzá egyet, azt írja ki a képernyőre, és tárolja vissza a file-ba.)
  4. Készítsen programot, amely egy megadott fájlt átolvasva kiírja, hogy az angol ABC kisbetűi közül melyik hányszor szerepel benne.
  5. Egy tóra négyzetrácsot fektetünk, a négyzetrács egyes pontjaiban a tó mélységét tároljuk. 0-val jelöljük a szárazföldet, negatív számmal a mélységet méterben. Készítsen programot, amelyik egy ilyen, fájlban adott "térkép" alapján "téglatest-módszerrel" becsli a tó térfogatát. Az egyes mérési pontok távolságát kérdezze meg a program a felhasználótól. A fájl első sorában a táblázat szélessége és magassága (egész számok), a többi sorokban a táblázat egyes sorai; valós számok szóközzel elválasztva.
  6. Készítsen programot, amelyik kódolni illetve dekódolni képes egy szövegfájlt. A kódolás történjen úgy, hogy minden betű helyett az ABC-ben következő szerepeljen: a->b, b->c, ... z->a; a nagybetűk és a számok hasonlóan. A többi karakter maradjon változatlanul.
  7. Egy fájl hallgatók vizsgajegyeit tartalmazza, Neptun-kód - jegy - név formátumban soronként, szóközökkel elválasztva. Ha a hallgató nem kapott aláírást, a jegy helyén egy mínusz szerepel. Készítsen programot, amely statisztikát ír ki a vizsgáról. Például:
    AABB12 5 Tehetséges Béla
    CC43EF 4 Pedál Tibi
    BBCC34 - Lógós Feri
    XYYXY1 4 Ezoterikus János
    
    Kimenet:
    Jeles: 1 fő
    Jó: 2 fő
    Nem kapott aláírást: 1 fő
    
  8. Gyakran praktikus, ha a programjaink bizonyos adatokat nem fájlból olvasnak, hanem a futtatható (.exe) eleve tartalmazza azokat. Készítsen programot, amely bináris fájlt beolvasva C-s tömböt készít abból. Például ha egy 8 bájtos bináris fájl a 98, 21, 17, 58, 255, 0, 7, 1 bájtokat tartalmazza, a program által létrehozott szövegfájl így néz ki:
    unsigned char adat[] = {
      98, 21, 17, 58, 255, 0, 7, 1,
    };
    const int adat_len=8;
    
    Figyeljen arra, hogy a kimeneti fájl tartalmazzon sortöréseket is, vagyis a vesszővel elválasztott számok ne nyúljanak túl a 80 karakteres képernyőn! (A C a tömbök kezdeti értékének megadásakor megengedi, hogy az utolsó adat után is szerepeljen vessző.)
  9. Az RLE (run length encoding) az egyik legegyszerűbb tömörítési algoritmus. Lényege, hogy az egymás után következő egyforma bájtokat elég csak egyszer eltárolni, és megjelölni, hogy hányszor szerepeltek. Ha pedig nem egyforma bájtok követik egymást, azokat simán átmásolja az RLE.
    A tömörített adatunkban 0xbf karakterrel jelöljük az ilyen többszörözést. Vagyis minden karakter saját magát jelöli, de ha a bemeneten egy 0xbf-et találunk, akkor az utána következő bájt az ismétlendő számot jelenti, az azutáni pedig az ismétlések számát.
    Írjon programot, amelyik egy ilyen adatfájlt kitömörítve egy másik fájlba írja annak tartalmát!
  10. Az RLE (run length encoding) az egyik legegyszerűbb tömörítési algoritmus. Lényege, hogy az egymás után következő egyforma bájtokat elég csak egyszer eltárolni, és megjelölni, hogy hányszor szerepeltek. Ha pedig nem egyforma bájtok követik egymást, azokat simán átmásolja az RLE.
    A tömörített adatunkban 0xbf karakterrel jelöljük az ilyen többszörözést. A 0xbf utáni első karakter az ismétlendő bájt, az azutáni pedig az ismétlések száma!
    Írjon programot, amelyik egy megadott fájlt betömörítve egy másik fájlba ír! Figyeljen arra, hogy ha az eredeti fájlban 0xbf szerepel, azt nem szabad egyszerűen átmásolni, mert akkor a kitömörítő algoritmus ismétlés megjelölésének próbálná értelmezni.
  11. Írjon programot, amely egy egyszerű C preprocesszorként működik. Beolvas egy C forráskódú programot, és a #define sorokat értelmezi, illetve a megadott szavakat cseréli. (Paraméteres makrókat nem kell felismernie.)
    Példa bemenet:
    #define YES 1
    #define NO 0
    fuggveny(a, YES);
    
    Kimenet:
    fuggveny(b, 1);
    
  12. Írjon olyan programot, amely két bináris fájlt hasonlít össze, és kiírja az eltérések helyét, illetve az első és második fájlban található különböző bájtokat! Például:
    poz.  f1 f2
    0456  00 12
    0ef3  fe fb
    
    A nem egyforma méretű fájlokat el se kezdje összehasonlítani!

13 Listák

  1. Adott az alábbi struktúra zöldségek láncolt listában történő nyilvántartására:
    struct zd {
      char *nev;
      int ar;
      struct zd* next;
    };
    
    a.) Készítsen függvényt (add_zd), mellyel a láncolt lista végéhez új elemet hozzáadhatunk. Ha még üres a lista, a hozzáadni kívánt elem legyen az első. Bemenő paraméterek, lista első elemére mutató kettős pointer (a pointerre mutató pointer), zöldség neve (konstans), ára.
    b.) Készítsen függvényt (del_zd), mellyel a láncolt lista egy adott elemét tudjuk törölni. A bemenő paraméterek között szereplő "nev" mező a törlendő elem nevét tartalmazza. Bemenő paraméterek: lista első elemére mutató kettős pointer (a pointerre mutató pointer), és a név.
    c.) Készítsen függvényt (mod_zd), mellyel a lista egy elemét módosíthatjuk. A reginev bemenő paraméter szolgáljon az azonosításra (ezt a nevű tételt akarjuk módosítani), az ujnev és ujar értékekkel módosítsuk a tételt. További bemenő paraméter a lista első elemére mutató pointer.
    d.) Készítsen függvényt (list_zd), mely a láncolt listát kilistázza a képernyőre. Bemenő paraméterek: első elemre mutató pointer.
  2. Írjon programot, amely keresztbe hivatkozás listát készít egy adott szövegfájlról; vagyis megadja az összes benne szereplő szót, és minden szó mellé azoknak a soroknak a számát, amelyekben az illető szó megtalálható!
  3. Adott egy láncolt lista (gráf). A láncolt lista egy eleme tartalmaz egy jelzőbitet, egy mutatót az ő szomszédjait felsoroló láncolt listára, illetve a következő elem mutatóját:
    struct graf {
      unsiged char jelzobit;
      struct szomszed* szom;
      struct graf* next;
    };
    
    A jelzőbitet a program szabadon használhatja, azonban tartalma ismeretlen.
    A szomszédos elemek mutatóit tartalmazó láncolt lista szerkezete az alábbi:
    struct szomszed {
      struct graf* el;
      struct szomszed* next;
    };
    
    a.) Határozza meg a program, hogy az így leírt gráf összefüggő-e!
    b.) Keressen hurkot a gráfban, és írja ki a program, hogy van-e benne.
  4. Készítsen programot, mely buborék rendezést hajt végre egy számokkal ellátott névsoron! A névsort a "nevsor.dat" file tartalmazza, ahol minden sorban egy-egy tétel található: sorszám,név formátumban. A program láncolt listába olvassa be a teljes file-t, majd beolvasás után (vagy beolvasás közben) hajtsa végre a listán a buborékrendezést. A sorszám szerint növekvő sorrendű listát hasonló formátumban a "nevsor2.dat" file-ba írja ki.
  5. Adott az alábbi struktúrájú láncolt lista:
    struct lista {
      int ertek;
      struct lista* next;
    };
    
    Készítsen programot, mely megszámolja, hogy a lista elemeiben található ertek változók hány különböző értéket tartalmaznak. A listát módosíthatja, felbonthatja a megoldás eléréséhez, de segédtömböt nem használhat.
  6. Egy csapat névsorát az alábbi láncolt listában tároljuk:
    struct nevlista {
      char* nev;
      unsigned int eletkor;
      struct nevlista* next;
    }
    
    Készítsen programot, mely a csapat leghosszabb nevű tagjának az életkorát képes megmondani! (Feltesszük, hogy csak egy leghosszabb nevű létezik.)
  7. Adott egy futóverseny résztvevőinek listája:
    struct versenyzo {
      char *nev;
      int ind,erk;
      struct versenyzo *next;
    };
    
    Az ind adat az indulási időpontját, az erk az érkezését tárolja UnixTime formátumban (1970. jan. 1. 0:00 óta eltelt másodpercek száma). Készítsen programot, mely meghatározza, hogy melyik futó kapja az első, második és harmadik díjat! Vigyázzon, mert aki benevezett, de nem indult, vagy nem ért célba, azok is rajta vannak a listán, de érkezési vagy indulási időpontjuk nulla.
  8. Adott egy térképet leíró nagyon egyszerű adatszerkezet:
    struct pont {
      struct utvonal *elagazasok;
    };
    
    ahol a struct utvonal:
    struct utvonal {
      char nev[50];
      double hossz;
      struct pont *vegpont;
      struct utvonal *kovetkezo;
    };
    
    A térkép egy elágazását egy struct pont elem reprezentálja. A pontokat útvonalak (utcák, utak, stb) kötik össze, amelyek adattípusa: struct utvonal. Minden pontból tetszőleges számú elágazás indulhat egy-egy másik pont felé. A térkép egy struct pont elemekből álló tömbben van tárolva:
    struct pont *terkep;
    int terkep_meret;
    
    E két változó felhasználásával írjon programot, amely parancssori paraméterként megkap két utcanevet, és kiírja az őket összekötő legrövidebb útvonal leírását a következő alakban:
    utcanév -> utcanév -> utcanév ...
  9. Készítsen programot, amely beolvassa az egy megadott szövegfájlban soraiban található neveket, és névsort állít össze belőlük. A nevek maximum 100 karakteresek, viszont tetszőlegesen sok lehet belőlük.
  10. A lista vagy a bináris fa példák olyan adatszerkezetekre, amelyekre minden programnak szüksége lehet. Ezek kezelésének módja (például listaelem beszúrása) független attól, hogy milyen adatokat tartalmaznak.
    Deklaráljon olyan listát, amely típus nélküli mutató segítségével tetszőleges adatot képes tárolni! Írjon függvényeket, amelyek a lista elejére, végre fűznek egy elemet, illetve egy megadott elemet törölnek a listából!
  11. Adott egy következő módon deklarált lista:
    struct lista_elem {
      Adat a;
      struct lista_elem *kov;
    };
    
    Írjon függvényt, amelyik végiglépked egy ilyen lista összes elemén (foreach), és egy paraméterben megadott függvényt meghív minden elemre! Mutasson példát a függvény használatára!
  12. Egy üzletben krémet árulnak (egyfélét). A készletben lévő krémeket program segítségével tartják nyilván. Az üzletbe hetente több doboz krémet szállítanak utánpótláshoz, egy dobozban húsz krémmel. A program nyilvántartja, hogy hány bontatlan doboz, és ezen kívül még az utolsó bontott dobozban hány krém van készleten.
    a.) Készítsen programot, melynek megadható a teljes készlet a bontatlan dobozok, valamint a bontott dobozban lévő krémek számával, majd ebből a készletből lehessen vásárolni. A vásárló megadja, hogy mennyi krémet szeretne vásárolni, a program pedig kiszámítja, hogy van-e ennyi a készleten. Ha igen, az üzlet létrejön, és a program vonja le a készletből a megvásárolt krémeket, és írja ki, hogy hány bontatlan doboz maradt még, és ha van bontott doboz, abban hány krém található.
    b.) Alakítsa át úgy a programot, hogy a dobozokban ne fixen 20 darab krém legyen, hanem ezek száma állítható legyen a programból.

14 Fák

  1. Készítsen függvényt, amely megszámolja egy bináris fa leveleinek a számát! (Levelek azok, amelyeknek már nincs gyermek csomópontjuk.)
  2. Készítsen függvényt, amely megszámolja egy bináris fa adott szinten lévő csomópontjainak számát! (0. szint a gyökér, 1. szint a gyökér közvetlen gyermekei stb.)
  3. Készítsen programot, amely bekéri a felhasználótól egy szöveges fájl nevét, majd megszámolja, hogy a fájlban található szavak közül melyik hányszor szerepel. Végül a program írjon statisztikát a fájlról, például "3 a, 2 nehéz, 1 ellenőr, 2 szöveg". A szavakat whitespace karakterek választják el, az összes többi a szó része. (A feladat megoldható listákkal és fákkal is. A fás tárolás persze gyorsabb.)
  4. Bináris fában tárolunk szavakat. Minden szótól balra egy nála az ABC-ben előrébb lévő szó van, tőle jobbra pedig egy hátrébb lévő. Definiáljon egy struktúrát, amellyel felépíthető a fa! Írjon függvényt, amelyik
    a) ABC sorrendben
    b) visszafelé
    kiírja az összes szót!

15 Függvényekre mutató pointerek

  1. Írjon függvényt, amely átvesz egy int típusú elemekből álló tömböt, annak méretét, valamint egy olyan függvényt, amely egy int paramétert vár és visszatérési értéke void. A megírandó függvény járja végig a tömböt és minden elemére hívja meg a paraméterként átvett függvényt!
  2. A qsort könyvtári függvény generikus, segítségével bármilyen típusú adatok rendezhetőek a quicksort algoritmussal. A rendezéshez az adott, általunk használt adattípushoz készítenünk kell egy összehasonlító függvényt.
    Feladat: Készítsen egy olyan függvényt, amelyik double típusú számok összehasonlításához használható a qsort()-hoz. Mutasson példát, hogyan kell használni a függvényt!
  3. Adott a következő, pontok koordinátáit tároló rekord:
    struct _pont {
      double x;
      double y;
    };
    
    Egy ilyenekből álló tömböt szeretnénk rendezni úgy, hogy az origótól lévő távolságuk szerint növekvő sorrendben legyenek. A rendezéshez a qsort() könyvtári függvényt használjuk. Írja meg az ennek negyedik paraméterében használható összehasonlító függvényt.
  4. Tekintsünk egy valós, egyváltozós függvényt, például:
    double fv(double x)
    {
      return x*x+2*x+5;
    }
    
    Írjon C függvényt, amelyik trapéz-módszerrel numerikus integrálást végez. Visszatérési értéke legyen az integrál értéke; paraméterei az integrálandó függvény, az intervallum és a lépésköz.
  5. Készítsen függvényt, ami egy folytonos függvény nullahelyét megkeresi egy adott intervallumban, intervallumfelezéssel. A függvény paraméterként kapja az intervallumot, amelyben keres, és a függvény pointerét. Építsen be egy hibahatárt, amelyen belül a nullahelyet megtaláltnak tekinti. A függvény a nullahely valós értékével térjen vissza.