Objektum elvu alkalmaza sok fejleszte se 3. beadandó feladat Szerző Név: Budai Martin Neptun-kód: PLAB9E E-mail: budai.martin@outlook.com Kurzuskód: 4 Feladat sorszáma: 2 Feladat Egy bolygón különböző fajtájú növények élnek, minden növény tápanyagot használ. Ha egy növény tápanyaga elfogy (a mennyisége 0 lesz), a növény elpusztul. A bolygón három fajta sugárzást különböztetünk meg: alfa sugárzás, delta sugárzás, nincs sugárzás. A sugárzásra a különböző fajtájú élő növények eltérő módon reagálnak. A reakció tartalmazza a tápanyag változását, illetve a következő napi sugárzás befolyásolását. A másnapi sugárzás alakulása: ha az alfa sugárzásra beérkezett igények összege legalább hárommal meghaladja a delta sugárzás igényeinek összegét, akkor alfa sugárzás lesz; ha a delta sugárzásra igaz ugyanez, akkor delta sugárzás lesz; ha a két igény közti eltérés háromnál kisebb, akkor nincs sugárzás. Az első nap sugárzás nélküli. Szimuláljuk a növények viselkedését és minden lépésben írjuk ki az összes növényt a rájuk jellemző tulajdonságokkal, valamint az aktuális sugárzást! Minden növény jellemzői: az egyedi neve (string), a rendelkezésre álló tápanyag mennyisége (egész), hogy él-e (logikai). A szimulációban részt vevő növények fajtái a következők: puffancs, deltafa, parabokor. A következőkben megadjuk, hogy az egyes fajták miként reagálnak a különböző sugárzásokra. Először a tápanyag változik, és ha a növény ezután él, akkor befolyásolhatja a sugárzást. A program egy szövegfájlból olvassa be a szimuláció adatait! Az első sorban a növények száma szerepel. A következő sorok tartalmazzák a növények adatait szóközökkel elválasztva: a növény nevét, a fajtáját és a kezdetben rendelkezésére álló tápanyag mennyiségét. A fajtát egy karakter azonosít: a - puffancs, d - deltafa, p -parabokor. A növényeket leíró részt követő sorban a szimuláció napjainak száma adott egész számként. A program kérje be a fájl nevét, majd jelenítse meg a túlélők nevét! (Feltehetjük, hogy a fájl formátuma helyes.) 3. beadandó feladat 1
Statikus osztálymodell Simulation A Simulation osztály futtatja a szimulációt, tárolja a résztvevő növényeket és a sugárzás mértékét. A metódusok közül (a konstruktoron és a destruktoron kívül) csak a Run publikus. Adattagjai: numberofplants: a szimulációban résztvevő növények száma plnats: tárolja a szimulációban résztvevő növényeket days: a szimuláció hossza input: a futtatáshoz szükséges adatokat tartalmazó fájl HAARP: a napi sugárzás fajtája Metódusai: Simulation: konstruktor, megnyitja az input fájlt és beolvassa a növények és napok számát, valamint a növények adatait ~Simulation: destruktor, törli a növényeket tartalmazó tömböt és bezárja az input fájlt sethaarp: beállítja a napi sugárzást a növények sugárzásigényének megfelelően gethaarp: kiírja, hogy jelenleg milyen sugárzás hat a növényekre listplants: kilistázza az összes növényt, és azok minden adatát, illetve azt is kijelzi, hogy az adott növény elpusztult-e listsurvivors: kilistázza azoknak a növényeknek a nevét, akik életben vannak Run: lefuttatja a szimulációt Sugárzás Egy felsoroló, amely a lehetséges sugárzásokat tartalmazza. Értékei a következők lehetnek: Alpha Delta None 3. beadandó feladat 2
Plants Ez egy absztrakt osztály, melyből az összes növény származik. Adattagjai: name: a növény neve nutrition: a növény tápanyagszintje HAARPinfluence: a növény sugárigénye life: értéke igaz, ha még él a növény Metódusai: Plant: konstruktor, kötelező megadni a növény nevét és a kezdeti tápanyagértékét. Emellett a life változót igazra állítja, és nullázza a sugárigényt. setnutrition: absztrakt metódus, a napi sugárzás függvényében beállítja a növény tápanyagszintjét sethaarpinfluence: absztrakt metódus, beállítja a növény napi sugárigényét gethaarpinfluence: visszaadja a növény napi sugárigényének mértékét getname: visszaadja a növény nevét killattempt: absztrakt metódus, megpróbálja megölni a növényt. Alapértelmezett esetben a növény akkor pusztul el, ha tápanyagszintje 0, vagy az alá kerül. isdead: megadja, hogy elpusztult-e a növény Puffancs és metódusai nincsenek. Viselkedését az alábbi táblázat írja le. Sugárzás típusa Tápanyag változása Alpha +2 Delta -2 None -1 A növény minden esetben 10-tápanyag mértékben növeli az Alpha sugárzás mértékét. A növény elpusztul, ha a tápanyag mértéke 10 fölé emelkedik. Deltafa és metódusai nincsenek. Viselkedését az alábbi táblázatok írják le. Sugárzás típusa Tápanyag változása Alpha -3 Delta +4 None -1 Tápanyag mennyisége Sugárigény < +4 Delta - 10 +1 Delta > 10-3. beadandó feladat 3
Parabokor és metódusai nincsenek. Akár alfa, akár delta sugárzás hatására a tápanyag mennyisége eggyel nő. Sugárzás nélküli napon a tápanyag eggyel csökken. A másnapi sugárzást nem befolyásolja. Megvalósítás A szimulációt a Simulation osztály vezérli. A főprogramban egy ilyen osztályt hozunk létre, és a szimulációt a Run()metódussal futtatjuk le. Először kiírja a kezdőállapotot, tehát a konsturktor által beolvasott adatokat. Ezután egy ciklus következik, amely annyiszor fut le, ahány napig tart a szimuláció. Minden egyes nap először beállítjuk a növények tápanyagmennyiségét, majd ellenőrizzük, hogy életben maradt-e, és ha igen, akkor beállítjuk a napi sugárigényét. Miután ezt minden növénnyel megtettük, akkor beállítjuk a következő nap sugárzását és kiírjuk a növények új adatait. Végül, a ciklus lefutása után listázzuk az életben maradt növények neveit. Tesztelési terv A példában megadott bemenet (teszt.txt) 4 Falánk a 2 Sudár d Köpcös p 4 Nyúlánk d 3 10 Sudár Nyúlánk Csak Puffancsok (puffancs.txt) 4 Puff a 7 Paff a 4 Piff a 3 Peff a 7 Piff Csak Deltafák (delta.txt) 3 Deltinátor d 6 Deltina d 3 Della d 4 7 Deltinátor Deltina Della 3. beadandó feladat 4
Csak Parabokrok (para.txt) 3 Paraúr p 6 Paráné p 3 Parácska p 2 Paraúr 0 db növény (nulla.txt) 0 0 napig futtatott szimuláció (nulla_nap.txt) Para p Puff a 4 Deltorio d 2 Levélke a 2 Epszilon d 3 0 Para Puff Deltorio Levélke Epszilon Nem létező fájl megadása esetén a program újból bekéri a fájl nevét Helytelenül kitöltött fájl esetén a program helytelenül működik 3. beadandó feladat