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

Méret: px
Mutatás kezdődik a ... oldaltól:

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

Átírás

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

2 Cél Legyen egy programozási tételeket általánosan leíró kódkönyvtár (osztálysablon könyvtár), amely felhasználásával a visszavezetéssel tervezett programjainkat minimális erőfeszítéssel (ciklusok írása nélkül) implementálhatjuk. Egy feladat megoldása egy ún. tevékenység objektum legyen, amelynek 1. osztályát a kódkönyvtár egy osztálysablonjából származtatjuk, 2. megadva annak sablon paramétereit és felülírva a metódusait, 3. majd futási időben egy felsoroló objektumot is csatolunk hozzá. Procedure Enumerator MaxSearch Summation Counting LinSearch Selection Gregorics Tibor: Objektumelvű programozás SeqInFile Enumerator Interval Enumerator StringStream Enumerator Array Enumerator 2

3 Programozási tételek ősciklusa felsorolt elemek típusa template <typename Item> void run() felsoroló objektumra mutató pointer { if (_enor==nullptr ) throw MISSING_ENUMERATOR ; initialization t.first() t.end() body( t.current() ) t.next() } default:!_enor->end() && whilecond(_enor->current()) init(); for ( first(); loopcond(); _enor->next() ) { default: true body(_enor->current()); } default: _enor->first() Ez a run() függvény bármelyik programozási tétel algoritmusának leírására alkalmas, ha az init(), és a body() függvényeket megfelelő módon definiáljuk. Lehetőség van a first(), a whilecond(), vagy akár a teljes loopcond() függvényt felüldefiniálására is, ha a felsorolást indítását illetve leállását módosítani akarjuk. Gregorics Tibor: Objektumelvű programozás 3

4 Programozási tételek ősosztálya template <typename Item> class Procedure { protected: Enumerator<Item> *_enor; felsorolt elemek típusa Procedure():_enor(nullptr){} virtual void init()= 0; virtual void body(const Item& current) = 0; virtual void first() {_enor->first();} felsoroló objektumra mutató pointer a run() sablon-metódus felüldefiniálható paraméter-metódusai virtual bool whilecond(const Item& current) const { return true;} virtual bool loopcond() const { return!_enor->end()&& whilecond(_enor->current());} nem írható felül a leszármazott osztályokban public: enum Exceptions { MISSING_ENUMERATOR }; konkrét felsoroló objektum hozzáadása virtual void run() final; virtual void addenumerator(enumerator<item>* en) final { _enor = en;} virtual ~Procedure(){} }; procedure.hpp az ősciklus sablon-metódusa, amelyik paraméter-metódusokat hív meg a sablon-függvény tervminta szerint Gregorics Tibor: Objektumelvű programozás 4

5 Általános maximum keresés Procedure +run() : void {final} +addenumerator() : void {final} # init() : void {virtual} # first() : void {virtual} # body(item) : void {virtual} # loopcond() : bool {virtual} # whilecond(item) : bool {virtual} Item MaxSearch Item, Value # l : bool # opt : Value # optelem : Item # init() : void {override, final} # body(e : Item) : void {override, final} # func(item) : Value {virtual, query} # cond(item) : bool {virtual, query} + found() : bool {query} + opt() : Value {queryl} + optelem() : Item {queryl} #enor Gregorics Tibor: Objektumelvű programozás <<interface>> Enumerator Item az Item típusú elemeknek a Value típusú értékeit hasonlítjuk össze l := false if cond(e) then skip elsif cond(e) l then if func(e) > opt then opt, optelem := func(e), e endif elsif cond(e) l then l, opt, optelem := true, func(e), e endif return true 5

6 Maximum keresés osztálya template <typename Item, typename Value = Item, typename Compare = Greater<Value> > class MaxSearch : public Procedure<Item> { protected: bool _l; Item _optelem; Value _opt; Compare _better; void init() override final { _l = false; } void body(const Item& e) override final; a maximum vagy minimum kereséshez biztosítja a megfelelő összehasonlítást két Value típusú értékeket összehasonlító adattag ősciklusban bevezetett paramétermetódusok végleges felüldefiniálása további felüldefiniálható paraméter-metódusok }; virtual Value func(const Item& e) const = 0; virtual bool cond(const Item& e) const { return true; } public: bool found() const { return _l; } Value opt() const { return _opt; } Item optelem() const { return _optelem; } eredmény lekérdezése maxsearch.hpp Gregorics Tibor: Objektumelvű programozás 6

7 Maximum keresés ciklusmagja template <typename Item, typename Value, typename Compare> void MaxSearch<Item,Value,Compare>::body(const Item& e) { } if (!cond(e) ) return; Value val = func(e); if (_l){ if (_better(val, _opt)){ _opt = val; _optelem = e; } } else { _l = true; _opt = val; _optelem = e; } Kell, hogy a Compare helyébe olyan típus kerüljön, amely úgy implementálja az operator(,)-t, hogy a _better objektum kívánt módon hasonlítsa össze a val és az _opt értékeit. maxsearch.hpp Gregorics Tibor: Objektumelvű programozás 7

