Feladatötletek a házi feladathoz

Tartalom

  1. Nyilvántartás jellegű feladatok
  2. Szimuláció, modellezés, demonstráció
  3. Osztályok
  4. Generikus osztályok
  5. Játékok

1. Nyilvántartás jellegű feladatok

Mobil szolgáltató

Egy mobilszolgáltatónál egy egyedi nyilvántartó programmal szeretnék kezelni az ügyfeleket. Az ügyfeleknek van neve és címe, valamint telefonszáma, ami egyben az egyedi azonosítjuk is. A szolgáltató jelenleg három csomagot biztosít ügyfeleinek: Alap, MobiNet és SMSMax, de később több csomag is lehet. Minden csomaghoz más percdj és SMS díj tartozik, valamint a számítás módszere is eltérő lehet. A MobiNet csomag esetén pl. az is megadható, hogy hány SMS-t küldhet az ügyfél ingyen. A program egy fájlból olvassa be az ügyfelek adatait és választott díjcsomagot. Egy másik fájlból pedig az adott hónapban küldött SMS darabszámot és a lebeszélt perceket. A program írja ki, hogy az egyes ügyfelek mennyit fizetnek a forgalom alapján.
A megoldáshoz ne használjon STL tárolót


Vonatjegy

Tervezze meg egy vonatjegy eladó rendszer egyszerűsített objektummodelljét, majd valósítsa azt meg! A vonatjegy a feladatban mindig jegyet és helyjegyet jelent együtt. Így egy jegyen minimum a következőket kell feltüntetni:

  • vonatszám, kocsiszám, hely
  • indulási állomás, indulási idő
  • érkezési állomás, érkezési idő

A rendszerrel minimum a következő műveleteket kívánjuk elvégezni:

  • vonatok felvétele
  • jegy kiadása

A rendszer később lehet bővebb funkcionalitású (pl. késések kezelése, vonat törlése, menetrend, stb.), ezért nagyon fontos, hogy jól határozza meg az objektumokat és azok felelősségét.
Valósítsa meg a jeggyel végezhető összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! A megoldáshoz ne használjon STL tárolót!


Sportegyesület

A Fitt Sportegyesület nyilvántartást szeretne vezetni a csapatairól. Minden csapat rendelkezik egy névvel és egy alaplétszámmal. A sportegyesület háromféle sportággal foglalkozik: labdarúgás, kosárlabda és kézilabda. A labdarúgó csapatnak két edzője van; a kosárlabda csapatnak elengedhetetlen kellékei a pom-pom lányok aminek létszámát is nyilvántartják; a kézilabda csapatok pedig évente kapnak valamekkora összegű támogatást. A nyilvántartás rendelkezzen minimum az alábbi funkciókkal: új csapat felvétele, csapat törlése, listázás.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Telefonkönyv

Tervezze meg egy telefonkönyv alkalmazás egyszerűsített objektummodelljét, majd valósítsa azt meg! A telefonkönyvben kezdetben az alábbi adatokat akarjuk tárolni, de később bővíteni akarunk:

  • Név (vezetéknév, keresztnév)
  • becenév
  • cím
  • munkahelyi szám
  • privát szám

Az alkalmazással minimum a következő műveleteket kívánjuk elvégezni:

  • adatok felvétele
  • adatok törlése
  • listázás

A rendszer lehet bővebb funkcionalitású (pl. módosítás, keresés), ezért nagyon fontos, hogy jól határozza meg az objektumokat és azok felelősségét. Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Filmtár

Készítsen filmeket nyilvántartó rendszert. Minden filmnek tároljuk a címét, lejátszási idejét és kiadási évét. A családi filmek esetében korhatár is van, a dokumentumfilmek esetében egy szöveges leírást is tárolunk. Tervezzen könnyen bővíthető objektummodellt a feladathoz!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


MVM

Tervezze meg a Meseországi Villamos Művek (MVM) nyilvántartási rendszerének egyszerűsített objektummodelljét, majd valósítsa azt meg! A rendszerrel minimum a következő műveleteket kívánjuk elvégezni:

  • ügyfél adatinak felvétele
  • szolgáltatási szerződés kötése
  • szolgáltatási díj előírása (számlázás)
  • szolgáltatási díj befizetése
  • egyenleg lekérdezése
  • fogyasztás bejelentése

A rendszer lehet bővebb funkcionalitású, ezért nagyon fontos, hogy jól határozza meg az objektumokat és azok felelősségét.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


2. Szimuláció, modellezés, demonstráció

MapReduce

