OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

Hasonló dokumentumok
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

A következő táblázat tartalmazza az egyes fajták jellemzőit.

Programozási technológia I. 1. beadandó feladatsor

Objektum elvu alkalmaza sok fejleszte se

Programozás Minta programterv a 2. házi feladathoz 1.

Programozás Minta programterv a 1. házi feladathoz 1.

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Objektum elvű alkalmazások fejlesztése 3. beadandó

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Bevezetés az informatikába

RESIDENT EVIL CODENAME: NIK

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Algoritmizálás, adatmodellezés tanítása 6. előadás

Tervminták I. (Sablonfüggvény, Stratégia, Egyke, Látogató) Testek térfogata Lények túlélési versenye

Programozási nyelvek II. JAVA

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

ELEMI PROGRAMOZÁSI TÉTELEK

Tájékoztató. Használható segédeszköz: -

Szkriptnyelvek. 1. UNIX shell

INFORMATIKAI ALAPISMERETEK

BME MOGI Gépészeti informatika 8.

Algoritmusok és adatszerkezetek I. 4. előadás

Tájékoztató. Használható segédeszköz: -

OOP. Alapelvek Elek Tibor

Dokumentáció. 1. Beadandó feladat

Programkonstrukciók A programkonstrukciók programfüggvényei Levezetési szabályok. 6. előadás. Programozás-elmélet. Programozás-elmélet 6.

3. ZH-ban a minimum pontszám 15

Pénzügyi algoritmusok

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Bevezetés a Python programozási nyelvbe

Bevezető feldatok. Elágazás és összegzés tétele

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

C++ programozási nyelv

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Algoritmizálás és adatmodellezés tanítása 1. előadás

S0-02 Típusmodellek (Programozás elmélet)

ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

1. beadandó feladat: objektumorientált konzol felületű alkalmazás

ELTE SAP Excellence Center Oktatóanyag 1

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozási alapismeretek 4.

Az összetett programozási tételek is egy tőről fakadnak

7. gyakorlat Sorozatok, Fájlkezelés

Objektumorientált programozás C# nyelven

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozási nyelvek II. JAVA

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Bevezetés a programozásba I.

III. OOP (objektumok, osztályok)

Programozási nyelvek Java

Osztályok. 4. gyakorlat

Maximum kiválasztás tömbben

32. A Knuth-Morris-Pratt algoritmus

JAVA PROGRAMOZÁS 2.ELŐADÁS

Regionális forduló november 19.

INFORMATIKAI ALAPISMERETEK

Kirakós játék. Döntő február 22. Alakzatok (katalógus) DUSZA ÁRPÁD ORSZÁGOS PROGRAMOZÓI EMLÉKVERSENY 2013/2014

Web-programozó Web-programozó

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Programozási nyelvek Java

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Objektum orientált kiterjesztés A+ programozási nyelvhez

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

C++ programozási nyelv

Öröklés és Polimorfizmus

Programtervezés. Dr. Iványi Péter

Bevezetés a programozásba I.

Objektumorientált Programozás VI.

Algoritmizálás és adatmodellezés tanítása 2. előadás

és az instanceof operátor

Algoritmizálás, adatmodellezés 1. előadás

BASH SCRIPT SHELL JEGYZETEK

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

OOP: Java 8.Gy: Abstract osztályok, interfészek

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Megerősítéses tanulás 7. előadás

Információs technológiák 1. Gy: HTML alapok

Pénzügyi algoritmusok

A fizetendő összegből a 35 év fölötti tulajdonos 20 % kedvezményt kap.

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Gyakorló feladatok az 1. nagy zárthelyire