8 Összehasonlító osztályok template <typename Value> class Greater{ public: bool operator()(const Value& l, const Value& r) { return l > r; Ha a _better típusa a Greater<int>, } akkor _better(2,5) azonos a 2>5 értékével. }; template <typename Value> Ha a _better típusa a Less<int>, class Less{ akkor _better(2,5) azonos a 2<5 értékével. public: bool operator()(const Value& l, const Value& r) { return l < r; } }; maxsearch.hpp Gregorics Tibor: Objektumelvű programozás 8

9 Felsorolók Item SeqInFileEnumerator <<interface>> Enumerator Item +first() : void {virtual} +next() : void {virtual} +current() : Item {virtual} +end() : bool {virtual} Item Procedure #enor Item StringStreamEnumerator # f : file of Item # df : Item + first() : void {override} + next() : void {override} + current() : Item {override} + end() : bool {override} ArrayEnumerator Item Item = int IntervalEnumerator # ss : stringstream # ds : Item + first() : void {override} + next() : void {override} + current() : Item {override} + end() : bool {override} # vect : Item[m..n] # ind : int + first() : void {override} + next() : void {override} + current() : Item {override} + end() : bool {override} # m, n : int # ind : int + first() : void {override} + next() : void {override} + current() : Item {override} + end() : bool {override} Gregorics Tibor: Objektumelvű programozás 9

10 Intervallum és Tömb felsorolója class IntervalEnumerator : public Enumerator<int> { protected: int _m, _n; int _ind; public: IntervalEnumerator(int m, int n):_m(m), _n(n){} void first() override { _ind = m; } void next() override { ++_ind; } bool end() const override { return _ind>_n; } Item current() const override { return _ind; } }; intervalenumerator.hpp template <typename Item> arrayenumerator.hpp class ArrayEnumerator : public Enumerator<Item> { protected: const std::vector<item> *_vect; unsigned int _ind; public: ArrayEnumerator(const std::vector<item> *v):_vect(v){} void first() override { _ind = 0; } void next() override { ++_ind; } bool end() const override { return _ind>=_vect->size(); } Item current() const override { return (*_vect)[_ind]; } }; Gregorics Tibor: Objektumelvű programozás 10

11 Szekvenciális inputfájl felsorolója template <typename Item> class SeqInFileEnumerator : public Enumerator<Item>{ protected: std::ifstream _f; Item _df; public: enum Exceptions { OPEN_ERROR }; SeqInFileEnumerator(const std::string& str){ _f.open(str); Az Item-re legyen értelmes if(_f.fail()) throw OPEN_ERROR; az istream& operator>> } void first() override { _f >> _df; } void next() override { _f >> _df; } bool end() const override { return _f.fail(); } Item current() const override { return _df; } }; seqinfileenumerator.hpp A könyvtárban ez az osztály ennél összetettebb: egyrészt rendelkezik egy olyan (Item = char) specializációval, amely kikapcsolja az elválasztó jeleket (white-space) figyelmen kívül hagyó mechanizmust, másrészt soronkénti olvasás esetén az üres sorokat figyelmen kívül hagyja. Gregorics Tibor: Objektumelvű programozás 11

12 StringStreamEnumerator template <typename Item> class StringStreamEnumerator : public Enumerator<Item> { protected: std::stringstream _ss; Az Item-re legyen értelmes az istream& operator>> Item _df; public: StringStreamEnumerator(std::stringstream& ss) {_ss << ss.rdbuf(); } }; void first() override { _ss >> _df; } void next() override { _ss >> _df; } bool end() const override { return!_ss;} Item current() const override { return _df; } stringstreamenumerator.hpp Gregorics Tibor: Objektumelvű programozás 12

13 1. Feladat Adott egy egész számokat tartalmazó szöveges állomány. Keressük meg ebben a legnagyobb páratlan számot! A : f:infile(z), l:l, max:z Ef : f = f 0 Uf : l, max = MAX e f0 e páratlan e Feltételes maximum keresés t:enor(e) ~ f:infile(z) felsorolása H, > ~ Z, > f(e) ~ e felt(e) ~ e páratlan E / Item ~ Z / int H / Value ~ Z / int f(e) / func(e) ~ e felt(e) / cond(e) ~ e páratlan / e%2!=0 Gregorics Tibor: Objektumelvű programozás 13

14 Megoldás osztálydiagramja Item, Value, Compare MaxSearch #enor Item SeqInFileEnumerator # func(item) : Value {virtual} # cond(item) : bool {virtual} Item = int Greater Value Item = int, Value = int, Compare = Greater<int> +operator(value,value):bool #better MyMaxSearch # func(e:int) : int {override} # cond(e:int) : bool {override} Value = int return e mod 2!=0 return e Gregorics Tibor: Objektumelvű programozás 14

