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

Hasonló dokumentumok
Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1.

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor

Programozási tételek újrafelhasználása

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

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

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz

Programozási feladatok megoldása visszavezetéssel egy osztály-sablon könyvtárra támaszkodva 1

Programozási tételek újrafelhasználható osztálysablon könyvtára

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

8. Programozási tételek felsoroló típusokra

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

117. AA Megoldó Alfréd AA 117.

9. Visszavezetés egyedi felsorolókkal

Maximum kiválasztás tömbben

mul : S T N 1 ha t S mul(s, t) := 0 egyébként Keresés Ezt az eljárást a publikus m veletek lenti megvalósításánál használjuk.

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.

Szekvenciális inputfájl felsorolása

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

Bevezetés a programozásba 2

Algoritmizálás + kódolás C++ nyelven és Pascalban

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Programozás II. ATM példa Dr. Iványi Péter

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

500. CC Megoldó Alfréd CC 500.

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

Egyszerű algoritmusok

Informatika terméktervezőknek

Globális operátor overloading

Algoritmizálás + kódolás C++ nyelven és Pascalban

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

500. AA Megoldó Alfréd AA 500.

A C# programozási nyelv alapjai

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

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

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

Szövegek C++ -ban, a string osztály

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

Programozás II. 2. Dr. Iványi Péter

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

C++ függelék. Tartalom

Feladat. Ternáris fa. Típusspecikáció. Reprezentáció. Absztrakt implementáció. Érdi Gerg EAF II. 4/3.

.AA Megoldó Alfréd AA.

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

A C# PROGRAMOZÁSI NYELV

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Programozás alapjai. 5. előadás

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

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

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozási alapismeretek 2009/2010

Programozás II gyakorlat. 8. Operátor túlterhelés

Pénzügyi algoritmusok

A C++ Standard Template Library rövid összefoglalás

EAF I C++ nyelvi elemek felsorolása 1. Alapvet típusok

Bevezetés a programozásba I.

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

Programozás alapjai 9.Gy: Struktúra 2.

1. Alapok. Programozás II

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

d(f(x), f(y)) q d(x, y), ahol 0 q < 1.

Programozás C++ -ban

228. AA Default Konstruktor AA 228.

Programozás II gyakorlat. 4. Öröklődés

Pénzügyi algoritmusok

503.AA Megoldo Arisztid 503.A

C++ programozási nyelv Konstruktorok-destruktorok

Programozás C++ -ban 2007/4

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Programozási Nyelvek: C++

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Mit ír ki? feladatok megoldásokkal

0. Megoldó Manó 0. Programozás alapjai 2. (inf.) pót zárthelyi gyak. hiányzás: 2 n/kzhp: n/11,5. ABCDEF IB.028/2.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

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

Bevezetés a programozásba I.

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

128. AA Megoldó Alfréd AA 128.

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

ISA szimulátor objektum-orientált modell (C++)

Programozási alapismeretek 3. előadás

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

Programozás C++ -ban

500.AJ Megoldó Magyar Magdolna 500.J

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Fejlett programozási nyelvek C++ Iterátorok