Tervezzen objektummodellt a MapReduce algoritmus működésének bemutatásához! A map-reduce lényege, hogy egy nagyobb feladatot olyan kisebb részfeladatokra bontunk, amelyek egymástól függetlenül, akár párhuzamosan is végrehajthatók, majd az eredményeket a reduce fázisban begyűjtjük és összesítjük. A Google által MapReduce algoritmusnak nevezett módszer egyik fontos eleme, hogy a map fázisban kulcs-érték párok keletkeznek, melyet kulcsonként listába szervezve ad át a reduce fázisnak.
Tegyük fel például, hogy egy szövegben szeretnénk megszámolni a szavak előfordulási számát! Ekkor a map fázis szavakra bontja a szöveget, és olyan kulcs-érték párokat állít elő, melyben a szó kulcs, és az érték 1, majd ezeket átadja a keretrendszernek. A keretrendszer az azonos szavakhoz tartozó értékeket listákba gyűjti, és átadja a reduce fázisnak. A reduce összegzi a listákban levő értékeket, és olyan kulcs-érték párokat állít elő, melyben a kulcsok (szavak) mellett azok összesített előfordulási száma szerepel. Ezzel a feladatot megoldottuk.
Olyan modellt tervezzen, melyben könnyen módosítható a Map és a Reduce funkció! Mutassa be a modell működését 2 betűs szavak előfordulásának számlálásával! (Ld: http://en.wikipedia.org/wiki/MapReduce)
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz felhasználhat STL tárolót is!


Telefonközpont

Készítsen egyszerű telefonhálózatot szimuláló előfizető és központ osztályokat!
A központtól egy előfizető vagy egy másik központ kapcsolást kérhet. Az egyes előfizetőket 4 jegyű hívószámmal lehet elérni, melyből az eső jegy a körzetszám (1-9), a maradék 3 jegy pedig az előfizetői szám. Például az 1999 az 1-es körzetben a 999-es előfizető. Minden körzetben pontosan egy központ van. Ehhez kapcsolódnak a körzet előfizetői és az idegen körzetek központjai. Két központ között több kapcsolat is lehet. A központok külső kapcsolata a létrehozásakor megadott maximumot nem haladhatja meg. Hasonlóan a központok létrehozásakor adható meg, hogy az adott központ hány kapcsolási kérést tud egyszerre kiszolgálni (kapcsolási tábla mérete). Ha egy előfizető kapcsolást kér, meg kell próbálni a kapcsolatot fölépíteni. Ezt tárolni kell a korlátos méretű kapcsolótáblában. Távolsági hívásoknál minden érintett központban egy-egy kapcsolás keletkezik. Ha valamelyik központ nem tudja teljesíteni a kapcsolást, mert nincs szabad hely a kapcsolótáblában, nincs szabad távolsági vonal, vagy foglalt az előfizető, akkor kivételt dob, minek hatására törlődik az addig felépített kapcsolási sor. Ellenkező esetben a hívó egy kapcsolás-objektumot kap, amelyen keresztül üzenetet küldhet. A hívó megszakíthatja a hívást, ekkor törlődik a kapcsolás, és erről értesül a hívott fél is.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz felhasználhat STL tárolót is!


Síkidomok

Készítsen absztrakt síkidom-osztályt, és valósítson meg segítségével szabályos háromszöget, négyzetet és kört! Ezen síkidomokat középpontjuk és egy csúcsuk (kör esetén a körvonal egy pontja) határozza meg, amelyek kétdimenziós koordinátákként olvashatóak be egy istream típusú objektumról. A síkidomoknak legyen olyan metódusa, amellyel eldönthető, hogy egy adott pont a síkidom területére esik-e! Legyen továbbá olyan metódusuk is, ami megadja, hogy tartalmazza-e azokat egy adott sugarú, origó középpontú kör!

Írjon főprogramot, amely egy fájlból {típus, középpont, csúcs} tartalmú sorokat olvas be (az istream >> síkidom operátor felhasználásával)! A beolvasott síkidomok közül azokat tárolja el (heterogén kollekció), amelyek teljes terjedelmükben az origó középpontú egységkörön kívül esnek. Ezután koordinátákat olvasson be a szabványos bemenetről a fájl végéig, és írja ki az egyes pontokhoz azon eltárolt síkidomok adatait (név, középpont, csúcs), amelyek az adott pontot tartalmazzák. A megoldáshoz ne használjon STL tárolót!


Lakásriasztó

Tervezzen objektummodellt lakásriasztó rendszer működésének modellezésére! A modellben legyenek érzékelők (mozgás, hő, kontaktusadók, stb.), logikai kapuk (és, vagy) időzítők, kódolvasók, kapcsolók, és sziréna! A kontaktus jellegű érzékelők paraméterezéstől függően nyitásra, vagy zárásra riasszanak! Tetszőlegesen bonyolult modell legyen felépíthető a komponensek és a logikai kapuk egyszerű összekapcsolásával!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Meteorológiai adatgyűjtő

Tervezzen objektummodellt meteorológiai adatgyűjtő rendszer működésének modellezésére! A modellben legyenek érzékelők (csapadék, hőmérséklet, páratartalom, szélerősség, stb.), adatkoncentrátorok, adattárolók, és megjelenítők!
Az adatkoncentrátorok maximum 8 érzékelő vagy koncentrátor jelét tudják fogadni. Az adattárolónak csupán egy bemente van, de több megjelenítő is kapcsolható hozzá. Tetszőlegesen bonyolult modell legyen felépíthető a komponensek egyszerű összekapcsolásával! Legyen lehetőség napi és heti adatlekérdezésre!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Autópálya forgalma

Készítsen objektummodellt az autópálya forgalmának modellezésére! Egy L cellára osztott autópályán N autó van. Egy cellában csak egy autó tartózkodhat egyszerre, így L-N cella üres. Minden autónak van egy egész értékű sebessége. A szimulációt ciklusonként végezzük. Minden ciklusban minden autóra elvégezzük a következő műveleteket:

  1. Ha egy autó sebessége még nem érte el a maximumot (5), akkor a sebességét eggyel megnöveljük.
  2. Ha egy autó előtt levő üres cellák száma (az előtte levő autóig) kisebb, mint a sebessége, akkor az autó sebességet lecsökkentjük az előtte levő üres cellák számának megfelelő értékre.
  3. Egy adott p(=0.15) valószínűséggel csökkentjük a mozgó autók sebességet eggyel. (Vezetők figyelmetlensége).
  4. Minden autót előremozgatunk annyi cellával, amennyi a sebessége.

Egyszerű karakteres kimenetet feltételezve "rajzolja ki" az autópálya állapotát egy-egy szimulációs ciklus után.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Árverés

Készítsen objektummodellt árverés modellezésére! A "Vásárló" objektumok miután megkapták a legutolsó árat, véletlenszerűen licitálnak, vagy nem licitálnak. A "Szervező" objektum kiáltja ki az árat, ill. megfelelő licit esetén leüti (eladja) azt.
Készítsen egyszerű programot, amelyben egy "Szervező" objektum több (~30) vásárló objektum részvételével elárverez egy konkrét árut!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Telefonálás

Készítsen objektummodellt telefonálás modellezésére! A "Készülék" objektumok egymásnak küldött üzenetekkel modellezzék a telefonálás leegyszerűsített folyamatát (hívás, hívásfogadás, beszéd, kapcsolat bontása)! Tervezzen egy "Kapcsolat" objektumot, mely képes két telefonálni tudó objektumot összekötni!
Készítsen egyszerű programot, melyben egy "Kapcsolat" objektum segítségével véletlenszerűen összekapcsol készülékeket! A megoldáshoz ne használjon STL tárolót!

Téglagyár

Tervezzen objektummodellt ipari folyamatot (pl. téglagyártás) felügyelő rendszer működésének modellezésére!
A rendszer nem szabályozó rendszer, nincs visszacsatolás benne, csak az érzékelők logikai kapcsolata alapján érzékelt üzemzavar esetén riaszt. A modellben legyenek érzékelők (szint, hő, kontaktusadók, stb.), logikai kapuk (és, vagy, nem) időzítők, kapcsolók, és vészcsengő! A kontaktus jellegű érzékelők paraméterezéstől függően nyitásra, vagy zárásra riasszanak! Tetszőlegesen bonyolult modell legyen felépíthető a komponensek és a logikai kapuk egyszerű összekapcsolásával!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Szerverfarm

Tervezzen objektummodellt számítógépek üzemeltetését segítő felügyeleti rendszer működésének modellezésére!
A modellben legyenek érzékelők (diszk kapacitás, memória kapacitás, processzor terheltség, szerverszoba hőmérséklet, tűzjelző, stb.), logikai kapuk (és, vagy, nem) kapcsolók, és vészcsengő! Tetszőlegesen bonyolult modell legyen felépíthető a komponensek és a logikai kapuk egyszerű összekapcsolásával!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Indításgátló

Tervezzen objektummodellt gépkocsi indításgátló rendszerének modellezésére! A modellben legyenek kontaktusadók, logikai kapuk, időzítők, számbillentyűs kódolvasó, és sziréna. A motor indítását engedélyező jel akkor adható ki, ha bizonyos kontaktusok zárva vannak, és a megfelelő 6 jegyű kódot beírták a kódolvasó billentyűzetén. Ha az ajtónyitástól eltelt 20 másodpercen belül nem írják be a helyes kódot, akkor kapcsoljon be a sziréna. Tetszőlegesen bonyolult modell legyen felépíthető a komponensek és a logikai kapuk egyszerű összekapcsolásával!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Számolótábla

Tervezzen objektummodellt számolótábla (Spreadsheet) modellezésére! Egy NxM-es négyzetrács minden rácspontján egyszerű aritmetikai műveleteket végző objektumok vannak. Az objektumok legyenek képesek egyszerű képletekben egymás adataira hivatkozni! Amennyiben egy adat megváltozik, a tábla számolja újra az érintett cellákat. Készítsen egyszerű felhasználói felületet a cellák tartalmának megváltoztatására! Nem kell interpretert készíteni a képletekhez! Elegendő, ha csak a számokat tartalmazó cellák változtathatók, a képletek megadása lehet fordítási idejű is!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Reptéri csomagok

Tervezzen objektummodellt reptéri csomagszállítás modellezésére!
Legyenek a modellben szállítószalagok, irányító csomópontok, csomagok és egy vezérlőközpont. A csomópontok a velük összeköttetésben levő szalagok bármelyikére át tudják tenni a csomagot, ha a központtól erre utasítást kapnak. Amikor egy csomag egy csomóponthoz érkezik, a csomópont érzékelője leolvassa a csomag úticélját, és a saját egyedi azonosítójával együtt továbbítja azt a központnak. A központ dönt, és utasítja a csomópontot, hogy melyik szalagra továbbítsa a csomagot.
A modell tegye lehetővé tetszőlegesen bonyolult rendszer modellezését!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Italrecept

Készítsen C++ programot italreceptek nyilvántartására! A program alapanyagokból építse fel a recepteket. Elegendő 3-4 receptet kezelnie, de legyen bővíthető. A programmal minimálisan a következő feladatokat kell ellátni:

  • új alapanyag bevitele az adatbázisba
  • új recept bevitele az adatbázisba
  • adatbázis kiírása fájlba
  • adatbázis beolvasása fájlból
  • recept törlése
  • kiválasztott ital hozzávalóinak listázása

Egyszerű felhasználói felületet tervezzen! A feladat lényege az objektumorientált megközelítés, ill. modellezés és nem a felhasználói felület szépsége. Használjon heterogén adatszerkezetet! A megoldáshoz ne használjon STL tárolót!


Levelek osztályozása

Tervezzen objektummodellt postai levélosztályozás modellezésére!
Legyenek a modellben szállítószalagok, irányító csomópontok, levelek és egy vezérlőközpont. A csomópontok a velük összeköttetésben levő szalagok bármelyikére át tudják tenni a levelet, ha a központtól erre utasítást kapnak. Amikor egy levél egy csomóponthoz érkezik, a csomópont érzékelője leolvassa a levél címzettjét, és a saját egyedi azonosítójával együtt továbbítja azt a központnak. A központ dönt, és utasítja a csomópontot, hogy melyik szalagra továbbítsa a levelet.
A modell tegye lehetővé tetszőlegesen bonyolult rendszer modellezését!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Pipeline

Tervezzen objektummodellt csővezeték (pipeline) feldolgozási architektúra modellezésére! A csővezeték-rendszerű feldolgozásban a feldolgozó elemek úgy kapcsolódnak egymáshoz, hogy a bemenetük a sorban megelőző elem kimenetére van kapcsolva. Minden feldolgozó egység bemenetén van egy véges kapacitású tároló, amiből a feldolgozó egy órajel hatására kiveszi a feldolgozandó adatot, majd egy, vagy több órajel alatt feldolgozza, és egy újabb órajel hatására az eredményt továbbadja a következő elem bemenetére, ha annak a bemeneti tárolója fogadóképes.
Olyan modellt tervezzen, hogy tetszőlegesen hosszú csővezetéket ki tudjunk alakítani, amin tetszőleges (generikus) adat végighaladhat! Az objektumok műveletvégző eleme szintén definiálható legyen! Modellezze egy palackozó gépsor működését, melyben mosó, töltő, és címkéző gépek kapcsolódnak egymáshoz. Az egyes gépek feldolgozó sebessége (hány órajelig tart) legyen paraméterezhető!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Töltött részecskék

Készítsen objektummodellt töltött részecskék kölcsönhatásának modellezésére! Legyen lehetőség minden részecske töltésének és kezdőpozíciójának egyszerű megadására. Ezt követően az egymással kommunikáló objektumok határozzák meg a rájuk ható erőket, és helyváltoztatással határozzák meg a nyugalmi pozíciójukat!
Javaslat: Az objektumok kommunikációját szervezzük gyűrűbe. A gyűrűben egy N elemű vektort körbeküldve mindenki megismerheti a többi objektum helyzetét és töltését, így miden objektum ki tudja számolni a rá ható erőket, amiből számítható az elmozdulás. Az iteráció addig folytatódik, míg be nem áll az egyensúlyi helyzet, vagy az iterációs ciklusszám el nem ér egy előre megadott értéket. Olyan modellt tervezzen, hogy tetszőleges számú részecske is modellezhető legyen!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!

Termelő-fogyasztó

Készítsen objektummodellt a termelő-fogyasztó probléma bemutatására! Legyen paraméterezhető termelés és a fogyasztás sebessége. Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Neumann modell

Készítsen objektummodellt egyszerű Neumann-elvű számítógép modellezéséhez! Definiáljon utasítás-objektumokat, melyek a memória-objektumban tárolhatók. A vezérlő egység feladata a memóriából kivenni a soron következő utasítás objektumot és aktivizálni ill. meghatározni a következő utasítás helyét.
Demonstrálja a működést egy egyszerű algoritmus megvalósításával (pl Fibonacci sorozat)! Nem kell a gép összes utasítását megvalósítani. Elegendő azokat, amit a demonstrációban felhasznál. A megoldáshoz ne használjon STL tárolót!


Generikus stack gép

Készítsen generikus stack gépet, amely képes műveletet végezni a legfelső két elem között! Definiáljon megfelelő műveleteket!
Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Használjon iterátort a gép feltöltésére!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Fájlrendszer

Tervezzen objektummodellt fa szerkezetű fájlrendszer modellezésére! A modellt úgy dolgozza ki, hogy a hierarchikus névtérben a UNIX fájlszerkezetéhez hasonló keresztkapcsolatok (linkek) is kialakíthatók legyenek!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Digitális áramkör

Készítsen egyszerű objektummodellt digitális áramkör szimulálására! A modell minimálisan tartalmazza a következő elemeket:

  • NOR kapu
  • vezérelhető forrás
  • összekötő vezeték
  • csomópont

A modell felhasználásával szimulálja egy olyan 5 bemenetű kombinációs hálózat működését, amely akkor ad a kimenetén hamis értéket, ha bementén előálló kombináció 5!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Útkereszteződés

Modellezze objektumokkal egy útkereszteződés forgalmát! Az útkereszteződésben 4 út találkozik, melyen autók haladnak át. A kereszteződésben csak egyenesen lehet haladni. A forgalmat irányító jelzőlámpának az egyszerűség kedvéért csak szabad és tilos jelzése van. Az autók a tilosnál megállnak, a szabad jelzésnél továbbhaladnak.
Legyen képes a modell perzisztens viselkedésre! Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz felhasználhat STL tárolót is!


Alagút

Modellezze objektumokkal egy gk. alagút forgalomirányítását! Az alagútban egyszerre csak egy irányban lehet haladni. A bejáratnál jelzőlámpa és érzékelő is van. Az érzékelő érzékeli a be- és kilépést az alagútból. Az autók a tilosnál megállnak, a szabad jelzésnél továbbhaladnak, és nem állnak meg az alagútban, de eltérő sebességgel haladhatnak. A lámpákat úgy vezérelje, hogy ne maradjon autó az alagútban!
Legyen képes a modell perzisztens viselkedésre!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz felhasználhat STL tárolót is!


Kalkulátor

Egy egyszerű BASIC-szerű nyelven programozható kalkulátornak egyetlen regisztere (a) és egy ciklusszámlálója (i) van. A számítási eredmények mindig az a regiszterben keletkeznek. A ciklusszámláló értékétől függően pedig feltételes ugrást lehet megvalósítani. Így igen egyszerű számítások programozhatók be. Az alábbi program például kiírja az első 5 páratlan számot.

     10 let a=1
     20 let i=5
     30 print a
     40 let a=a+2
     50 let i=i-1
     60 if i>0 goto 30

Készítsen objektummodellt a kalkulátor működésének modellezésére! Definiáljon utasítás-objektumokat, melyek egy tároló objektumban tárolhatók. A működtető program feladata a tárolóból kivenni a soron következő utasítás-objektumot és végrehajtani azt, majd meghatározni a soron következő utasítás helyét.
Bővítse a modellt újabb utasításokkal (pl. input) és újabb regiszterekkel!
Demonstrálja a működést egy olyan programmal ami n!-t számol! n értékét olvasa be! A megoldáshoz ne használjon STL tárolót!

Megj: nem BASIC interpretert kell írni!


Join

Készítsen olyan fájlt reprezentáló objektumot, amelynek rekordjai egy kulcsmezőt és tetszőleges számú adatmezőt tartalmaznak! Valósítsa meg a UNIX join(1) program funkcióit!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!
A UNIX parancsok pontos leírását a man paranccsal kérdezheti le. A parancs nevét követő zárójelben a man kötet sorszáma található.


3. Osztályok

Titkosító osztály

Készítsen titkosító osztályt! Az osztály legyen képes tetszőleges hosszúságú szöveg kódolt formátumú tárolására. A kódoláshoz olyan egyszerű műveletet használjon, ami nem függ a kódolandó szöveg hosszától (pl. kizáró vagy). Valósítsa meg a szokásos string műveleteket! Az osztályt úgy tervezze meg, hogy az örökléssel könnyen felhasználható legyen, az algoritmus könnyen cserélhető legyen! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Dinamikus sztring

Készítsen olyan dinamikus sztringet, melyben a sztring karaktereit 20 karakter tárolására alkalmas tárolókból kialakított láncolt listában tárolja! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is! Legyen képes az objektum perzisztens viselkedésre!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Generikus shift regiszter

Készítsen generikus ciklikus shift regisztert! Mérete sablon paraméterrel legyen definiálható! Mindkét irányba lehessen léptetni! Legyen lehetőség a visszacsatolásba egy függvényt illeszteni, ami a visszaforgatott generikus adatot tudja módosítani! Legyen lehetőség a regiszter betöltésére is! Használja fel az elkészített objektumot Johnson számláló készítésére!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz A megoldáshoz ne használjon STL tárolót!


Naptár osztály

Készítsen naptár tárolására osztályt! Az osztály legyen képes tetszőleges naptári napot lefoglalni, és le lehessen kérdezni, hogy eddig milyen napok foglaltak, valamint egy adott nap foglalt-e vagy szabad (szabad, ha nem foglalt). Számítsa ki, hogy egy adott naptári nap milyen napra esik. Az osztály legyen képes két naptári nap összehasonlítására, eltelt napok számának kiszámítására! Legyen lehetőség táblázatos formában éves, és havi naptár nyomtatására! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Szófa

Készítsen szófa (Trie) objektumot! A szófa olyan fa, melynek élein betűk vannak. Az éleken levő betűk összeolvasásával alakul ki egy teljes szó. Szótárakban hatékonyan alkalmazható adatszerkezet. Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Használjon iterátort is!

Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Pufferelt fájl

Készítsen fájl pufferelt kezelését megvalósító objektumot! A puffer mérete, a fájl útvonala és neve az objektum létrehozásakor legyen megadható. Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet!
A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Állapotgép

Készítsen objektumot állapotgép megvalósításához! Az egyes műveleteket a művelet objektumok függvényhívás operátorával valósítsa meg! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Használjon iterátort is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Kifejezés fa

Készítsen kifejezés fát reprezentáló osztályt! Definiáljon egyszerű általánosított műveleteket, amelyeket kiértékel a kifejezésfa segítségével! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Suffix array

Készítsen objektumot ún. suffix array megvalósításához! A suffix array a stringekben történő keresést gyorsítja. Lényegében egy olyan tömb, amiben rendezetten tároljuk az összes olyan stringet, ami előállítható egy adott stringből a string elején levő karakterek elhagyásával. Pl: az "ojjektumje" stringből előállítható stringek:

        0 ojjektumje
        1 jjektumje
        2 jektumje
        3 ektumje
        4 ktumje
        5 tumje
        6 umje
        7 mje
        8 je
        9 e

A stringek előtt álló számok a string elejéről elhagyott karakterek számát jelentik, ami nem más, mint az eredeti string azon pozíciója, ahol az előállított string kezdődik. Az így kapott stringeket és pozíciókat a suffix array rendezve tárolja. Példánkban ez a következő:

       0. 9 e
       1. 3 ektumje
       2. 8 je
       3. 2 jektumje
       4. 1 jjektumje
       5. 4 ktumje
       6. 7 mje
       7. 0 ojjektumje
       8. 5 tumje
       9. 6 umje

Itt az első szám a tömb indexe, a második az elhagyott karakterek száma. Mivel a tömb rendezett, bináris kereséssel gyorsan és hatékonyan lehet benne keresni. Ami megkönnyíti egy tetszőleges minta keresését az eredeti stringben. Tegyük fel, hogy keressük "je" minta előfordulásait az "ojjektumje" stringben. A suffix stringben való bináris kereséssel azt kapjuk, hogy a suffix array 2. és 3. indexei határolják a keresett "je" mintát. Így innen könnyen kiolvasható, hogy a "je" minta az eredeti "ojjektumje" stringben a 8. és 2. pozíción található meg. A példában csak két pozíciót találtunk, de elképzelhető, hogy egy minta kettőnél többször illeszkedik, ezért célszerű iterátorral visszaadni a talált pozíciókat.
Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Szemétgyűjtő

Tervezzen olyan segédobjektumokat, amelyek lehetőséget adnak az automatikus "szemétgyűjtésre" (a már nem használt dinamikus memóriaterületek automatikusan felszabadulnak)!
A működés alapja röviden a következő: Nyilván kell tartani minden dinamikusan létrehozott objektumban, hogy hivatkoznak-e rá pointerrel. Ha nem, akkor az objektum törölhető a dinamikus memóriából. Ez megvalósítható, ha minden objektumot egy speciális alaposztályból származtatunk, valamint minden objektumot csak egy ún. "okos" (smart) pointeren keresztül érünk el, ami természetesen szintén egy objektum.
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Konfiguráció beolvasó

Készítsen osztályt konfigurációs fájl beolvasásához! Az osztály olvassa be a megadott fájlt, és az abban leírt kulcs-érték párokat tárolja el. Az osztálynak legyen olyan generikus függvénye, amivel egy adott kulcshoz tartozó (sztringként tárolt) értéket vissza tud adni a generikus típusra (T) konvertálva. A konverzió egyszerűsítése érdekében megkövetelheti, hogy a generikus típusra értelmezett legyen az operator>>(stringstream&, T&) művelet. A konfigurációs fájl sorokból áll. Az egyes sorok szerkezetét a következő EBNF leírással adjuk meg:

     <sor>::= <üres>
             |<komment>
             |<kulcs>=<érték>
     <komment>:: # <tetszőleges_karaktersorozat>
     <kulcs>::= <betűvel_kezdődő_alfanumerikus_karaktersorozat>
     <érték>::= <szó>
               | "<tetszőleges_karaktersorozat>"
               | '<tetszőleges_karaktersorozat>'
     <szó>::= <alfanumerikus_karaktersorozat>
   Példa konfigurációs fájlra:

   # Világegyenlet-megoldó konfig
   # a következő érték egész szám, a generikus fv. int-ként adja vissza:
   valtozok=2

   # karaktertömb, a generikus fv. C-sztring vagy std::string típusra konvertálja,
   # attól függően, hogy a generikus fv. melyik példányát használták.
   copyright="BME, Budapest"

   # a következő bool típus:
   megoldhato=false

   # példa utolsó sora

Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz felhasználhat STL tárolót, vagy algoritmust is!


Lookup tábla

Készítsen lookup táblát egyváltozós skalár függvények függvényértékeinek gyors kiszámításához! Alkalmazzon a köztes értékek kiszámításához interpolációt!
Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Használjon iterátort! Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


4. Generikus osztályok

Generikus fésűs lista

Készítsen generikus rendezett fésűs listát! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg!
A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus hash

Készítsen generikus hash táblát! Az ütközéseket láncolt listával oldja fel! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus Tuple

Készítsen generikus, maximum 4 elemű Tuple osztályt. Készítsen a Tuple objektumokhoz tárolót is! Legyen lekérdezhető külön-külön a tárolt objektumok elemeinek halmaza! (külön az első, külön a második, stb.) (Ld. http://en.wikipedia.org/wiki/Tuple )
Demonstrálja a működést külön modulként fordított tesztprogrammal! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus asszociatív tömb

Készítsen generikus asszociatív tömböt (associative array)! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Multimap

Készítsen az STL multimap osztályához hasonló funkcionalitású osztályt! Nem kell minden funkciót ugyanúgy megvalósítani. Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is! Legyen képes az objektum perzisztens viselkedésre!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Generikus mátrix

Készítsen generikus intelligens mátrixot, melynek mérete definiálható! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Használjon iterátort is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus ritka mátrix

Készítsen generikus ritka mátrixot (sparse matrix), melynek mérete definiálható! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Az osztálynak legyen iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus felső háromszög mátrix

Készítsen generikus felső háromszögmátrixot, melynek mérete definiálható! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Az osztálynak legyen iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus irányítatlan gráf

Készítsen generikus irányítatlan gráfot! A gráf megadása szomszédsági mátrixszal történjen! A csomópontokat osztállyal reprezentálja! Definiáljon műveleteket annak meghatározására, hogy a gráfnak hány csomópontja és hány éle van! Szélességi bejárással állapítsa meg, hogy a gráf összefüggő-e!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A megoldáshoz ne használjon STL tárolót!


Generikus lista

Készítsen generikus duplán láncolt rendezett listát! A kulcsok közötti rendezettséget a szokásos relációs operátorokkal vizsgálja, amit szükség esetén specializál! Használjon strázsát a lista elején!
Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az osztálynak iterátora is! Legyen képes az objektum perzisztens viselkedésre!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Generikus fa

Készítsen generikus bináris fát! A kulcsok közötti rendezettséget a szokásos relációs operátorokkal vizsgálja, amit szükség esetén specializál! Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Az osztálynak legyen iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus kupac

Készítsen generikus kupac (heap) adatstruktúrát! A kupacot ne tömbben tárolja! Valósítsa meg a kupac rendezés algoritmusát! A kupac egy speciális bináris fa.
Valósítsa meg az összes értelmes műveletet operátor átdefiniálással (overload), de nem kell ragaszkodni az összes operátor átdefiniálásához! Legyen az objektumnak iterátora is!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A programmal mutassa be a generikus szerkezet használatát több egyszerű adathalmazon, amit fájlból olvas be, és egy olyan saját osztályon, amely dinamikus adatot tartalmaz. A megoldáshoz ne használjon STL tárolót!


Generikus integrátor

Készítsen generikus numerikus integrátort téglány módszerrel! A teszteléshez készítsen három függvényobjektumot: egy négyzetfüggvényt, egy köbfüggvényt, és egy olyan összetett függvényt, ami két tetszőleges függvény összege. Az összetett függvényobjektum tárolja heterogén kollekcióként a két másik objektumot. A függvényosztályok közös ősének már legyen függvényhívás operátora. A fenti függvényosztályok szemléltetése kódrészlettel:

  struct Fuggveny { /*közös ős*/
    virtual int operator()(int x) = 0;
    virtual ~Fuggveny() {}
  };
  ...
  NegyzetFuggveny f; KobFuggveny g; OsszegFuggveny h(f, g);
  int x = ...
  if (h(x) != f(x) + g(x)) { /*ez nem fordulhat elő*/ }

A megoldáshoz ne használjon STL tárolót!


5. Játékok

Kő-papír-olló játék

Tervezzen objektummodellt a kő-papír-olló játék modellezéséhez! Célunk, hogy a különböző stratégiával játszó játékosokat összesorsolva megállapítsuk a legjobb stratégiát, ha van ilyen. A modellben legyenek "Játékos" objektumok, melyek egy "Napló" objektum felügyeletével játszanak. Ez utóbbi gyűjti a statisztikát.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Barkochba

Készítsen olyan barkochba játékot, ahol a gép kérdez, és képes tanulni!
A játék lényege, hogy a kérdéseket és válaszokat egy bináris fában tároljuk. A fa csomópontjaiban mindig kérdés van, a leveleken pedig mindig rákérdezés. A csomópontokból kiindulva 'igen' válasz esetén az egyik (pl. bal), 'nem' válasz esetén a másik (pl. jobb) ágon haladva eljutunk egy levélhez. Ekkor "rákérdez" a gép. Ha a válasz nem volt jó, akkor megkérjük a válaszadó játékost, hogy tegyen fel megfelelő eldöntendő kérdést, és adja meg a hozzá tartozó válaszokat. A "tanulás" abból áll, hogy ezt a kérdést és a válaszokat be kell építeni a fába.
Hozzon létre olyan objektumokat, amivel a játék megvalósítható! Valósítsa meg az objektumokat perzisztens módon, így a játék el tudja menteni a felépült adatbázisát.
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Kalandjáték

Tervezzen objektummodellt kalandjáték objektumainak leírására! Legyen pálya, harcos, szörny, és legyenek tárgyak, amit a harcos fel tud szedni. Határozza meg az objektumok kapcsolatát és felelősségét!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Táblás játék

Tervezzen cella-objektumot táblás játékok modellezésére! Az objektum legyen képes tárolni (hivatkozással) a rajta álló bábut, valamint a szomszédsági kapcsolatokat. Feltételezheti, hogy maximum 4 szomszédja van egy cellának! A bábu nem ismeri az abszolút koordinátáit, ezért csak a saját pozíciójához relatív koordinátái alapján tudja lekérdezni tábla tetszőleges pozícióját!
Specifikáljon egy egyszerű tesztfeladatot, amiben fel tudja használni az elkészített adatszerkezetet! A tesztprogramot külön modulként fordított programmal oldja meg! A megoldáshoz ne használjon STL tárolót!


Demokratikus sakk

Tervezzen "demokratikus sakk" modellezésére objektummodellt! Ebben a játékban a táblán a figurák önállóan döntenek, hogy hova lépnek. Minden figura tudja a saját szabályait. A megvalósítandó modellben felváltva választunk egy-egy figurát a sötét, ill. a világos mezőkről és megkérjük azokat, hogy lépjenek. Az egyszerűség kedvéért csak gyalogokat modellezzen!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Reversi

Készítsen objektumot a reversi (Othello) nevű játék megvalósításához! Az objektum tárolja a játék állását és "ismerje" a szabályokat, azaz automatikusan "forgassa" át a megfelelő korongokat, melyek szintén objektumok!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Malom

Készítsen objektumot a malom nevű játék megvalósításához! Az objektum tárolja a játék állását és "ismerje" a szabályokat, azaz ne engedjen hibás lépést! A figurákat is objektumokkal valósítsa meg!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Amőba

Készítsen objektumot az amőba nevű játék megvalósításához! Az objektum tárolja a játék állását és "ismerje" a szabályokat, azaz ne engedjen hibás lépést! A "figurákat" is objektumokkal valósítsa meg!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Kígyó

Tervezzen objektummodellt kígyójáték objektumainak leírására! Legyen pálya, kígyó, gyümölcs, amit a kígyó fel tud szedni. Határozza meg az objektumok kapcsolatát és felelősségét!
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Hexxagon

Tervezzen objektummodellt Hexxagon játék modellezésére. A pálya hatszögletű elemekből áll. Mindkét fél néhány bábuval indul. a Játékosok felváltva léphetnek, ill. ugorhatnak bábujukkal. Lépni csak a szomszédos mezőbe lehet, ugrani pedig egy mezővel messzebb. A lépéskor az adott játékos bábuja osztódik (a régi helyen és az új helyen is lesz bábuja. Ugráskor nem. Az újonnan lerakott bábu mellett az ellenség bábui színt váltanak, azaz a lépő játékos megnyeri azokat. (ld: http://www.youtube.com/watch?v=_E10ydLaLE8)
Demonstrálja a működést külön modulként fordított tesztprogrammal! A játék állását nem kell grafikusan megjeleníteni, elegendő csak karakteresen, a legegyszerűbb formában! A megoldáshoz ne használjon STL tárolót!


Utolsó frissítés: 2017-03-13 01.12