15 A megvalósításhoz készített kód class MyMaxSearch : public MaxSearch<int>{ protected: int func(const int& e) const override { return e;} bool cond(const int& e) const override { return e%2!=0;} }; } int main(){ try { tevékenység objektum MyMaxSearch pr; SeqInFileEnumerator<int> enor("input.txt"); pr.addenumerator(&enor); pr.run(); felsoroló objektum működés if (pr.found()) cout << "The greatest odd integer:" << pr.optelem(); else cout << "There is no odd integer!"; } catch(seqinfileenumerator<int>::exceptions ex){ if (SeqInFileEnumerator<int>::OPEN_ERROR == ex ) cout << "Wrong file name!"; } return 0; input.txt Gregorics Tibor: Objektumelvű programozás 15

16 2. Feladat Egy forgalomszámlálás során egy hónapon keresztül számolták, hogy óránként hány utas lép be egy adott metróállomás területére. (A méréseket hétfőn kezdték, de nem minden nap és nem minden órában végeztek megfigyelést.) Az időt négyjegyű számmal kódolták, amelynek első két jegye a mérés napját mutatja (pontosabban azt, hogy hányadik napja ez a megfigyelésnek), utolsó két jegye a nap azon óráját mutatja, amikor a mérés született. A méréseket egy szöveges állományban rögzítették időkód-létszám párok formájában. A hétvégi napok közül (melyik nap melyik órájában) mikor léptek be az állomás területére legkevesebben? input.txt Gregorics Tibor: Objektumelvű programozás 16

17 Megoldás specifikációja A : f:infile(mérés), l:l, min:n, elem: Mérés Mérés = rec( időpont : N, létszám : N ) Ef : f = f 0 Uf : l, min, elem = MIN e f0 e.időpont hétvége e.létszám Feltételes maximum keresés t:enor(item) ~ f:infile(mérés) felsorolása Item ~ Mérés Value, > ~ N, < func(e) ~ e.létszám cond(e) ~ e.időpont hétvége e.időpont/100%7 == 6 e.időpont/100%7==0 Gregorics Tibor: Objektumelvű programozás 17

18 Megoldás osztálydiagramja Item, Value, Compare MaxSearch #enor Item SeqInFileEnumerator # func(item) : Value {virtual} # cond(item) : bool {virtual} Item = Mérés Less Value Mérés időpont : int létszám : int Item = Mérés, Value = int, Compare = Less<int> +operator(value,value):bool #better MyMinSearch # func(e : Mérés) : int {override} # cond(e : Mérés) : bool {override} Value = int return e.időpont hétvége return e.létszám Gregorics Tibor: Objektumelvű programozás 18

19 Elemi típus (Mérés) struct Measurement{ int timestamp; int number; input.txt }; int day() const { return timestamp/100; } int hour() const { return timestamp%100; } a szekvenciális inputfájl Pair típusú elemeinek felsorolásához kell istream& operator>>(istream& f, Measurement& df) { f >> df.timestamp >> df.number; return f; } Gregorics Tibor: Objektumelvű programozás 19

20 Főprogram class MyMinSearch: public MaxSearch< Measurement, int, Less<int> > { protected: int func(const Measurement &e) const override { return e.number; } bool cond(const Measurement &e) const override { return e.day()%7==6 e.day()%7==0; } }; int main() { try { MyMinSearch pr; SeqInFileEnumerator< Measurement > enor("input.txt"); pr.addenumerator(&enor); pr.run(); } if (pr.found()){ Pair p = pr.optelem(); cout << "The least busy hour was the " << p.hour() << ". hour of the " << p.day() << ". day when " << pr.opt() << " people stepped into the station.\n"; } else cout << "There is no weekend data.\n"; } catch(exceptions ex){ if (OPEN_ERROR == ex ) cout << "File open error!"; } return 0; Gregorics Tibor: Objektumelvű programozás 20

21 3. Feladat Egy szöveges állomány sorai recepteket tartalmaznak, ahol egy recept az étel nevéből (sztring) és a hozzávalók felsorolásából áll. Egy hozzávalót anyagnévvel (sztring), mennyiséggel (szám), és mértékegységgel (sztring) adunk meg. Példa egy sorra: tejbegríz tej 1 liter búzadara 13 evőkanál vaj 6 dkg cukor 5 evőkanál Hány receptnek hozzávalója a cukor? A : f:infile(recept), db:n Recept = rec(név : String, hozzávalók : Hozzávaló * ) Hozzávaló = rec(anyag : String, mennyiség : N, mérték : String) Ef : f = f 0 részfeladat: van-e a hozzávalók között cukor? Uf : db = e f0 1 van_cukor(e) = SEARCH e.hozzávalók[i].anyag=cukor van_cukor(e) i=1.. e.hozzávalók Számlálás t:enor(item) ~ f:infile(recept) felsorolása Item ~ Recept cond(e) ~ van_cukor(e) egy sor elemei alapján Lineáris keresés t:enor(item) ~ e.hozzávalók : Hozzávaló * felsorolása Item ~ Hozzávaló cond(e) ~ e.hozzávalók[i].anyag=cukor Gregorics Tibor: Objektumelvű programozás 21

22 Összegzés és Számlálás Procedure Item Item, Value Summation # result : Value # init() : void {override, final} # body(e : Item) : void {override, final} # func(item) : Value {virtual, query} # neutral() : Value {virtual, query} # add(value,value) : Value {virtual, query} # cond(item) : bool {virtual, query} + result() : Value {query} feltételes összegzés result := neutral() if cond(e) then result := add(result, func(e)) endif return true Counting Value = int Item # func(e:item) : int {override, final, query} # neutral() : int {override, final, query} # add(int, int) : int {override, final, query} return 1 return 0 return a+b Gregorics Tibor: Objektumelvű programozás 22

23 1. megoldás kezdete main pr : MyCounting enor : SeqInFileEnumerator<Recipe> ( input.txt ) pr.addenumerator(&enor) pr.run() return pr.result() MyCounting : Counting Item = Recipe # cond(e:recipe) : bool {override} Recipe name : string vect : Ingredient[*] Ingredient substance : string quantity : int unit : string pr : MyLinSearch enor : ArrayEnumerator< Ingredient> (e.vect) pr.addenumerator(&enor) pr.run() return pr.found() Gregorics Tibor: Objektumelvű programozás 24

24 Lineáris keresés és kiválasztás Procedure Item pesszimista vagy optimista a pesszimista a default Item, optimist : bool LinSearch # l : bool # elem : Item l := optimist # init() : void {final} # body(item) : void {final} l := cond(e) # cond(item) : bool {virtual} elem := e # whilecond(item) : bool {final} + found() : bool {query} if optimist + elem() : Item {query} then return l else return not l endif Selection Item # init() : void {final} # body(item) : void {final} # cond(item) : bool {virtual} # loopcond(item) : bool {final} + elem() : Item {query} return not cond(enor.current()) skip skip Gregorics Tibor: Objektumelvű programozás 25

25 1. megoldás folytatása main pr : MyCounting enor : SeqInFileEnumerator<Recipe> ( input.txt ) pr.addenumerator(&enor) pr.run() return pr.result() MyCounting : Counting Item = Recipe # cond(e:recipe) : bool {override} pr : MyLinSearch enor : ArrayEnumerator< Ingredient> (e.vect) pr.addenumerator(&enor) pr.run() return pr.found() Item = Ingredient MyLinSearch : LinSearch # cond(e: Ingredient):bool {override} Ingredient substance : string quantity : int unit : string Recipe name : string vect : Ingredient[*] operator>>(is:istream, e:recipe) line : string getline(is, line) ss : stringstream(line) ss >> e.name át kellene másolni a hozzávalókat az ss-ből az e.vect tömbbe return e.substance= sugar Gregorics Tibor: Objektumelvű programozás 28

26 Sorozatok (vector, ostream) előállítása összegzéssel A másolások, listázások, kiválogatások összegzésként történő előállításához specializáltuk a Summation sablont: Value = vector<value> esetén az eredmény egy (konstruktor segítségével átvett vagy helyben definiált) sorozat, Value = ostream esetén az eredmény egy output adatfolyam. A func() metódust állítja elő azt az elemet, amelyet az eredménysorozathoz kell hozzáfűzni. Value = vector<value> esetén Value func(item) const Value = ostream esetén string func(item) const A cond() metódus felüldefiniálásával lehet elérni, hogy a felsorolt elemeknek csak egy részét vegye figyelembe. Nem kell a neutral() és add() műveleteket megadni. Gregorics Tibor: Objektumelvű programozás 29

27 Szöveges állományból beolvasott egész számokat hozzáfűzünk egy tömbhöz, majd a tömb páros elemeit kiírjuk class Concat : public Summation<int, vector<int> >{ public: Concat(const vector<int> &v) : Summation<int, vector<int> >(v) {} protected: int func(const int &e) const override { return e; } }; class Write : public Summation<int, ostream > { public: Write(ostream* o) : Summation<int, ostream>(o) {} protected: string func(const int &e) const override { }; ostringstream os; os << e << " " ; return os.str(); vector<int> v = { -17, 42 }; Concat pr1(v); SeqInFileEnumerator<int> enor1("input.txt"); } pr.addenumerator(&enor1); bool cond(const int &e) const override { pr1.run(); return e%2==0; } Write pr2(&cout); ArrayEnumerator<int> enor2(&pr1.result()); pr2.addenumerator(&enor2); pr2.run(); Gregorics Tibor: Objektumelvű programozás 31

28 1. megoldás vége main pr : MyCounting enor : SeqInFileEnumerator<Recipe> ( input.txt ) pr.addenumerator(&enor) pr.run() return pr.result() MyCounting : Counting Item = Recipe # cond(e:recipe) : bool {override} pr : MyLinSearch enor : ArrayEnumerator< Ingredient> (e.vect) pr.addenumerator(&enor) pr.run() return pr.found() Item = Ingredient MyLinSearch : LinSearch # cond(e: Ingredient):bool {override} Recipe name : string vect : Ingredient[*] operator>>(is:istream, e:recipe) line : string getline(is, line) ss : stringstream(line) ss >> e.name pr : Copy enor : StringStreamEnumerator<Ingredient>(ss) pr.addenumerator(&enor) pr.run() e.vect := pr.result() operator>>(is:istream, Ingredient substance : string quantity : int unit : string Value = Ingredient[*] Copy : Summation # func(e:ingredient) : Ingredient {override} return e.substance= sugar Item = Ingredient e:ingredient) is >> e.substance >> e.quantity >> e.unit return e Gregorics Tibor: Objektumelvű programozás 32

29 2. megoldás main pr : MyCounting enor : SeqInFileEnumerator<Recipe>( input.txt ) pr.addenumerator(&enor) pr.run() return pr.result() MyCounting : Counting Item = Recipe # cond(e:recipe) : bool {override} Recipe name : string has_sugar : bool return e.has_sugar Ingredient substance : string quantity : int unit : string operator>>(is:istream, e:recipe) line : string getline(is, line) ss : stringstream(line) ss >> e.name pr : MyLinSearch enor : StringStreamEnumerator<Ingredient>(ss) pr.addenumerator(&enor) pr.run() e.has_sugar := pr.found() operator>>(is:istream, is >> e.substance >> e.quantity >> e.unit Item = Ingredient MyLinSearch : LinSearch # cond(e: Ingredient):bool {override} return e. substance = sugar e:ingredient) Gregorics Tibor: Objektumelvű programozás 33

30 4. Feladat Egy szöveges állományban aszteroidákról vett megfigyeléseket tárolnak (egy aszteroidáról akár többet is). Minden sor egy megfigyelést tartalmaz: az aszteroida kódját (sztring), egy dátumot (sztring), az aszteroida tömegét (ezer tonnában), az aszteroida távolságát a Földtől (százezer kilométerben). AXS Az állomány aszteroidák kódja szerint növekedően rendezett. Listázzuk ki azokat az aszteroidákat a legnagyobb mért tömegükkel, amelyek minden megfigyeléskor 1 milliárd kilométernél közelebb voltak a Földhöz! A : f:infile(megfigyelés), cout:outfile(string N) Megfigyelés = rec( azon : String, dátum : String, tömeg : N, távolság : N) A : t:enor(aszteroida), cout:outfile(string N) Aszteroida = rec(azon : String, tömeg : N, közel : L) Ef : t = t 0 Uf : cout = e t0 e.közel <(e.azon, e.tömeg)> Összegzés (kiválogatás) t:enor(item) ~ t:enor(aszteroida) Item ~ Aszteroida Value, +, 0 ~ (String N)*,, <> func(e) ~ (e.azon, e.tomeg) cond(e) ~ e.közel Gregorics Tibor: Objektumelvű programozás 34

31 Megoldás terve main pr : Assortment(&cout) enor : AsteroidEnumerator("input.txt") pr.addenumerator(&enor) pr.run() Item = Asteroid Value = ostream Assortment : Summation # cond(e:asteroid) : bool {override} # func(e:asteroid) : string {override} return e.near f := new SeqInFileEnumerator<Observation>(str) Item = Asteroid AsteroidEnumerator : Enumerator - f : SeqInFileEnumerator<Observation> - current : Asteroid - end : bool + AsteroideaEnumerator(string) # first() : void {override} # next() : void {override} # current() : Asteroid {override} # end() : bool {override} f.first() next() return current return end return string(e) Asteroid id : string mass : int near : bool Observation id : string date : string mass : int distance : int operator>>(is:istream, e:observation) is >> e.id >> e.date >> e.mass >> e.distance Gregorics Tibor: Objektumelvű programozás 35

32 Egy aszteroida adatainak olvasása A next() metódus kiszámolja egy aszteroida legnagyobb tömegét, valamint azt, hogy mindig közelebb volt-e a Földhöz, mint 1 milliárd kilométer. A : f:infile(megfigyelés), e:megfigyelés, st:status, akt:aszteroida, vége:l Megfigyelés = rec( azon:string, dátum:string, tömeg:n, távolság:n) Aszteroida = rec(azon:string, tömeg:n, közel:l) Ef : f = f e = e st = st Uf : vége = (st =abnorm) ( vége akt.azon = e.azon a két feldolgozás eltérő állapotokban állhat le e.azon = akt.azon akt.tömeg, st, e, f = MAX e (e, f ) e.tömeg e.azon = akt.azon ezt a két felsorolást nem szabad szekvenciába tenni, össze kell vonni egy ciklusba akt.közel, st, e, f = SEARCH e (e, f ) e.távolság<10000 ) ) Gregorics Tibor: Objektumelvű programozás 36