Átírás:

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 1. Feladat Adott egy szöveges fájlbel szöveg, ahol a szavakat szóközök, tabulátor-jelek, sorvége-jelek lletve a fájlvége-jel határolja. Melyk a leghosszabb W betűt tartalmazó szó? Megoldás Programterv A megoldáshoz érdemes elképzeln egy olyan absztrakt felsorolót, amely a karakterenként olvasást elrejt, és a szöveg szavat képes felsoroln úgy, hogy mnden szót megjelöl aszernt, hogy van-e benne W betű. A feladatot egy lyen felsorolóra épített feltételes maxmumkereséssel oldjuk meg. A = (f:nfle(szó), l:l, szó:strng) Szó = rec(str : Strng, vanw : L ) Ef = ( f=f ) Uf = (l, max, szó = t max 1 t.vanw t,. str ) A maxmum kválasztást kód-újrafelhasználással valósítjuk meg. Feltételezve, hogy rendelkezésünkre állnak a Procedure, Enumerator, SeqInFleEnumerator és MaxSearch osztály-sablonok (lásd előadás), ezért nekünk csak a MyMaxSearch és a WordEnumerator osztályokat kell defnáln. +Frst() +Next() +Current() +End() Enumerator SeqInFleEnumerator Word fstream f char df Procedure Enumerator *enor +Run() +AddEnumerator #Do() #Int(), Value, Compare MaxSearch Word current bool end char *ft WordEnumerator Word #Func() #Cond() Word, nt, Greater<nt> MyMaxSearch

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 2. A WordEnumerator osztály t példányát a szöveg karakterenként ft felsorolója, valamnt a felsorolás során éppen érntett aktuáls szó (akt) és a vége logka érték reprezentálja. A felsorolás műveletenek mplementácóját az alább táblázat mutatja. enor(szó) Frst() Next() End() Current() ft : enor(k) akt : Szó vége : L vége akt Részletesebben: első_szót_keres(ft) vége := f t.end() ha vége akkor előállít(akt, ft) vége := ft.end() ha vége akkor előállít(akt, ft) első_szót_keres(ft) ~ l, ft : search ft elválasztó jel W_keres(ft) ~ akt.str, ft : ft ft 1 akt.vanw := ft = W ft ft W elválasztójel ft ft elválasztójel szóvégét_keres(ft) ~ akt.str, ft : ft következő_szót_keres(ft) ~ l, ft : search ft elválasztó jel A felsoroló típusának mplementálásához tehát szükség van a lneárs keresés és az összegzés programozás tételenek osztály-sablonjara (lásd előadás) s. ft Enumerator Procedure Enumerator *enor +Run() +AddEnumerator Summaton Result *res #Do() #Cond() +Answer(), Result #Do() #Int() +Run() LnSearch char, strng SearchWInWord SearchEndOfWord #Int() #Frst() #Int() #WhleCond() #Frst() #Add() #Add() #WhleCond() #Frst() #Cond() char SerachNextWord

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 3. Megvalósítás A megvalósításhoz felhasználjuk az előadáson bemutatott osztály-sablon könyvtárat. Azoknak fejállományat bemásoljuk a programunkba. Így csak a fent osztálydagramok kék színnel jelölt osztályat kell csak nekünk elkészíten. 1 MyMAxSearch (man.cpp) Mndenekelőtt defnáljuk a jelölt szavak típusát. Erre k kell terjeszten a kíró operátort s. struct Word strng str; bool hasw; frend ostream& operator<<(ostream&, const Word&); ; ostream& operator<<(ostream& f, const Word& df) f << df.str; return f; A feladatot megoldó feltételes maxmumkeresést (MyMaxSearch) az általános maxmumkeresésből származtatjuk a Word segítségével történt példányosítás után. class MyMaxSearch : publc MaxSearch<Word> nt Func(const Word& e) const return e.str.sze(); bool Cond(const Word& e) const return e.hasw; ; nt man() MyMaxSearch pr; WordEnumerator wt("text.txt"); pr.addenumerator(&wt); pr.run(); f (pr.found()) cout << "A leghosszabb W-t tartalmazó szó " << pr.opt() << endl; else cout << "Nncs W-t tartalmazó szó\n"; return 0; 1 Az tt bemutatott kódnak nem s kellene a dokumentácóban szerepeln, hszen ez a forrásprogramban elolvasható.

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 4. Az absztrakt felsoroló osztályát s nekünk kell defnáln. class WordEnumerator : publc Enumerator<Word> SeqInFleEnumerator<char> * ft; Word current; bool end; publc: WordEnumerator(const std::strng& str) ft = new SeqInFleEnumerator<char>(str); vod Frst(); vod Next(); bool End() const return end; Word Current() const return current; ; WordEnumerator() delete ft; A Frst() és Next() metódusához szükség van a következő szó elejét megtaláló (SearchNextWord), az adott szóban W -t kereső, de közben a szó betűt összegyűjtő (SearchWInWord) és a szó végét kereső, de közben a szó betűt összegyűjtő (SerachEndOfWord) tevékenységekre. Az első tevékenység osztályát a LnSearch osztálysablonból, a másk kettőt a Summaton osztály-sablonból származtatjuk. A Next() metódus a tervezésnél leírt módon működk. vod WordEnumerator::Next() f(end = ft->end()) return; SearchWInWord pr1; pr1.addenumerator(ft); pr1.run(); current.hasw = ft->current() == W; current.str = pr1.answer(); SearchEndOfWord pr2; pr2.addenumerator(ft); pr2.run(); current.str += pr2.answer(); SearchNextWord pr3; pr3.addenumerator(ft); pr3.run(); A Frst() metódus a legelső szó megkeresése után a Next() metódussal azonos módon működk. A legelső szó elejét s a SearchNextWord tevékenységgel keressük meg,

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 5. de nem szabad megfeledkezn arról, hogy ez előtt el kell ndítan a karakterenként felsorolót (ft->frst()).ezt mutatja az alább kód. vod WordEnumerator::Frst() ft->frst(); SearchNextWord pr; pr.addenumerator(ft); pr.run(); Next(); Végezetül defnáljuk a SearchNextWord, SearchWInWord és SerachEndOfWord tevékenységeket. Mndhárom osztályban felüldefnáljuk a Frst() metódust, hszen nem szabad a karakterenként felsorolást újrakezden. class SearchNextWord : publc LnSearch<char> bool Cond(const char& e) const return e!= && e!=\t && e!=\n; vod Frst() ; class SearchWInWord : publc Summaton<char, strng> vod Add(const char& e) *res += e; vod Int() *res = ""; bool WhleCond(const char& e) const return e!=w && e!= && e!=\t && e!=\n; vod Frst() ; class SearchEndOfWord : publc Summaton<char, strng> vod Add(const char& e) *res += e; vod Int() *res = ""; bool WhleCond(const char& e) const return e!= && e!=\t && e!=\n; vod Frst() ;

