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

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

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

Átírás

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

2 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 minimális erőfeszítéssel implementálhatjuk. Egy feladat megoldása egy tevékenység objektum lesz. 1. Ezen objektum osztályát származtatással hozzuk létre, 2. miután felparamétereztük a kódkönyvtárbeli ősosztályát, 3. az objektumhoz pedig egy megfelelő felsoroló objektumot csatolunk. Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 2

3 Ötlet bool l = false; for (enor.first();!enor.end(); enor.next()){ if(!cond(enor.current())) continue; Value val = func(enor.current()); if(!l){ l=true; opt = val; optitem = enor.current(); else{ if( opt < val ){ opt = val; optitem = enor.current(); { int db = 0; for (enor.first();!enor.end(); enor.next()){ if( cond(enor.current()) ) ++db; bool l = false; for (enor.first();!l &&!enor.end(); enor.next()){ l = cond(elem = enor.current()); init(); for(enor.first();!enor.end() && whilecond(enor.current()); enor.next()){ body(enor.current()); Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 3

4 Vázlat Procedure + run() : void # init() : void {virtual # body(e:) : void {virtual # whilecond() : bool {virtual init() enor.first() while enor.end() whilecond() do body( enor.current() ) enor.next() od return true Counting # c : int # init() : void {override # body(e:): void {override # cond() : bool {virtual + result() : int {query if cond(e) then c := c + 1 fi c := 0 LinearSearch # l : bool # elem : # init() : void {override # body(e:): void {override # whilecond() : bool {override # cond() : bool {virtual + found() : bool {query + elem() : {query l := false l := cond(e) elem := e return l Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 4

5 Programozási tételek ősciklusa felsorolt elemek típusa template <typename > void Procedure<>::run() final { if(_enor==null) throw MISSING_ENUMERATOR; default: _enor->first() init(); for( first(); loopcond(); _enor->next()) { body(_enor->current()); felsoroló objektumra mutató pointer default:!_enor->end() && whilecond(_enor->current()) default: true Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 5

6 Programozási tételek ősosztálya felsorolt elemek típusa template <typename > class Procedure { protected: Enumerator<> *_enor; felsoroló objektumra mutató pointer ; Procedure():_enor(nullptr){ felüldefiniálható metódusok virtual void init()= 0; virtual void body(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 public: enum Exceptions { MISSING_ENUMERATOR ; virtual void run() final; void addenumerator(enumerator<>* en) final { _enor = en; virtual ~Procedure(){ konkrét felsoroló objektum hozzáadása procedure.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 6

7 Felsorolás Procedure -*enor <<interface>> Enumerator +run() : void {final +addenumerator() : void # init() : void {virtual # first() : void {virtual # body() : void {virtual # loopcond() : bool {virtual # whilecond() : bool {virtual ArrayEnumerator +first() : void +next() : void +current() : +end() : bool SeqInFileEnumerator - vect : array of - ind : int + first() : void {override + next() : void {override + current() : {override + end() : bool {override - f : file of - df : + first() : void {override + next() : void {override + current() : {override + end() : bool {override Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 7

8 Felsorolók ősosztálya template <typename > class Enumerator { public: virtual void first() = 0; virtual void next() = 0; virtual bool end() const = 0; virtual current() const = 0; virtual ~Enumerator(){ ; enumerator.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 8

9 Tömb felsorolója template <typename > class ArrayEnumerator : public Enumerator<> { protected: std::vector<> *_vect; unsigned int _ind; public: ArrayEnumerator(std::vector<> *v):_vect(v){ ; void first() override { _ind = 0; void next() override { ++_ind; bool end() const override { return _ind>=_vect->size(); current()const override { return (*_vect)[_ind]; arrayenumerator.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 9

10 Szekvenciális inputfájl felsorolója template <typename > class SeqInFileEnumerator : public Enumerator<>{ protected: std::ifstream _f; _df; public: enum Exceptions { OPEN_ERROR ; SeqInFileEnumerator(const std::string& str) _f.open(str.c_str()); ; if(_f.fail()) throw OPEN_ERROR; if(typeid()==typeid(char)) _f.unsetf(std::ios::skipws); ~SeqInFileEnumerator(){ _f.close(); Az -re legyen értelmes az operator>> #include <typeinfo> void first() override { next(); void next() override { _f >> _df; bool end() const override { return _f.fail(); current() const override { return _df; seqinfileenumerator.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 10

11 Általános maximum keresés Procedure -*enor <<interface>> Enumerator +run() : void {final +addenumerator() : void # init() : void {virtual # first() : void {virtual # body() : void {virtual # loopcond() : bool {virtual # whilecond() : bool {virtual +first() : void +next() : void +current() : +end() : bool MaxSearch, Value, Compare # init() : void {final # body() : void {final # func() : Value {virtual # cond() : bool {virtual + found() : bool {queryl + opt() : Value {queryl + optelem() : {queryl Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 11

12 Általános maximum keresés osztálya template <typename, typename Value =, typename Compare = Greater<Value> > class MaxSearch : public Procedure<> { protected: bool _l; _optelem; Value _opt; Compare _better; az típusú elemek Value típusú értékeit hasonlítjuk össze ősciklusban használt metódusok felüldefiniálása ; void init() override final{ _l = false; void body(const & current) override final; virtual Value func(const & e) const = 0; virtual bool cond(const & e) const { return true; public: bool found() const { return _l; újabb felüldefiniálható metódusok Value opt() const { return _opt; optelem()const { return _optelem; eredmény lekérdezése maxsearch.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 12

13 Általános maximum keresés tevékenysége template <typename, typename Value, typename Compare> void MaxSearch<,Value,Compare>::body(const & e) override final { if (!cond(e) ) return; Value val = func(e); if (_l){ if (_better(val,_opt)){ _opt = val; _optelem = current; else { _l = true; _opt = val; _optelem = current; a Compare típus-sablonú _better objektum mutatja meg, hogy a val jobb-e, mint az _opt. maxsearch.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 13

14 Összehasonlító osztályok template <typename Value> class Greater{ public: bool operator()(const Value& l, const Value& r) { return l > r; Ha Compare a Greater<int>, akkor _better(2,5) azonos a 2>5 értékével. ; template <typename Value> Ha Compare a Less<int>, akkor class Less{ _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ű alkalmazások fejlesztése 14

15 1. Feladat Adott egy egész számokat tartalmazó szöveges állomány. Keressük meg ebben a legnagyobb páratlan számot! Melyik a legnagyobb páratlan szám? A feladat visszavezethető a feltételes maximum keresésre 1. Vizsgált elemek típusa (): egész számok 2. Az Value függvény (func): identitás 3. Összehasonlítandó értékek típusa (Value): egész számok 4. Összehasonlítás (Compare): nagyobb reláció (Greater) 5. Feltétel (cond): a szám páratlan 6. Felsoroló: szöveges állomány egész számainak felsorolója Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 15

16 Megoldás terve Procedure -*enor Enumerator, Value, Compare MaxSearch -*enor SeqInFileEnumerator # func() : Value {virtual # cond() : bool {virtual int -better Greater Value MyMaxSearch int, int, Greater<int> int +operator(, ) : bool # func(e:int) : int {override # cond(e:int) : bool {override return e mod 2!=0 return e Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 16

17 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; ; tevékenység objektum int main(){ MyMaxSearch pr; SeqInFileEnumerator<int> file_enum("input.txt"); // kivételkezelés pr.addenumerator(&file_enum); felsoroló objektum input.txt 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; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 17

18 2. Feladat Egy forgalom szá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 lehet, hogy 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ának a megfigyelés elkezdése óta számolt sorszámát, utolsó két jegye a mérésnek az adott napbeli óráját mutatja. 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 mikor (melyik nap melyik órájában) léptek be az állomás területére legkevesebben? Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 18

19 Megoldás vázlata Mikor léptek be legkevesebben a hétvégi időpontok közül? A feladat visszavezethető a feltételes minimum keresésre speciális 1. Vizsgált elemek (): mérések, azaz időkód-létszám (egész szám) párok 2. Az Value függvény (func): egy mérésből kiemeli a létszámot 3. Összehasonlítandó értékek (Value): létszám (egész számok) 4. Összehasonlítás (Compare): kisebb reláció (Less) 5. Feltétel (cond): a mérés hétvégére esik 6. Felsoroló: szöveges állomány méréseit sorolja fel Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 19

20 Megoldás terve Procedure -*enor Enumerator, Value, Compare MaxSearch -*enor SeqInFileEnumerator # func() : Value {virtual # cond() : bool {virtual Pair -better Less Value MyMinSearch Pair, int, Less<int> int +operator(, ) : bool # func(e:int) : int {override # cond(e:int) : bool {override return e.number return e.day()%7==6 e.day()%7==0; Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 20

21 Elemi típus () struct Pair{ int time; int number; int day() const { return time/100; int hour() const { return time%100; input.txt ; friend ifstream& operator>>(ifstream&, Pair&); ifstream& operator>>(ifstream& f, Pair& df) { f >> df.time >> df.number; return f; Szekvenciális inputfájl Pair típusú elemeinek felsorolásához kell. main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 21

22 A feladatot megoldó feltételes minimumkeresés osztálya minimum keresés class MyMinSearch: public MaxSearch<Pair, int, Less<int> > { protected: létszámok szerint int func(const Pair &e) const override { return e.number; bool cond(const Pair &e) const override feltétellel { return { e.day()%7==6 e.day()%7==0; ; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 22

23 Főprogram int main() { MyMinSearch pr; 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; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 23

24 3. Feladat Adott egy szöveges állománybeli szöveg, ahol a szavakat szóközök, tabulátor-jelek, sorvége-jelek, illetve a fájlvége-jel határolja. Melyik az a leghosszabb szó, amelyik legnagyobb kódú karaktere a w betű? Melyik a leghosszabb adott tulajdonságú szó? A feladat visszavezethető a feltételes maximum keresésre 1. Vizsgált elemek (): szavak (string) 2. Az Value függvény (func): előállítja egy szó hosszát (size) 3. Összehasonlítandó értékek (Value): szavak hossza (int) 4. Összehasonlítás (Compare): nagyobb reláció (Greater) 5. Feltétel (cond): a szó legnagyobb kódú karaktere a w 6. Felsoroló: szöveges állomány szavainak felsorolója részfeladat Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 24

25 Megoldás terve Procedure -*enor Enumerator, Value, Compare MaxSearch -*enor SeqInFileEnumerator # func() : Value {virtual # cond() : bool {virtual string -better Greater Value MyMaxSearch string, int, Greater<int> # func(e:int) : int {override # cond(e:int) : bool {override int return maxchar(e) == w +operator(, ) : bool részfeladat return e.size() Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 25

26 Megvalósítás class MyMaxSearch : public MaxSearch<string, int>{ protected: int func(const string& e) const override { return e.size(); bool cond(const string& e) const override; ; részfeladat int main() { MyMaxSearch pr; SeqInFileEnumerator<string> word_enor("text.txt"); pr.addenumerator(&word_enor); pr.run(); if (pr.found()) cout << "A keresett szó " << pr.optelem() << endl; else cout << "Nincs keresett tulajdonságú szó\n"; return 0; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 26

27 Részfeladat Mi egy szó (nem üres sztring) legnagyobb kódú karaktere? A feladat visszavezethető a maximum kiválasztásra 1. Vizsgált elemek (): karakterek (char) 2. Az Value függvény (func): identitás 3. Összehasonlítandó értékek (Value): karakterek (char) 4. Összehasonlítás (Compare): nagyobb reláció (Greater) 5. Feltétel (cond): igaz 6. Felsoroló: egy sztring karaktereinek felsorolója új felsoroló Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 27

28 Megoldás terve Procedure -*enor Enumerator, Value, Compare MaxSearch -*enor StringEnumerator # func() : Value {virtual # cond() : bool {virtual char -better Greater Value char, int, Greater<int> InnerMaxSearch # func(char e) : int {override int +operator(, ) : bool return code(e) Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 28

29 Megvalósítás class StringEnumerator : public Enumerator<char> { protected: string _str; unsigned int _ind; public: StringEnumerator(const string& s): _str(s){ void first() override { _ind = 0; void next() override { ++_ind; bool end() const override { return _ind>=_str.size(); char current() const override { return _str[_ind]; ; class InnerMaxSearch : public MaxSearch<char, int>{ protected: int func(const char& e) const override { return e; ; bool MyMaxSearch::cond(const string& e) const override { InnerMaxSearch pr; StringEnumerator enor(e); pr.addenumerator(&enor); pr.run(); return 'w'==pr.optelem(); ; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 29

30 4. Feladat Egy szöveges állományban neveket soroltak fel ábécé szerint rendezve. Keressük meg az első olyan nevet amelyik legalább ötször szerepel az állományban! Melyik az első legalább ötször szereplő név? A feladat visszavezethető egy lineáris keresésre 1. Vizsgált elemek (): név-darabszám párok 2. Feltétel (cond): a vizsgált pár darabszáma legalább 5 újabb programozási tétel speciális részfeladat 3. Felsoroló: név-darabszám párok felsorolása, amely a szöveges állománybeli egymás után álló azonos nevek felsorolására épül Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 30

31 Megoldás terve Procedure -*enor Enumerator LinSearch Pesszimista vagy optimista, bool SeqInFileEnumerator # init() : void {final # body() : void {final # cond() : bool {virtual # whilecond() : bool {final + found() : bool + elem() : Pair, false MyLinSearch # cond(e:pair) : bool {override Pair - *enor string *f PairEnumerator # current : Pair # end : bool +first() : void +next() : void +current() : char +end() : bool *f Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 31

32 Lineáris keresés osztálya template < typename, bool optimist = false> class LinSearch : public Procedure<> { protected: bool _l; _elem; void init() override final { _l = optimist; void body(const & e) override final { _l = cond(_elem = e); bool whilecond(const & e) const override final { return optimist?_l:!_l; virtual bool cond(const & e) const = 0; public: bool found() const { return _l; elem() const { return _elem; ; linsearch.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 32

33 Kitérő: Kiválasztás osztálya template < typename > class Selection : public Procedure<> { protected: void init() override final { void body(const & e) override final { bool loopcond() const override final { return!cond(procedure<>::_enor->current()); virtual bool cond(const & e) const = 0; public: result() { return Procedure<>::_enor->current(); ; selection.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 33

34 Megvalósítás struct Pair{ string name; int count; ; class MyLinSearch : public LinSearch<Pair>{ public: bool cond(const Pair &e) const override { return e.count>=5; ; int main() { MyLinSearch pr; PairEnumerator t("text.txt"); pr.addenumerator(&t); pr.run(); if (pr.found()) cout << "A " << pr.elem().name << " az első"; else cout << "Nincs"; cout << " olyan név, amelyet legalább öten viselnek.\n"; return 0; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 34

35 Név-darabszám felsoroló class PairEnumerator : public Enumerator<Pair> { protected: SeqInFileEnumerator<string> *_f; Pair _current; bool _end; public: PairEnumerator(const string& str) { _f = new SeqInFileEnumerator<string>(str); ~PairEnumerator(){ delete _f; void first() override { _f->first(); next(); void next() override; bool end() const override { return _end; Pair current() const override { return _current; ; részfeladat, amely támaszkodhat a szöveges állomány f felsorolójára main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 35

36 Név-darabszám felsoroló next() művelete Kiszámolja, hogy a neveket tartalmazó szekvenciális inputfájlból legutoljára beolvasott név hányszor szerepel még a fájlban közvetlenül egymás után? Hányszor szerepel az aktuális név a fájlban? Ez a részfeladat visszavezethető a számlálásra (ami egy speciális összegzés), amelyhez a szekvenciális inputfájlbeli szavakat kell felsorolni, de nem az összeset, hanem csak a legutoljára beolvasott névvel megegyező egymás után álló neveket. Vegyük tehát figyelembe, hogy - a számlálás kezdetén már rendelkezünk egy beolvasott névvel: nincs szükség a programozási tételben előreolvasásra ( first() ) - a számlálásnak hamarabb le kell állni, mint a fájl vége, akkor, amikor olyan nevet olvasunk, amelyik eltér az aktuálisan vizsgált névtől: módosul a számlálás ciklus feltétele ( whilecond() ) Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 36

37 Megoldás terve Procedure -*enor Enumerator # init() : void Summation, ResultType SeqInFileEnumerator # body() : void {final # add() : void {virtual # cond() : bool {virtual + result() : ResultType -*f string Counting, int # init() : void {final # add() : void {final string NameCounting # name : string # first() : void {override # whilecond(string) : bool {override Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 37

38 Összegzés osztálya template < typename, typename ResultType = > class Summation : public Procedure<> { protected: ResultType *_result; bool _inref; Kétféle eredményváltozója lehet: 1. Kívülről kapja 2. Sajátot készít, amely értéke lekérdezhető Summation(){ _result = new ResultType; _inref = true; Summation(ResultType *r) :_result(r) { _inref = false; void body(const & e) override final { if(cond(e)) add(e); összeadás esetén: *_result := *_result + f(e) virtual void add(const & e) = 0; virtual bool cond(const & e) const { return true; public: feltételes összegzés feltétele ResultType result() { return *_result; ~Summation() { if(_inref) delete _result; ; summation.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 38

39 Számlálás osztálya template < typename > class Counting : public Summation<, int> { public: Counting():Summation<,int>(){ ; protected: void init() override final { *Summation<,int>::_result = 0; void add(const & e) override final { ++*Summation<,int>::_result; counting.hpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 39

40 Név-darabszám felsoroló next() művelete még egyszer Hányszor szerepel a soron következő név az állományban? A feladat visszavezethető egy feltétel nélküli számlálásra 1. Vizsgált elemek (): nevek (string) 2. Feltétel (cond): igaz 3. Felsoroló: szöveges állománybeli szavak felsorolása 4. Extra indulás (first): üres (nem szabad újraindítani a felsorolást, birtokunkban van a legutoljára beolvasott név) 5. Extra ciklus feltétel (whilecond): amíg az éppen felsorolt név azonos Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 40

41 A next() művelet class NameCounting : public Counting<string> { nem kell előreolvasás protected: string _name; amíg az aktuális név nem változik void first() override { bool whilecond(const string& e) const override { return e == _name; public: az aktuális név NameCounting(const string &str): Counting<string>(), _name(str){ ; void PairEnumerator::next(){ if((_end = _f->end())) return; _current.name = _f->current(); NameCounting pr(_current.name); pr.addenumerator(_f); pr.run(); _current.count = pr.result(); main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 41

42 5. Feladat Adott két szöveges állomány, bennük egész számok szigorúan növekedően rendezve. Gyűjtsük ki az összes számot, de mindegyiket csak egyszer egy harmadik szöveges állományba! Futtassuk össze a két állományt (unió)! A feladat visszavezethető az összegzésre 1. Vizsgált elemek (): egész számok 2. Eredmény(ResultType): egész számok sorozata adatstream-en 3. Tevékenység (add): egész szám adatstream-be írása 4. Felsoroló: két szekvenciális inputfájl számainak összefuttatása Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 42

43 Megoldás terve Procedure -*enor Enumerator Summation, ResultType SeqInFileEnumerator # body() : void {final # add() : void {virtual # cond() : bool {virtual + result() : ResultType int *x, *y int int, outstream Copying # init() : void {override # add() : void {override -*enor CombineEnumerator # name : string # first() : void # whilecond(string) : bool Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 43

44 Felsorolt számok kiírása class Copying : public Summation<int, ofstream> { public: Copying(ofstream *u):summation<int, ofstream >(u){ protected: void init() override { u void add(const int& e) override { *Summation<int, ofstream>::_result << e << endl; ; int main() { ofstream u("uj.txt"); if(u.fail()) exit(2); Copying pr(&u); CombineEnumerator comb_enor("1.txt","2.txt"); pr.addenumerator(&comb_enor); pr.run(); return 0; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 44

45 Összefuttató felsoroló class CombineEnumerator : public Enumerator<int> { protected: SeqInFileEnumerator<int> *_x; SeqInFileEnumerator<int> *_y; int _current; bool _end; public: CombineEnumerator(const std::string& str1, const std::string& str2){ _x = new SeqInFileEnumerator<int>(str1); _y = new SeqInFileEnumerator<int>(str2); ~CombineEnumerator(){ delete _x; delete _y; ; void first() override { _x->first(); _y->first(); next(); void next() override; bool end() const override { return _end; int current()const override { return _current; main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 45

46 Összefuttató felsoroló next() művelete void CombineEnumerator::next() override { if( (_end = _x->end() && _y->end()) ) return; if( _y->end() (!_x->end() && _x->current() < _y->current()) ){ _current = _x->current(); _x->next(); else if( _x->end() (!_y->end() && _x->current() > _y->current()) ){ _current = _y->current(); _y->next(); else if(!_x->end() &&!_y->end() && _x->current() == _y->current() ){ _current = _x->current(); _x->next(); _y->next(); main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 46

47 Kitérő: next() művelet csak a közös elemek felsorolásához void CombineEnumerator::next() override { if( (_end = _x->end() _y->end()) ) return; if( _x->current() < _y->current() ){ _x->next(); else if( _x->current() > _y->current() ){ _y->next(); else if( _x->current() == _y->current() ){ _current = _x->current(); _x->next(); _y->next(); main.cpp A next() műveletnek minden alkalommal a felsorolás egy újabb elemét kell előállítania. Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 47

48 Kitérő: next() művelet csak a közös elemek felsorolásához void CombineEnumerator::next() override { bool l = false; while(!l &&!(_end = _x->end() _y->end()) ) if( _x->current() < _y->current() ){ _x->next(); else if( _x->current() > _y->current() ){ _y->next(); else if( _x->current() == _y->current() ){ _current = _x->current(); l = true; _x->next(); _y->next(); main.cpp Ciklust írni most tilos! Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 48

49 Kitérő: next() művelet csak a közös elemek felsorolásához void CombineEnumerator::next() override { if( (_end = _x->end() _y->end()) ) return; if( _x->current() < _y->current() ){ _x->next(); next(); else if( _x->current() > _y->current() ){ _y->next(); next(); else if( _x->current() == _y->current() ){ _current = _x->current(); _x->next(); _y->next(); main.cpp De a rekurzió is tilos! Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 49

50 Összefuttatás next() művelete Minden elemet felsorolunk, és felsoroláson kívül döntjük majd el, hogy egy elemmel kell-e egyáltalán valamit csinálni akarjuk feldolgozni. struct{element data; void CombineEnumerator::next() override string sign; { if( (_end = _x->end() && _y->end()) ) return; if( _y->end() (!_x->end() && _x->current().data < _y->current().data) ){ _current.data = _x->current(); _current.sign = x ; _x->next(); else if( _x->end() (!_y->end() && _x->current().data > _y->current().data) ){ _current.data = _y->current(); _current.sign = y ; _y->next(); else if(!_x->end() &&!_y->end() && _x->current().data == _y->current().data ){ _current.data = _x->current(); _current.sign = xy ; _x->next(); _y->next(); main.cpp Gregorics Tibor: Objektumelvű alkalmazások fejlesztése 50

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

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

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

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

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

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

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

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

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

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

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

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

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

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

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok és programozási tételek

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

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

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

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE motiabt@inf.elte. Programozási alapismeretek :: beadandó feladat Készítő adatai Név: Molnár Tamás EHA: MOTIABT.ELTE E-mail cím: motiabt@inf.elte.hu Gyakorlatvezető: Horváth László Feladat sorszáma: 23. Felhasználói dokumentáció

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

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

4. Öröklődés. Programozás II 4. Öröklődés Programozás II Mielőtt belevágunk Egy Tárgy típusú objektumokat tároló tömb i. elemében tároljunk el egy új tárgyat Rossz módszer: tomb[i].setnev( uj.getnev() ); tomb[i].setertek( uj.getertek()

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

A C# PROGRAMOZÁSI NYELV

A C# PROGRAMOZÁSI NYELV A C# PROGRAMOZÁSI NYELV 2010.02.23. Bevezetés C# nyelv jellemzői 2 Kis és NAGY betű érzékeny Minden utasítást pontos vessző zár. Utasítás zárójel a:,. .NET Framework keretrendszerek 3 Microsoft.NET Framework

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

.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

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

Smalltalk 2. Készítette: Szabó Éva

Smalltalk 2. Készítette: Szabó Éva Smalltalk 2. Készítette: Szabó Éva Blokkok Paraméter nélküli blokk [műveletek] [ x := 5. 'Hello' print. 2+3] Kiértékelés: [művelet] value az értéke az utolsó művelet értéke lesz, de mindet kiírja. x :=

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

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

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai Kémiai elemek felfedezése A kémiai elemek kémiailag tovább már nem bontható, egyszerű anyagok. Jelenleg 118 különböző kémiai elemet ismerünk, közüliik a Földön 94 található meg a természetben, ezeket természetes

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

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

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

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

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, az Algoritmusok és adatszerkezetek c. tárgyban

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

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 8. gyakorlat Fájlkezelés Surányi Márton PPKE-ITK 2010.11.02. Fájlkezelés C++-ban C++-ban van lehet ségünk fájlok kezelésére. Itt már tényleges fájlokkal dolgozunk, nem pedig

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

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

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

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II gyakorlat. 6. Polimorfizmus Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 3. gyakorlat Tömbök, programozási tételek Surányi Márton PPKE-ITK 2010.09.21. ZH! PlanG-ból papír alapú zárthelyit írunk el reláthatólag október 5-én! Tömbök Tömbök Eddig egy-egy

Részletesebben

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

Programozás II gyakorlat. 4. Öröklődés Programozás II gyakorlat 4. Öröklődés Feladat Egy játékfejlesztő cég olyan programot fejleszt, amely nyilvántartja az alkalmazottai adatait. Tároljuk minden személy: Nevét (legfeljebb 50 karakter) Születési

Részletesebben

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

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Programozási tételek, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok

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 alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek

Részletesebben

Objektum Orientált Programozás VII.

Objektum Orientált Programozás VII. Objektum Orientált Programozás VII. Összetett programozási tételek Programozási tételek összeépítése Feladatok ÓE-NIK, 2011 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk

Részletesebben

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

Bevezetés a programozásba előadás: Öröklődés Bevezetés a programozásba 2 5. előadás: Öröklődés emlékeztető Tagfüggvény struct koord { double x,y,r; void set(double ux, double uy) { x=ux; y=uy; r=sqrt(x*x+y*y); } Használat: koord k; k.set(4,5); Egységbezárás

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

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

Részletesebben

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

Programozás alapjai 9.Gy: Struktúra 2. Programozás alapjai 9.Gy: Struktúra 2. Ördögi részletek P R O A L A G 35/1 B ITv: MAN 2018.11.10 Euró árfolyam statisztika Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR).

Részletesebben

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.

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. Torna A pekingi olimpián tornából hat versenyszámban mérettetik meg magukat a versenyzők. Ennek a versenynek az eredményeit kell feldolgoznia ebben a feladatban. A megoldás során vegye figyelembe a következőket:

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

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

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10. Összetett programozási tételek Sorozathoz sorozatot relő feladatokkal foglalkozunk. A bemenő sorozatot le kell másolni, s közben az elemekre vonatkozó átalakításokat lehet végezni rajta: Input : n N 0,

Részletesebben

Programozási Nyelvek: C++

Programozási Nyelvek: C++ Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise();

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

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

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar PROGRAMOZÁS tantárgy Gregorics Tibor egyetemi docens ELTE Informatikai Kar Követelmények A,C,E szakirány B szakirány Előfeltétel Prog. alapismeret Prog. alapismeret Diszkrét matematika I. Óraszám 2 ea

Részletesebben

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

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

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

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

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

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

Bevezetés a C++ programozási nyelvbe

Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék Bevezetés a C++ programozási nyelvbe Oktatási segédlet Összeállította: Ficsor Lajos 2001. 1. A C++ programozási nyelv története A C++ programozási nyelv

Részletesebben

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Felvételi vizsga mintatételsor Informatika írásbeli vizsga BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív

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

Bevezetés a C++ programozásba

Bevezetés a C++ programozásba Bevezetés a C++ programozásba A program fogalma: A program nem más, mint számítógép által végrehajtható utasítások sorozata. A számítógépes programokat különféle programnyelveken írhatjuk. Ilyen nyelvek

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

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

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira Programozás II gyakorlat 7. Példák a polimorfizmus alkalmazásaira Probléma class A { public: ~A() { cout

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

7/8. gyakorlat Karaktertömbök és sztringkezelés

7/8. gyakorlat Karaktertömbök és sztringkezelés 7/8. gyakorlat Karaktertömbök és sztringkezelés 1. feladat: Karaktertömb kezelése Egy beolvasott karaktert lineáris kereső eljárással keressen meg az angol ábécében (az ábécé betűit tárolja inicializált

Részletesebben

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT Az informatika érettségi harmadik tételsora tartalmaz egy feladatot, melyet hatékonyan kell megoldani. A program megírása mellett követelmény a megoldásban használt módszer rövid leírása, kitérve a módszer

Részletesebben