33 Két programozási tétel összevonása Egy aszteroida legnagyobb tömegét megadó maximum kiválasztást, és a Földhöz való közelségét kiszámoló optimista lineáris keresést közös ciklusba kellene vonni. Maximum kiválasztás t:enor(item) ~ f:infile(megfigyelés) first() nélkül amíg azonosítót nem vált Item ~ Megfigyelés Value, > ~ N, > func(e) ~ e.tömeg Összegzés t:enor(item) ~ f:infile(megfigyelés) first() nélkül amíg azonosítót nem vált Item ~ Megfigyelés Value, +, 0 ~ N, max, 0 func(e) ~ e.tömeg nem vonhatók össze Optimista lineáris keresés t:enor(item) ~ f:infile(megfigyelés) first() nélkül amíg azonosítót nem vált Item ~ Megfigyelés cond(e) ~ e.táv < összevonhatók Összegzés t:enor(item) ~ f:infile(megfigyelés) first() nélkül amíg azonosítót nem vált Item ~ Megfigyelés Value, +, 0 ~ L,, igaz func(e) ~ e.táv < Gregorics Tibor: Objektumelvű programozás 37

34 next() metódus terve next end := f.end()) if end then return endif current.id := f.current().id pr : DoubleSummation (current.id) pr.addenumerator(f) pr.run() current.mass := pr.result().mass current.near := pr.result().near Result mass : int near : bool Result(int, bool) Item = Observation Value = Result DoubleSummation : Summation - id : string + DoubleSummation(str : string) # func(const Observation& e) : Result {override} # neutral() : Result {override} # add(result a, Result b) : Result {override} # first() : void {override} # whilecond(observation e) : bool {override} skip Asteroid id : string mass : int near : bool return e.id = id Observation id : string date : string mass : int distance : int id = str return Result( e.mass, e.distance < ) return Result( 0, true ) return Result( max(a.mass, b.mass), a.near and b.near) Gregorics Tibor: Objektumelvű programozás 38

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. 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

