Követelmények http://www.eet.bme.hu/~nagyg/chf.pdf Lehetséges feladatok Az alábbiakhoz hasonló nehézségű, az elvárásoknak megfelelő saját problémák is megoldhatóak, ehhez azonban szükség van a laborvezető beleegyezésére. A megoldáshoz felhasználható a http://www.eet.bme.hu/~nagyg oldalról letölthető econio.c program, amely a konzol képernyő kezelését segítő függvényeket tartalmaz. 1. Numerikus integrálás Készíts C programot, mely a felhasználó által megadott függvényt integrálja (numerikusan). Gondosan tervezd meg az adatstruktúrát! Tervezz egy megfelelő bemeneti nyelvet. - alapműveletek, polinomok, - a szokásos matematikai függvények (sin, log, exp stb.) - és tetszőleges kombinációjuk kezelésére. Ugyanezen feladat egy egyszerűbb verziója: Készíts C programot, amely egy, a felhasználó által megadott, tetszőleges fokszámú polinomot integrál numerikusan. 2. Amőba Készíts menüvezérelt C programot, mely amőbát játszik. Gondosan tervezd meg az adatstruktúrát! - a játék adminisztrálására egy 13*13-as táblán, - legalább 3 védekezo és - legalább 2 támadó stratégiát alkalmazni, - állás elmentésére ill. visszatöltésére. 3. Ragadozó-préda probléma Készíts menüvezérelt C programot, mely a klasszikus ragadozó-préda (rókák és nyulak) problémát szimulálja. A modell konstansait egy file-ban tárold, és lehessen a programból változtatni őket.
A modell leírását lásd a http://home.messiah.edu/~deroos/csc171/predprey/ppintro.htm címen. Legyen lehetőség: - a populációk kezdőértének megadására - tetszőleges időtartam megadására - populáció-idő diagramm rajzolására 80X24-es karakteres képernyőn. 4. Röppályaszámítás Készíts menüvezérelt C programot, adott távolsághoz kiszámítja a kilövési szöge(ke)t. A légellenállás nem elhanyagolható! Az ágyú és a lövedék adatait file-ban tárold! - mindkét kilövési szöget megtalálni, - a lövedék röppályáját megjeleníteni (80X24), - állandó szelet figyelembe venni, - a tárolt konstansokat változtatni. 5. Conway féle LIFE modell Készíts menüvezérelt C programot, mely a Conway féle LIFE (életjáték) modellt valósítja meg. Részletek a http://en.wikipedia.org/wiki/conway%27s_game_of_life címen. - 24*24-es élettéren, - a felhasználó által, - illetve file-ból beolvasott kezdeti állapotból indulni, - a szimuláció folyamatos vagy lépésenkénti megjelenítésére. 6. Szövegelemzés Készíts menüvezérelt C programot, amely szöveget elemez: adatbázist épít a szavakból, és megszámlálja az előfordulásaikat. Csak egyszer olvasható végig a szöveg! Használj bináris fát (esetleg láncolt listát). - statisztikát adni a szavakról, sorok számáról, stb., - billentyűzetről és file-ból olvasni, - egy elemzésben több file-t is vizsgálni, - az eredményt file-ba írni.
7. Pascal fordító Készíts parancssorból hívható C programot, amely egyszerű standard Pascal programokat fordít C nyelvre. A program legyen képes az alábbi Pascal fordulatok kezelésére: - globális / lokális változók, konstansok, értékadás, megjegyzések, - beépített adattípusok, tömbök (1-tol indexelt), rekordok, - függvények, eljárások, valamennyi operátor, - if-then-else, for, while, - read, write, writeln, (csak stdin/stdout), pred, succ, ord, chr, odd, sqr, sqrt. 8. Huffman kódolás Készíts parancssorból hívható C programot, amely a Huffman kódoló algoritmust felhasználva tömörít file-okat. Részleteket lásd a http://ciips.ee.uwa.edu.au/~morris/year2/plds210/huffman.html címen. Tervezz megfelelő fejléc formátumot a tömörítés kódtáblázatának tárolására. - file-ok tömörítése, - file-ok visszaállítása, - a tömörítés iránya parancssor kapcsolóval legyen megadható. 9. Morze Készíts parancssorból hívható C programot, amely Morze szövegeket kezel. Morze abc-t találsz pl. a http://www.soton.ac.uk/~scp93ch/morse/ címen. Az abc-t bináris fával reprezentáld! A program tudjon: - szöveget Morzésítani - Morze szöveget visszakódolni - adjon statisztikát a karakterekrol és a Morze jelekrol (ti, tá). - a konverzió iránya parancssor kapcsolóval legyen megadható. 10. Nem korlátozott ábrázolási tartományú egész aritmetika Készíts parancssorból hívható C programot, amely nem korlátozott ábrázolási tartományú egész aritmetikát valósít meg. - bevitelkor folytatósort kezelni (sor végén "\"),
- az öt egész alapmuvelet elvégzésére, ahogy a C-ben muködik, - gyökvonásra (egész közelítő eredmény). 11. Adatbázis 1. Készíts menüvezérelt C programot, amely "rekordokban" tárolja bizonyos személyek nevét, foglalkozását, telefonszámát, esetleg más jellemző adatait. Valamilyen dinamikus adatszerkezetet használj! A program legyen alkalmas: - új rekordok létrehozására, - a régiek módosítására, - a régiek törlésére, - név, telefonszám, foglalkozás szerinti keresésre (részinformáció alapján is), - az adatbázis fájlba mentésére. 12. Határidőnapló Készíts határidő napló programot, amely "rekordokban" tárolja az események dátumát, pontos idejét, helyét, elnevezését, és egy hozzá kapcsolódó megjegyezést. Használj dinamikus adatszerkezetet. - új rekordok létrehozására, - a régiek módosítására, - a régiek törlésére, - egy adott naphoz, illetve héthez tartozó események kilistázására, - esemény név szerinti keresésére, - az adatbázis fájlba mentésére. 13. Könyvtárprogram (Nem választható!) Pohl László régi laborjegyzetének példája http://www.eet.bme.hu/~pohl/c_jegyzet_old.pdf (94. oldaltól) Készíts könyvtár-programot, amely képes könyvek adatait eltárolni "rekordokban". - új rekodok létrehozására, - a régiek módosítására, - a régiek törlésére, - könyvek szerző, cím, kiadási év, téma alapján való keresésére, - az adatbázis fájlba mentésére.
14. Kígyó játék Készíts kígyó játékot, ahol a kígyók ha megeszik a véletlenszerűen elhelyezett étket, akkor nő a méretük. Ha önmaguknak, vagy egymásnak ütköznek, az a játék végét jelenti. - egy, illetve két játékos üzemmódra - a pontok számolására és elmentésére 15. Akna kereső játék Készíts aknakereső játékot. A pálya téglalap alakú, cellákból álló tábla. Egy cellára rálépve megtudhatjuk, hogy az adott cellán van-e akna (ebben az esetben felrobbanunk - vége a játéknak), illetve, hogy hány szomszédos cellán van. Legyen lehetőség: - a tábla méreteinek a meghatározására - a táblán lévő aknák számának megadására - a játékidő mérésére (esetleg limitálására) - a játékos által aknának gondolt cellák megjelölésére 16. Memóriajáték Adott méretű táblán elem-párok vannak elrendezve a játékos számára nem látható módón. A játékos egy lépésben kiválaszthat két cellát, amelynek a tartalmát megtekintheti. Cél a párok megtalálása. Ha egy párt megtalál a játékos, azok eltűnnek a tábláról. 17. Egyszerű HTML alapú tartalommenedzser program Készíts programot, amely egy adott honlap tartalommal való feltöltését segíti oly módon, hogy egy a programhoz kifejlesztett script-nyelv segítségével a felhasználónak csupán az oldalon megjelenítendő adatokat, szövegeket, menüpontokat kell megadnia, a megjelenítéssel és a HTML-nyelvű kóddal nem kell törődnie -- azokat a program automatikusan generálja a script alapján. 18. Valósíts meg C nyelven string típust Hozz létre egy megfelelő típust és hozzá függvényeket, amelyek segítségével egyszerűen lehet C nyelven stringeket kezelni. Legyen futtatható például az alábbi programrészlet:
string s = create_cp("ez egy próbaszöveg"), s2 = create_c('\n'); /* a string egy mutató típus, amely egy példányát a create_xx() függvényekkel lehet létrehozni*/ add_c(s, '!'); add_s(s, s2); /* a stringhez hozzáadhatunk karaktert, c típusú stringet (char *) és másik stringet */ printf("%s", c_str(s)); /* a stringet c típusú stringgé alakíthatjuk (char *) és így átadható a hagyományos c-s stringkezelő függvényeknek*/ *char_at(s, 3) = 'x'; /* a string egyes pozícióiban lévő karakterek elérhetőek és felül is írhatóak */ /*... -- egyéb stringkezelő függvények*/ dest(&s); /* a string törlése a memóriából*/ 19. Készíts útvonaltervező programot! A program legyen képes egy térkép szöveges reprezentációját fájlból beolvasni és az ebből felépített adatstruktúra alapján két megadott helyszín között útvonalat tervezni. Lehessen megadni az útvonaltervezés szempontját is (leggyorsabb, legrövidebb, stb)! Tervezz megfelelő adatstruktúrát! Találj ki bejáró algoritmusokat és azt, hogy hogyan lehet azokat paraméterezni! 20. SAX típusú XML elemzés Készíts SAX típusú XML elemző (http://en.wikipedia.org/wiki/simple_api_for_xml) programot! Lehessen megadni az XML fájl nevét és a SAX eseményeket lekezelő függvény-mutatókat! 21. DOM típusú XML elemzés Készíts DOM típusú XML elemző (http://en.wikipedia.org/wiki/document_object_model) programot! Tervezd meg a dokumentum fa struktúrájának csomópont elemét! Ne feledkezz meg az attribútumok kezeléséről sem! Egy elemnek tetszőleges számú attribútuma és tetszőleges számú gyermek-eleme lehet!
22. Kétnyelvű szótár program Készítsen programot C nyelven, amely kétnyelvű elektronikus szótárat valósít meg. A szótárat szöveges fájlban tárolja! Javaslat: használja a http://www.mek.iif.hu/porta/szint/egyeb/szotar/ssa-dic/eng-hun/ honlapon található angol-magyar szótár fájlt. Funkciók: keresés mindkét nyelvben, új szó felvétele, szó jelentésének módosítása, szó törlése. 23. Fordítóprogram Készítsen programot C nyelven, amely a paraméterként megadott szöveges fájlban található szöveget lefordítja egy másik nyelvre. Javaslat: használja a http://www.mek.iif.hu/porta/szint/egyeb/szotar/ssa-dic/eng-hun/ honlapon található angolmagyar szótár fájlt. Funkciók: A szótárfájlt tekintse adottnak, nem szükséges, hogy a programban ez bővíthető legyen. A program először teljes mondatokat próbáljon behelyettesíteni (ha vannak a szótárban teljes mondatok), ezután a maradék szövegben a kifejezéseket helyettesítse be (csak teljes egyezés esetén kell cserélni). Ezután pedig a megmaradt szavakat fordítsa le. Azokat a szavakat, melyek nem szerepelnek a szótárban, hagyja változatlanul a szövegben, de írja ki azokat egy fájlba felsorolásszerűen (minden ilyen szó csak egyszer szerepeljen ebben a fájlban.) Ha egy szónak vagy kifejezésnek több jelentése is van, ezek közül mindig az elsőt helyettesítse be. A lefordított szöveg szintén szöveges fájlba kerüljön. 24. Pac-man Készítsen Pac-Man játékprogramot C nyelven. Funkciók: A játék legalább 10 pályából álljon. Legyen menthető és betölthető a játékállás. A program vezessen toplistát az elért pontszámok alapján. 25. Amőba (Nem választható, mert megegyezik a 2. feladattal) Készítsen amőba játékprogramot C nyelven. Funkciók: ember-ember ellen, ember-gép ellen. A rács méretét lehessen állítani legalább 2 fokozatban (pl. 12x12 és 18x18). 26. Szöveges kalandjáték Készítsen szöveges kalandjáték programot C nyelven. Javasolt irodalom: F. DaCosta: A kalandprogram írásának rejtelmei. A program lehet ennél egyszerűbb felépítésű is, például nem szükséges, hogy beírt szövegeket értelmezzen. Elég, ha a játékos egy listából választhatja ki, hogy mit tesz. Célszer. a játékkörnyezetet szöveges fájlban tárolni, így lehetőséget adva a játékosoknak saját küldetések készítésére.
Funkciók: a játékállás mentése és betöltése. Készítsen a játékhoz teljes küldetést is, legalább 10 helyiséggel. 27. Grafikus kalandjáték Készítsen szöveges kalandjáték programot C nyelven. Javasolt irodalom: F. DaCosta: A kalandprogram írásának rejtelmei. Dolgozhat grafikus üzemmódban is. Funkciók: a játékállás mentése és betöltése. Készítsen a játékhoz küldetést is, legalább 10 helyiséggel. 28. Tetris Készítsen tetris programot C nyelven. Funkciók: Legalább 5 sebességi fokozat. A toplistát fájlban tárolja. 29. Órarendkészítő program Készítsen órarendkészítő programot C nyelven. A program egyhetes és kéthetes (páros és páratlan hét) beosztást is kezeljen. Bemenő adatok: tanárok adatai, csoportok adatai, rendelkezésre álló osztálytermek (speciális labor vagy tornaterem is lehet, ekkor bizonyos órákat kötelező itt megtartani, ill. másokat nem lehet itt tartani) valamint a köztük lévő kapcsolat (melyik csoportnál, milyen rendszerességgel (heti hány óra) kell órát tartani. Vegye figyelembe, hogy nem lehet éjjel-nappal órákat tartani, ezért a csoportok megadásakor kell azt is megadni, hogy az adott csoportok mikor érnek rá, illetve a tanároknál is megadható legyen, hogy az illető mikor nem ér rá. Figyeljen arra, hogy egy terem hány férőhelyes, ill. egy csoport hány fős létszámú. Kimenő adatok: órarendek a tanároknak, az egyes csoportoknak, valamint a termeknek (adott teremben mikor milyen óra van). Ha valamilyen feloldhatatlan ütközés van, akkor azt a program jelzi. A keletkezett órarendeket táblázatos formában kell kiadni (text fájlba, de ha a házi feladat készítője gondolja, lehetővé teheti a képernyős megjelenítést is emellett.) A bemenő adatokat úgy kell tárolni, hogy utólag könnyű legyen módosítani, és ne kelljen mindent újból megadni egy esetleges változáskor. Ha a feladat készítője gondolja, akkor megpróbálkozhat azzal, hogy az órarendet optimalizálja úgy, hogy minél kevesebb lyukasóra legyen, elsősorban a csoportoknál, másodsorban a tanároknál. 30. Raktári árunyilvántartó Készítsen árunyilvántartó programot C nyelven. Az árukat vonalkód azonosítja. Az áru paraméterei közé tartoznak: beszállító, vételár, eladási ár, az áru helye a raktárban, a beszerzés és az eladás időpontja stb. Funkciók: új árucikk felvétele, árucikk törlése, adott áru paramétereinek változtatása (pl. hány darab van raktáron, hol van, mennyibe kerül stb.), keresés legalább vonalkód alapján. Az adatbázist fájlban tárolja. 31. Média nyilvántartó. Készítsen mp3/film/cd/dvd/stb. nyilvántartó adatbázist C nyelven. Tárolandó adatok: szerző, cím, hossz, nyelv, stb., ami az adott média jellemzője. (Csak egyféle médiát kell
kezelnie a programnak, csak lusta voltam külön mp3 nyilvántartó/film nyilvántartó/ leírást készíteni). Funkciók: új elem felvitele, elem törlése, elem módosítása, keresés legalább szerző és cím szerint. 32. Kártyajáték 33. Gázmodell 34. LaTeX -> HTML LaTeX -> HTML átkódoló program (pontosan meghatározandó az a LaTeX parancskészlet, amit ismernie kell). 35. BibTeX formátum kezelés Szakirodalmi adatok (publikációk) nyilvántartására való program, ami BibTeX formátumú listákat be tud olvasni, illetve saját adatait szinten BibTeX formában tarolja. 36. Programozható zsebkalkulátort emuláló program 37. Adatbázis 2 Akármilyen strukturált adathalmaz kezelésére szolgáló program. Tarolási forma: XML file. Műveletek: keresés, beszúrás, törlés, listázás, két file egyesítése, rész-listák leválogatása és mentése. 38. Képletszerkesztő 39. WYSIWIG editor (pl. LaTeX-hez) 40. Kapcsolási rajz szerkesztő program 41. Folyamatábra szerkesztő program