Programozás 1, Géptermi ZH, 2011. 06. 01.

A ZH menete
A géptermi ZH írása közben a gépterem gépeivel kell dolgozni. Ha kérdésed van, csendesen jelezd a felügyelőnek. Ha úgy érzed készen vagy, megkérheted a gyakorlatvezetőt vagy a segédeket, hogy az értékelés előtt ránézzenek, és esetleges hibákra rámutassanak. Ha úgy döntesz, hogy értékelteted a programot, akkor az értékelést a gyakorlatvezető, vagy a tantárgyfelelős végzi, és az eredménye végleges.

Szeretném hangsúlyozni, hogy a ZH kiírásakor nem lebegett a kiírók szeme előtt egyetlen tökéletes megoldás, a leírtak sok lehetséges megoldási stratégia során felmerülő esetleges kérdéseket válaszolják meg. Olyan jellegű reklamációt nem fogadunk el, hogy a feladat szövegéből azt a célzást értette el valaki, hogy egy adott megoldás az elvárt megoldás, és az nem optimális, vagy túl nehéz. Implementáld a legelegánsabb olyan megoldást, amit implementálni képes vagy, és ne igyekezz megfelelni olyan elvárásnak, amit nem támasztottak veled szemben.

A feladatok
A ZH két feladatból áll, egy kötelezőből, és egy extrából. A kötelező feladatot az érvényes géptermi ZH-hoz legalább annyira meg kell oldani, hogy a beadandókban megszokott minőségről megnyugtatóan megmutassa a hallgató, hogy személyesen sem okoz problémát. (a beadandókra kapott pontarány fele fölött már biztosan érvényes a géptermi ZH, ez alatt a gyakorlatvezető döntése) Az extra feladat megoldásával további pontok gyűjthetőek, tökéletes megoldásért a kötelezőre kapható maximális pontszám fele.

A kötelező feladat

Adott egy futballcsapat, amelyiknek az edzője statisztikát vezet a játékosokról. Minden játékosról szeretné feljegyezni, hogy melyik ellenféllel melyik napra eső meccsen miket csinált:
hány gólt rúgott, hány gólpasszt adott, hány sikeres szerelést hajtott végre.

Az edző szeretné a statisztikát a csapat lótifutijával a kommentátori állásból már a meccs ideje alatt feltölteni, ezért a következő műveleteket kell implementálni:
egy adott játékos egy adott ellenféllel szemben egy adott napon gólt rúgott
egy adott játékos egy adott ellenféllel szemben egy adott napon gólpasszt adott
egy adott játékos egy adott ellenféllel szemben egy adott napon sikeresen szerelt
kommentátor kedvéért adott játékos teljes statisztikájának átlagainak megjelenítése
kommentátor kedvéért adott játékos ezévi statisztikájának átlagainak megjelenítése

Emellett ritkábban előfordul játékosok felvétele és elbocsátása. Egy éven belül többször is találkozhat két csapat. Ha szeretnéd, elvárhatod, hogy egy adott meccs indítása és befejezése külön függvény hívásával jelezhető legyen, és ezt a lótifuti meg is fogja hívni. Az biztos, hogy meccs ideje alatt a csapat nem szerződtet játékost, és nem is bont szerződést, illetve a dátum sem változik meccs közben..

Amit a futball szabályai közül nem veszünk figyelembe: nincs megkötés egy meccsen játszó játékosok számára, más szavakkal az olyan megoldás, ami megengedi, hogy egy meccsen 54 játékos szerezzen gólt, nem számít hibának. Ha egy játékos nem vesz részt egy meccsen, az pont olyan, mintha részt venne, de nem csinálna semmit, ezt külön nem kell tárolni.

Pontozás: a fenti feladatrészek megléte 20 pont a 30-ból. A maradék 10 ponthoz be kell tudni tölteni fájlból a program indításakor azokat az adatokat, amiket az előző futás végén tároltunk. A fájl formátuma szabadon eldönthető.
A feladatra részpontszámot a konténerrendszer ügyes megválasztásával, fontos funkciók önállóan tesztelt implementálásával, és a láthatósági szabályok értelmes használatával lehet kapni. A meccsek alatt használt részfeladatok hatékonysága fontos szempont. Ha van meccs elejét és végét jelző függvény a programban, azok lehetnek lassúak is.

Az extra feladat: a graf könyvtárban található képeket kell reprodukálni akár interaktívan, akár csak a fájlok generálásával. A képek a Fibonacci sorozat egy szemléletes ábrázolását tartalmazzák. A géptermi ZH érvényességét ezzel a feladattal is el lehet érni, de csak akkor, ha tökéletesen működő programot sikerül létrehozni, részpontszámokból ez nem megy, ezért érdemes a másik feladattal kezdeni.