Részletesebben

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

Objektum elvű alkalmazások fejlesztése Programozási tételek újrafelhasználása 1. Készítette: Gregorics Tibor 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ó kódkönyvtárat (osztály-sablon könyvtárat),

Részletesebben

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

Programozási tételek újrafelhasználása Programozási tételek újrafelhasználása Cél Adott egy a programozási tételeket általánosan leíró kódkönyvtár (osztálysablon könyvtár), amely felhasználásával a visszavezetéssel tervezett programjainkat

Részletesebben

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

Programozási feladatok megoldása visszavezetéssel egy osztály-sablon könyvtárra támaszkodva 1 Programozási feladatok megoldása visszavezetéssel egy osztály-sablon könyvtárra támaszkodva 1 gt@inf.elte.hu ELTE IK Absztrakt. Ebben a cikkben egy osztály-sablon könyvtárat és annak felhasználását ismerhetjük

Részletesebben

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

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldá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

Részletesebben

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

Programozás Minta programterv a 2. házi feladathoz 1. Programozás Minta programterv a. házi feladathoz 1. Gregorics Tibor. beadandó/0.feladat 01. január 11. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy szöveges állományban bekezdésekre tördelt szöveg

Részletesebben

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

Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok Tervminták II. (Híd, Bejáró, Gyártófüggvény) Halmaz és bejárása Osztály-sablonok 1.Feladat Készítsünk olyan kódot, amely segítségével természetes számokat tároló halmazok hozhatók létre. o Egy halmaz-objektum