Egyetemi könyvtári nyilvántartó rendszer

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Globális operátor overloading

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Átírás:

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak. Egy lénynek a terep fajtájától függően változik az életereje, miközben azon keresztül halad, és közben a terep fajtáját is átalakítja. Először az első lény próbál végig jutni a pályán, hacsak el nem fogy az életereje és elpusztul. Egy terep akkor is átalakul, ha azon áthaladva egyébként a lény elpusztul. Ezen az átalakított pályán indul a második lény, majd sorban a többi. Adjuk meg a pályán végig jutó, életben maradt lények neveit! A pályán három fajta terep fordulhat elő: fű, homok, mocsár. A lények különböző fajokhoz tartoznak. Három féle fajt különböztetünk meg. Zöldike: füvön az életereje eggyel nő, homokon kettővel csökken, mocsárban eggyel csökken; a mocsaras terepet fűvé alakítja, a másik két terep fajtát nem változtatja meg. Buckabogár: füvön az ereje kettővel csökken, homokon hárommal nő, mocsárban néggyel csökken; a füvet homokká, a mocsarat fűvé alakítja, de a homokot nem változtatja meg. Tocsogó: füvön az életereje kettővel, homokon öttel csökken, mocsárban hattal nő; a füvet mocsárrá alakítja, a másik két fajta terepet nem változtatja meg. Minden lénynek van neve (sztring), ismert az aktuális életereje (egész szám) és a fajtája. Amíg az életereje pozitív, addig a lény életben van. A verseny adatait egy szövegfájlból olvassuk be! A fájl első sora tartalmazza a lények számát, amelyet a lények adatai követnek. Egy karakter azonosítja a lény fajtáját, amit szóköz után a lény neve követ, majd a lény kezdeti életereje. Az azonosítók: Z zöldike, B buckabogár, T tocsogó. A lények után következik a pálya leírása. Egy egész szám adja meg a pálya hosszát, amit pontosan ennyi szóközökkel elválasztott egész szám követ, amelyek a terepek fajtái adják meg. A fajták azonosítói: 0 homok, 1 fű, 2 mocsár. Feltehetjük, hogy a fájl formátuma helyes. Elemzés 1 A feladat önálló objektumai a különféle tulajdonságokkal rendelkező lények, amelyek három csoportba sorolhatók: zöldikék, a buckabogarak és a tocsogók. Mindegyiknek van neve és életereje, meg lehet róla kérdezni, hogy hívják, él-e még (az életereje pozitív-e), és meg lehet vizsgálni, mi történik, ha a versenypálya egy bizonyos terepén áthalad. Egy terepen történő áthaladás az alábbi módon hat a lényre illetve a terepre: Zöldikék esetén, feltéve, hogy az életerő pozitív: homok -2 - fű +1 - mocsár -1 fű 1 Az elemzés rész a hallgatói beadandó dokumentációjából elhagyható, az átalakítási táblázatokat a tervezés részben is fel lehet tüntetni.

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 2. Buckabogarak esetén, feltéve, hogy az életerő pozitív: homok +3 - fű -2 homok mocsár -4 fű Tocsogók esetén, feltéve, hogy az életerő pozitív: homok -5 - fű -2 mocsár mocsár +6 - Terv 2 A lények leírásához bevezetünk négy osztályt: a lények általános tulajdonságait megadó ősosztályt (Lény), és ebből származtatjuk a konkrét fajú lények, a zöldikék, a buckabogarak és a tocsogók osztályait. Attól függetlenül, hogy egy lény konkrétan kicsoda vagy mi a fajtája, számos közös tulajdonsággal rendelkezik. Mindegyiknek van neve (_név) és életereje (_erő), meg lehet róla kérdezni, hogy hívják (név()), él-e (él()) még (az életereje pozitív-e), és meg lehet vizsgálni, mi történik, ha a versenypálya egy bizonyos terepén áthalad. Ez utóbbi művelet (átalakít()) módosítja a lény életerejét, és átalakítja a neki átadott terepet. Az él() és név() metódusok már az ősosztály szintjén implementálhatók, de az átalakít() csak a konkrét osztályok szintjén. Ennek hatása ugyanis attól függ, hogy egy lény milyen fajú. Ennél fogva az általános lény típusát leíró osztály absztrakt lesz, hiszen az átalakít() metódus absztrakt, másrészt úgysem akarunk ilyen objektumot létrehozni. A terepek általános tulajdonságait egy ősosztály (Terep) írja le, és ebből származtatjuk a konkrét terepek, a homok, a fű, a mocsár osztályait. Minden konkrét terep három-három metódussal bír: ezek rendre azt mutatják meg, hogyan változik az adott terepen egy zöldike, egy tocsogó, illetve egy buckabogár, és hogyan alakul át eközben a terep. A speciális lény osztályok konstruktorai az ősosztály konstruktorával inicializálják a nevet és az életerőt, és egyedi módon felüldefiniáljuk az átalakít() metódust. Az inicializáláshoz és a felüldefiniáláshoz a feladat szövegéből kinyert táblázatok (lásd elemzés) ad útmutatást. A táblázatok szerint az átalakít() metódusban elágazásokat kell elhelyezni, amelynek feltételei a paraméterként megadott terep típusát (fajtáját) vizsgálják. Az elágazások létrehozása azonban nem szerencsés, ha fel kell készítenünk a programunkat arra, hogy később új terep fajtákkal is bővülhet a feladat. Ekkor ugyanis az összes konkrét lény átalakít() metódusát módosítani kell. Ezt elkerülendő a látogató tervmintát alkalmazzuk úgy, hogy a terepek leírására szolgáló osztályok töltik majd be a látogató szerepét. 2 A szöveges magyarázatra a hallgatói beadandók dokumentumaiban nincs szükség, elég az aláhúzással kiemelt elemek megemlítése.

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 3. A konkrét lények átalakít() metódusa paraméterként vár egy terep objektumot, mint látogatót, és ennek a konkrét lény típusához illeszkedő metódusát hívja vissza. A terepek összes osztályát az egyke tervmintának megfelelően valósítjuk meg, hiszen elég mindegyik terepfajtához egy-egy objektumot létrehozni. A feladat specifikációjában szükségünk lesz a pályának az n+1 darab különböző változatával számolni, hiszen mindegyik lény átalakítja a pályát (a nulladik változat a kezdeti pálya). Egyegy lény áthaladását az áthalad : Lény Terep m Lény Terep m függvénnyel jelöljük, amely

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 4. megadja a megváltozott lényt és a megváltozott pályát. A pálya i-edik változatát a pályai-vel jelöljük, de ez a programban már nem jelenik meg, csak valamikor értéke lesz a pálya változónak. Állapottér: Előfeltétel: Utófeltétel: pálya: Terep m, lény: Lény n, túlélők: String* lény = lény0 pálya =pálya0 pálya = pályan i [1..n]: lény[i], pályai = áthalad(lény0[i], pályai-1) n túlélők = i = 1 lény[ i]. él() lény[ i]. név A lények és a pálya átalakításának algoritmusa, amelynek hátterében a [0..n] intervallumon rekurzívan definiált függvény n-dik helyen történő kiszámolása áll, közvetlenül adódik az utófeltételből: pálya := áthalad(lény[i], pálya)2 A túlélők kiválogatása pedig egy összegzés: enor(e) i = 1.. n f(e) <lény[i]> ha lény[i].él() s túlélők H, +, 0 Lény *,, <> Összevonva egy közös ciklusba a fentieket megkapjuk a megoldást: pálya := kezdőpálya lény[i], pálya := áthalad(lény[i], pálya) lény[i].él() túlélők := túlélők lény[i].név() SKIP Foglalkozzunk most a félkövér szedéssel kiemelt részfeladat megoldásával. Az i-edik lénynek a pályán való áthaladása során m+1 darab különböző változata lesz. A 0-dik változat a kezdetben megadott lény (lény0[i]), az utolsó az m-dik pályaszakaszon való áthaladás után előállt változat. Az i-edik lénynek a pályán történő j-edik lépése előtti állapotát a lény[i]j-1 jelöli, amelyből az átalakít() metódus állítja elő a lény következő állapotát (lény[i]j), miközben a pályai-1[j]-ből pályai[j] lesz. Tehát a megoldandó feladat:

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 5. j [1..m]: lény[i]j, pályai[j] = átalakít(lény[i]j-1, pályai-1[j]) Ennek megoldó algoritmusa, amelynek hátterében a [0..m] intervallumon rekurzívan definiált függvény m-dik helyen történő kiszámolása áll, közvetlenül adódik: lény[i], pálya :=áthalad(lény[i], pálya) lény[i], pálya[j] = átalakít(lény[i], pálya[j]) Ha még azt is észrevesszük, hogy sem a lény[i], sem a további terepek nem változnak azután, hogy a lény[i] elpusztul, javíthatjuk a fenti algoritmus hatékonyságát: lény[i], pálya :=áthalad(lény[i], pálya) j:=1 lény[i].él() j m lény[i], pálya[j] = átalakít(lény[i], pálya[j]) j:=j+1 Tesztelési terv Szürke doboz tesztesetek: Külső ciklus (összegzés) 1. felsorolás hossza szerint: - nulla lény - egy lény - több lény 2. felsorolás eleje, illetve vége: - első lény túl éli, illetve nem éli túl a versenyt - utolsó lény túl éli, illetve nem éli túl a versenyt Belső ciklus (összegzés) 1. felsorolás hossza szerint: - egyetlen lény nulla hosszú pályán - egyetlen lény egy hosszú pályán megfelelően változik - egyetlen lény hosszabb pálya (túléli, illetve elpusztul) 2. felsorolás eleje, illetve vége: - a pálya legelső mezője megfelelően változik egy lény hatására - a pálya legutolsó mezője megfelelően változik egy lény hatására