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

Hasonló dokumentumok
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ási tételek újrafelhasználható osztálysablon könyvtára

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

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

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

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

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

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

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

117. AA Megoldó Alfréd AA 117.

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

Szekvenciális inputfájl felsorolása

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

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

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

128. AA Megoldó Alfréd AA 128.

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

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

500. CC Megoldó Alfréd CC 500.

500.AA Megoldo Arisztid 500.A

1000.AA Megoldo Alfréd 1000.A

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

Fejlett programozási nyelvek C++ Iterátorok

500.AJ Megoldó Magyar Magdolna 500.J

.AA Megoldó Alfréd AA.

1.AA MEGOLDÓ BERCI AA 1.

503.AA Megoldo Arisztid 503.A

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

Bevezetés a programozásba 2

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

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.

228. AA Default Konstruktor AA 228.

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

C++ Standard Template Library (STL)

500.AA Megoldó Kulcsár 500.A

500. AA Megoldó Alfréd AA 500.

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

feladat pont min elért

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

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

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

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.

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

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

Felhasználó által definiált adattípus

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

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

Informatika terméktervezőknek

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Maximum kiválasztás tömbben

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

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

Elemi alkalmazások fejlesztése II. 2. Beadandó feladat Juhász Ádám

Bevezetés a programozásba I.

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

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

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

Mit ír ki? feladatok megoldásokkal

500. DD Megoldó Alfréd DD 500.

1. Alapok. Programozás II

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Konkurens TCP Szerver

Bevezetés a programozásba előadás: Öröklődés

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Programozási nyelvek Java

C++ Gyakorlat jegyzet 10. óra.

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

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

Programozás alapjai II. (7. ea) C++

.Net adatstruktúrák. Készítette: Major Péter

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

Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

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

BASH script programozás II. Vezérlési szerkezetek

Cekla. Készítette Doxygen Tue Sep :13:44

Programozás C és C++ -ban

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Tervminták a valósidejű gyakorlatban

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Programozás C++ -ban 2007/4

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés a programozásba Előadás: A const

Programozás. C++ típusok, operátorok. Fodor Attila

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Programozási Nyelvek: C++

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

3. Osztályok II. Programozás II

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Globális operátor overloading

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

Átírás:

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor Hozzunk létre a programozási tételeket általánosan leíró olyan kódkönyvtárat (osztály-sablon könyvtárat), amelynek felhasználásával a visszavezetéssel tervezett programjainkat implementálhatjuk. Egy feladat megoldása egy tevékenység objektum lesz, amelynek osztályát úgy állítjuk elő, hogy annak 1. ősét egy megfelelő osztály-sablonból példányosítjuk 2. néhány örökölt metódusát felüldefiniáljuk 3. felsoroló objektumot rendelünk hozzá. bool l = false; for (t.first();!l &&!t.end(); t.next()) l = Cond(elem = t.current()); bool l = false; for (t.first();!t.end(); t.next()) if(!cond(t.current())) continue; Value val = Func(t.Current()); if(l) if( opt < val ) optitem = t.current(); else l=true; optitem = t.current(); db = 0; for (t.first();!t.end(); t.next()) if( Cond(t.Current()) ) ++db; Init(); for(t.first(); LoopCond(); t.next()) Do(t.Current()); felsorolt elemek típusa template <typename > void Procedure<>::Run() felsoroló objektumra mutató poer if(enor==null) throw MissingEnumerator; enor->first() Init(); true for( First(); LoopCond(); enor->next()) WhileCond(enor->Current()) Do(enor->Current()); &&!enor->end() template <typename > class Procedure Enumerator<> *enor; felsorolt elemek típusa felsoroló objektumra mutató poer Procedure():enor(NULL) felüldefiniálható metódusok virtual void Init()= 0; virtual void Do(const & current) = 0; virtual void First() enor->first(); virtual bool WhileCond(const & current) const return true; virtual bool LoopCond() const return!enor->end()&& WhileCond(enor->Current()); ősciklus enum Exceptions MissingEnumerator ; void Run(); void AddEnumerator(Enumerator<>* en) enor = en; virtual ~Procedure() ; procedure.hpp template <typename > class Enumerator virtual void First() = 0; virtual void Next() = 0; virtual bool End() const = 0; virtual Current() const = 0; virtual ~Enumerator() ; enumerator.hpp 1