Részletesebben

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

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter Programozás(A szakirány) II. beadandó feladat 2014.05.05. Farkas András HP6S15 fafee@fafeecorp.com 1. csoport Veszprémi Anna / Hudoba Péter Feladat: Egy szöveges állományban bekezdésekre tördelt szöveg

Részletesebben

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

EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz EAF II Feladat dokumentáció IV. feladat 4. házi feladathoz Oldja meg az alábbi feladatokat úgy, hogy a programja csak EGYETLEN HELYEN TARTALMAZHAT CIKLUST az általános összegzést megvalósító osztály-sablon

Részletesebben

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

Objektum elvű alkalmazások fejlesztése. Verem típus osztály-sablonja Objektum elvű alkalmazások fejlesztése Verem típus osztály-sablonja Készítette: Gregorics Tibor Készítsünk olyan újra-felhasználható kódot, amellyel vermeket lehet létrehozni és használni. Egy verem-objektum

Részletesebben

Szekvenciális inputfájl felsorolása

Szekvenciális inputfájl felsorolása Szekvenciális inputfájl felsorolása Szekvenciális inputfájl felsorolása Egy x:infile(e) szekvenciális inputfájl (amely szerkezetileg egy sorozat) elemeit az st,e,x:read művelet (e:e, st:status={abnorm,

Részletesebben

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

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1 STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat

Részletesebben

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek

Részletesebben

Fejlett programozási nyelvek C++ Iterátorok

Fejlett programozási nyelvek C++ Iterátorok Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide

Részletesebben

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

Programozás Minta programterv a 1. házi feladathoz 1. Programozás Minta programterv a 1. házi feladathoz 1. Gregorics Tibor 1. beadandó/0.feladat 2008. december 6. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy osztályba n diák jár, akik m darab tantárgyat

Részletesebben

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

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix

Részletesebben

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport 10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)

Részletesebben

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 68 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 3. ELŐADÁS - PROGRAMOZÁSI TÉTELEK 2014 Bánsághi Anna 1 of 68 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

500.AA Megoldó Kulcsár 500.A

500.AA Megoldó Kulcsár 500.A Programozás alapjai 2. (inf.) 2. ZH 2019.05.14. lab. hiányzás: + / HFt: ABC123 IL.305./1. p: e: Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra

Részletesebben

500.AA Megoldo Arisztid 500.A

500.AA Megoldo Arisztid 500.A Programozás alapjai 2. (inf.) 2. ZH 2018.05.07. lab. hiányzás: 1+2 a/a/1 ABCD123 a/1. kzh: 4 E:3 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra

Részletesebben

117. AA Megoldó Alfréd AA 117.

117. AA Megoldó Alfréd AA 117. Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

Felhasználó által definiált adattípus Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési

Részletesebben

1.AA MEGOLDÓ BERCI AA 1.

1.AA MEGOLDÓ BERCI AA 1. Programozás alapjai 2. (inf.) 2. zárthelyi 2015.05.07. gyak./lab. hiányzás: 3/2 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat

Részletesebben

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

Programozás alapjai. 5. előadás 5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk

Részletesebben

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

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok. Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

1000.AA Megoldo Alfréd 1000.A

1000.AA Megoldo Alfréd 1000.A Programozás alapjai 2. (inf.) 2. PZH 2018.05.22. hiányzás:0+3 L4-R4P ZH: 27,5+26 ABCDEF IB.028/100. Sum:0 e:19 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de

Részletesebben

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

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1 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.

Részletesebben

500. AA Megoldó Alfréd AA 500.

500. AA Megoldó Alfréd AA 500. Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

C++ Standard Template Library (STL)

C++ Standard Template Library (STL) Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus

Részletesebben

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

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

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.

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. Érdi Gerg EF II. 2/2. Feladat Készítsen egy zsák típust! lkalmazzon osztályt! zsákokat rendezett láncolt listával ábrázolja! Implementálja a szokásos m veleteket, egészítse ki az osztályt a kényelmes és

Részletesebben

503.AA Megoldo Arisztid 503.A

503.AA Megoldo Arisztid 503.A Programozás alapjai 2. (inf.) 2. ZH 2017.04.27. gy./l. hiány: / ABCD123 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat értékeljük!

Részletesebben

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

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 infix kifejezés a+b ab+ +ab Készítette: Szabóné Nacsa Rozália nacsa@inf.elte.hu postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab 4 Lengyelforma J. Lukasewitz lengyel matematikus használta el

Részletesebben

.AA Megoldó Alfréd AA.

.AA Megoldó Alfréd AA. Programozás alapjai 2. (inf.) pót zárthelyi 2013.05.23. gyak. hiányzás: kzh: ZH:0 ABCDEF MEG/200. Hftest: (p) Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

128. AA Megoldó Alfréd AA 128.

128. AA Megoldó Alfréd AA 128. Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: Hiány:0 ZH: MEGOLD SEHOL/5. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden

Részletesebben

500.AJ Megoldó Magyar Magdolna 500.J

500.AJ Megoldó Magyar Magdolna 500.J Programozás alapjai 2. (inf.) 2. pzh 2017.05.09. gy./l. hiány: / ABCDEF IB.028/1. Z: / / Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

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

Fejlett programozási nyelvek C++ Sablonok és adatfolyamok Fejlett programozási nyelvek C++ Sablonok és adatfolyamok 11. előadás Antal Margit 2009 slide 1 Témakörök Sablonok Függvénysablon Osztálysablon Sablon metaprogramozás Adatfolyamok Operátorok és manipulátorok

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első

Részletesebben

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

Szövegek C++ -ban, a string osztály Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string

Részletesebben

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

A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása. Feladat Készítsen egy egész számokat tartalmazó zsák típust! A zsákot dinamikusan lefoglalt tömb segítségével ábrázolja! Implementálja a szokásos műveleteket (elem betevése, kivétele, üres-e a halmaz,

Részletesebben

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18 C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi

Részletesebben

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

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

500. CC Megoldó Alfréd CC 500.

500. CC Megoldó Alfréd CC 500. Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: G1/IB.146 Hiány:3 ZH:7,71 MEGOLD SCH/500. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

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

Programozás II gyakorlat. 8. Operátor túlterhelés Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Folyamok kezelése Fájlok írása/olvasása Folyamok kezelése Szabvány folyamok Eddig Kiírás a szöveges konzolra:

Részletesebben

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

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set)

Részletesebben

Apple Swift kurzus 3. gyakorlat

Apple Swift kurzus 3. gyakorlat Készítette: Jánki Zoltán Richárd Dátum: 2016.09.20. Apple Swift kurzus 3. gyakorlat Kollekciók: Tömb: - let array = [] - üres konstans tömb - var array = [] - üres változó tömb - var array = [String]()

Részletesebben

228. AA Default Konstruktor AA 228.

228. AA Default Konstruktor AA 228. Programozás alapjai 2. (inf.) zárthelyi 2012.05.17. gyak. hiányzás: kzhpont: ABCDEF Q-II/107. nzh: Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 8. előadás 2014.03.31. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Öröklődés

Részletesebben

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

Algoritmizálás + kódolás C++ nyelven és Pascalban Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

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

osztályok kapcsolata Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Dinamikus tagváltozó az osztályban class RVektor { i n t n ; R a c i o n a l i s p ; p u b l i c : RVektor ( i n t n=10 ) :

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

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

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein. Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. február 25. Osztályok C++ osztályok Bevezetés Objektum-orientáltság

Részletesebben

Maximum kiválasztás tömbben

Maximum kiválasztás tömbben ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

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

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ generikus szerkezetek, template újból Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.03.26.

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 6. gyakorlat 2017. október 16-20. 6. gyakorlat Programozási nyelvek II.: JAVA 1 / 24 Az 6. gyakorlat tematikája túlterhelés - összefoglalás statikus adattagok és metódusok

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto Informatikai Kar 3. fejezet alapismeretek Giachetta Roberto Actually I made up the term 'Object-Oriented', and I can tell you I did not have C++ in mind. (Alan Kay) adottak) 3:3 Feladat: Stack) adatszerkezetet