OAF Gregorcs Tbor: Mnta dokumentácó a 4. ház feladathoz 6. Tesztelés Fekete doboz tesztesetek: 1. Üres szöveg 2. Csak elválasztó jeleket tartalmazó szöveg. 3. Csupa W betűt nem tartalmazó szó. 4. Több szó, köztük egy W betűt tartalmazó szó a szöveg elején. 5. Több szó, közük egy W betűt tartalmazó szó a szöveg elején, előtte elválasztó jelek. 6. Több szó, közük egy W betűt tartalmazó szó a szöveg végén. 7. Több szó, közük egy W betűt tartalmazó szó a szöveg végén, utána elválasztó jelek. 8. Több szó, köztük azonos hosszúságú W betűt tartalmazó szavak. 9. Több szó, köztük azonos hosszúságú W betűt tartalmazó szavak, valamnt egy ezeknél hosszabb W betűt tartalmazó szó. 10. Több szó, köztük azonos hosszúságú W betűt tartalmazó szavak, valamnt egy ezeknél hosszabb W betűt tartalmazó szó a szöveg végén. 11. Több szó, köztük azonos hosszúságú W betűt tartalmazó szavak, valamnt egy ezeknél hosszabb W betűt tartalmazó szó a szöveg elején. Fehér doboz tesztesetek: A saját kódrészben egyetlen elágazás található az eredmény kírásánál (ennek mndkét ágát befutották a fekete doboz tesztesetek), ezen kívül csak szekvenca szerkezetet látunk, ezért nncs szükség külön fehér doboz tesztre.