template <typename > class ArrayEnumerator : public Enumerator<> std::vector<> *vect; ind; ; ArrayEnumerator(std::vector<> *v):vect(v) void First() ind = 0; void Next() ++ind; bool End() const return ind>=()vect->size(); Current()const return (*vect)[ind]; arrayenumerator.hpp template <typename > class SeqInFileEnumerator : public Enumerator<> std::ifstream f; df; enum Exceptions OPEN_ERROR ; SeqInFileEnumerator(const std::string& str) f.open(str.c_str()); #include <typeinfo> if(f.fail()) throw OPEN_ERROR; if(typeid()==typeid(char)) f.unsetf(std::ios::skipws); ~SeqInFileEnumerator() f.close(); Az -re értelmes az operátor>> void First() Next(); void Next() f >> df; bool End() const return f.fail(); Current() const return df; ; seqinfileenumerator.hpp template <typename, typename Value =, typename Compare = Greater<Value> > class MaxSearch : public Procedure<> bool l; optelem; Value opt; összehasonlító objektum: Compare better; better(a,b)megmutatja, hogy a jobb-e, m b ; void Init() l = false; void Do(const & current); virtual Value Func(const & e) const = 0; virtual bool Cond(const & e) const return true; bool Found() const return l; Value Opt() const return opt; OptElem() const return optelem; maxsearch.hpp template <typename, typename Value, typename Compare> void MaxSearch<,Value,Compare>:: Do(const & current) Value val = Func(current); if (!Cond(current) ) return; if (l) if (better(val,opt)) optelem = current; else l = true; optelem = current; maxsearch.hpp template <typename Value> class Greater bool operator()(const Value& l, const Value& r) return l > r; Greater<> better esetén a better(2,5) azonos a 2>5 értékével. ; template <typename Value> class Less bool operator()(const Value& l, const Value& r) return l < r; ; Adott egy egész számokat tartalmazó szöveges fájl, amelyben keressük a legnagyobb páratlan számot! compare.hpp 2

Procedure Enumerator +Run()... *enor Melyik a legnagyobb páratlan szám? A feladat visszavezethető a feltételes maximum keresésre 1. Vizsgált elemek (): egész számok 2. Összehasonlítandó értékek (Value): egész számok 3. Függvény (Func): identitás. 4. Összehasonlítás (Compare): nagyobb reláció (Greater) 5. Feltétel (Cond): páratlan szám 6. Felsoroló: szöveges állomány egész számainak felsorolója #Do() #Init(), Value, Compare MaxSearch,, Greater<> MyMaxSearch SeqInFileEnumerator +First() +Next() +Current() +End() +operator() Greater Value Procedure Enumerator +Run()... *enor class MyMaxSearch : public MaxSearch<> Func(const & e) const return e; bool Cond(const & e) const return e%2!=0; ; #Do() #Init(), Value, Compare MaxSearch,, Greater<> SeqInFileEnumerator +First() +Next() +Current() +End() MyMaxSearch Greater Value +operator() AddEnumerator() Run() Found() OptElem() : MyMaxSearch First() Next() End() Current() : SeqInFileEnumerator : MyMaxSearch : SeqInFileEnumerator AddEnumerator() Run() Found() OptElem() First() Next() End() Current() 3

Hiányzik a kivételkezelés! main() MyMaxSearch pr; SeqInFileEnumerator<> file_enum("input.txt"); pr.addenumerator(&file_enum); felsoroló objektum pr.run(); működés if (pr.found()) cout << "A legnagyobb páratlan szám:" << pr.optelem(); else cout << "Nincs páratlan szám"; return 0; tevékenység objektum Egy forgalom számlálás során egy hónapon keresztül számolták, hogy az egyes órákban hány utas lép be egy adott metróállomás területére. (A méréseket hétfőn kezdték, de lehet, hogy nem minden nap és órában végeztek megfigyelést.) Az időt egy olyan négyjegyű számmal kódolták, amelynek első két jegye a nap hónapbeli sorszámát, utolsó két jegye az órát mutatja. Egy szöveges fájlban időkód-létszám párok formájában rögzítették a méréseket. A hétvégi napok közül mikor (nap, óra) léptek be legkevesebben az állomás területére? Mikor léptek be legkevesebben a hétvégi időpontok közül? A feladat visszavezethető a feltételes minimum keresésre 1. Vizsgált elemek (): mérések = időkód-létszám párok 2. Összehasonlítandó értékek (Value): létszám 3. Függvény (Func): mérésből a létszámot adja 4. Összehasonlítás (Compare): kisebb (Less) reláció 5. Feltétel (Cond): mérés hétvégére esik 6. Felsoroló: Szöveges állományra épített szekvenciális input fájl méréseinek felsorolója struct Pair time; number; Day() const return time/100; Hour() const return time%100; friend ifstream& operator>>(ifstream&, Pair&); ; Szekvenciális inputfájl Pair típusú elemeinek felsorolásához kell ifstream& operator>>(ifstream& f, Pair& df) f >> df.time >> df.number; return f; main() MyMinSearch pr; class MyMinSearch: public MaxSearch<Pair,, Less<> > Func(const Pair &e) const return e.number; bool Cond(const Pair &e) const return (e.day()%7==6 e.day()%7==0; ; SeqInFileEnumerator<Pair> file_enum("input.txt"); pr.addenumerator(&file_enum); pr.run(); if (pr.found()) Pair p = pr.optelem(); cout << "A " << p.day() << ". napon a " << p.hour() << "-kor lépett a legkevesebb, " << pr.opt() << " fő az állomásra" << endl; else cout << "Nincs hétvégi adat" << endl; return 0; 4

5