Részletesebben

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész Java Programozás 9. Gy: Java alapok Adatkezelő 5.rész 15/1 B ITv: MAN 2018.04.22 A Keresés funkció Programlogika: 1. A keresés az etm táblamodellben fog keresni, és a találat rekordokat átmásolja egy másik

Részletesebben

C#, OOP. Osztályok tervezése C#-ban

C#, OOP. Osztályok tervezése C#-ban C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat

Részletesebben

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19 PHP II. WEB technológiák Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) PHP II. 2014 1 / 19 Tartalomjegyzék Objektum Orientált Programozás 1 Objektum Orientált Programozás Öröklődés 2 Fájlkezelés

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

BME MOGI Gépészeti informatika 8.

BME MOGI Gépészeti informatika 8. BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

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

Programozás II. 2. Dr. Iványi Péter Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Programozás I. Első ZH segédlet

Programozás I. Első ZH segédlet Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett

Részletesebben

500. DD Megoldó Alfréd DD 500.

500. DD Megoldó Alfréd DD 500. Programozás alapjai 2. (inf.) zárthelyi 2009.05.21. gyakorlat: / Érdemjegy: QBX734 () IB319/32. Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,

Részletesebben

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

Programozás II. ATM példa Dr. Iványi Péter Programozás II. ATM példa Dr. Iványi Péter 1 ATM gép ATM=Automated Teller Machine Pénzkiadó automata Kezelő szoftvert szeretnénk írni Objektum-orientált módon 2 Követelmények Egyszerre csak egy embert

Részletesebben

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010 Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása

Részletesebben

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

Programozás alapjai II. (4. ea) C++ Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.03.01. -1-

Részletesebben

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:)!

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:)! Space Shuttle 40 Pont A Space Shuttle (magyarul űrsikló", hivatalos angol nevén: Space Transportation System, STS) az Amerikai Egyesült Államok ember szállítására is alkalmas űrprogramja volt. Feladatai

Részletesebben

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Bevezetés a programozásba II 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Emlékeztető struct Vektor { int meret, *mut; Vektor(int meret); int szamlal(int mit); }; int Vektor::szamlal(int mit)

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

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

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós május 6. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. május 6. Parancssori paraméterek Parancssorban történ programindításkor a program nevét követ en szóközökkel elválasztva paraméterek (command

Részletesebben

Bevezetés a programozásba 2

Bevezetés a programozásba 2 Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i

Részletesebben

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés OOP: Java 6.Gy: Java osztályok Definíció, static, túlterhelés 45/1 B ITv: MAN 2019.03.18 Feladat Készítsen egy Alkalmazott osztályt saját csomagban, név, kor és fizetés adatokkal. Legyen egy osztályszintű

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

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

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 A lista eleme 0 adat rész mutató rész Listaelem létrehozása p: Node 0 0 3 0 Az elemet nekünk kell bef zni a listába Deklarálás struct Node { int int value; Node* next; next; adattagok Létrehozás Node*

Részletesebben

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák Gelle Kitti 2017. 10. 25. Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák 2017. 10. 25. 1 / 20 Hasítótáblák T 0 h(k 2)

Részletesebben

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

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával) Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával) I. A nyelv története C++ C (ős: B???) 1972 Ritchie AT&T Bell laboratórium UNIX 1978 Kernighan & Ritchie az első tankönyv,

Részletesebben

Programozás C++ -ban 2007/4

Programozás C++ -ban 2007/4 Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos

Részletesebben

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

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ generikus szerkezetek, template Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2018.03.20.

Részletesebben

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

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE 2015-16 Classic Empire - A turn Based Wargame Classic Empire is a real time, multiplayer, Internet-based game, featuring military, diplomatic, and economic

Részletesebben

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

Bevezetés a programozásba Előadás: A const Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout

Részletesebben

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Generikus Típusok, Kollekciók

Generikus Típusok, Kollekciók Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections

Részletesebben

Programozás C és C++ -ban

Programozás C és C++ -ban Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Objektumorientált Programozás VI.

Objektumorientált Programozás VI. Objektumorientált Programozás VI. Tömb emlékeztető Egyszerű programozási tételek Összetett programozási tételek V 1.0 ÓE-NIK, 2011 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók

Részletesebben

1. Alapok. Programozás II

1. Alapok. Programozás II 1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph

Részletesebben

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

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 A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

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

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben