485. AA Megoldó Alfréd AA 485.



Hasonló dokumentumok
117. AA Megoldó Alfréd AA 117.

200. Megoldó Alfréd 200.

1. BB Megoldó Béla BB 1.

4. DD Megoldó Alfréd (A) DD 4.

503.DD #HIÁNYZIK Megoldó Alfréd DD 503.

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

417. AA Megoldó Alfréd AA 417.

228. AA Default Konstruktor AA 228.

500. AA Megoldó Alfréd AA 500.

500. CC Megoldó Alfréd CC 500.

191. BB Megoldó Alfréd BB 191.

500. DD Megoldó Alfréd DD 500.

Tárolók és metódusaik jellegű feladatok megoldásokkal

128. AA Megoldó Alfréd AA 128.

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

Programozás C++ -ban 2007/4

Programozás I gyakorlat

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

.AA Megoldó Alfréd AA.

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

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

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

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

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

Mit ír ki? feladatok megoldásokkal

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

Osztály és objektum fogalma

Bevezetés a programozásba 2

1000.AA Megoldo Alfréd 1000.A

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

500.AJ Megoldó Magyar Magdolna 500.J

503.AA Megoldo Arisztid 503.A

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

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

Származtatási mechanizmus a C++ nyelvben

Programozás II. 6.Öröklés Dr. Iványi Péter

1.AA MEGOLDÓ BERCI AA 1.

C++ programozási nyelv Struktúrák a C++ nyelvben Gyakorlat

500.AA Megoldo Arisztid 500.A

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

Géptermi zh-írás forgatókönyve

111. AA Megoldó Alfréd AA 111.

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

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

Fordítóprogramok Készítette: Nagy Krisztián

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

feladat pont min elért

Lineáris algebra gyakorlat

INFORMATIKAI ALAPISMERETEK

C++ Standard Template Library (STL)

BOLYAI MATEMATIKA CSAPATVERSENY FŐVÁROSI DÖNTŐ SZÓBELI (2005. NOVEMBER 26.) 5. osztály

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Objektumorientált programozás C# nyelven

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

Objektumorientált programozás C# nyelven III.

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

Bevezetés a C++ programozásba

C# osztályok. Krizsán Zoltán

INFORMATIKAI ALAPISMERETEK

500.AA Megoldó Kulcsár 500.A

Programozás C++ -ban

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

feladat pont min elért

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉPSZINT Függvények

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Azonosító jel: Matematika emelt szint

Bevezetés a programozásba I.

1. Írja fel prímszámok szorzataként a 420-at! 2. Bontsa fel a et két részre úgy, hogy a részek aránya 5 : 4 legyen!

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

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

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Trigonometria

Párhuzamos programozás

INFORMATIKAI ALAPISMERETEK

XIII. STL. Tároló Bejáró Algoritmus. XIII.1 A vector #include <vector> #include <vector> #include <algorithm> using namespace std;

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

Analízis elo adások. Vajda István október 3. Neumann János Informatika Kar Óbudai Egyetem. Vajda István (Óbudai Egyetem)

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

Osztály szint tagok. Krizsán Zoltán 1 [2012. március 12.] Objektumorientált programozás C# alapokon tananyag

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

Információs Technológia

Maximum kiválasztás tömbben

Shared IMAP beállítása magyar nyelvű webmailes felületen

Programozás II. labor

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

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

1 Rev 4. A C++ programozás alapjai- segédlet

1. Metrótörténet. A feladat folytatása a következő oldalon található. Informatika emelt szint. m2_blaha.jpg, m3_nagyvaradter.jpg és m4_furopajzs.jpg.

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

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelő GUI alkalmazás készítése 3. Összetett tábla karbantartása

Játékok (domináns stratégia, alkalmazása

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

OPERÁCIÓS RENDSZEREK 1. ÁTIRÁNYÍTÁSOK, SZŰRŐK

3. Gyakorlat Ismerkedés a Java nyelvvel

ELEKTRONIKAI ALAPISMERETEK

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

I. rész. Pótlapok száma Tisztázati Piszkozati. Név:...osztály:... Matematika kisérettségi május 15. Fontos tudnivalók

ELEKTRONIKAI ALAPISMERETEK

1. Alapok. Programozás II

Átírás:

Programozás alapjai 2. (inf.) zárthelyi 2011.05.12. gyak. hiányzás: 0 kzhpont: 0 MEG123 OTT/1. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden szükséges input adat az előírt formátumban rendelkezésre áll. A feladatok megoldásához csak a letölthető C és C++ összefoglaló használható. Számítógép, notebook, menedzser kalkulátor, organiser, mobiltelefon nem használható. A feladatokat figyelmesen olvassa el, megoldásukhoz ne használjon fel STL tárolót, kivéve, ha a feladat ezt külön engedi! Ne írjon felesleges függvényeket ill. kódot, a feladatra koncentráljon! Jó munkát! Értékelés: 0-8:1, 9-11:2, 12-14:3, 15-17:4, 18-20:5 F. Max. Elért 1 3 2 3 3 5 4 4 5 5 Σ 20 1. Feladat 6*0.5=3 pont Mit ír ki a szabványos kimenetre az alábbi program? Válaszához használja a négyzetrácsos területet! #include <iostream> using namespace std; class Alap { int alap; Alap(int i) :alap(i) { cout << alap << 'k'; Alap(const Alap& a) :alap(a.alap) { cout << alap << 'c'; operator bool() { return alap == 0; ~Alap() { cout << 'd'; ; class Masik { Alap a; const char *m; Masik(int a, const char *m) :a(a), m(m) { cout << m << 'M'; void operator=(const Masik& e) { a = e.a; cout << '=' << e.m; ~Masik() { cout << 'D'; ; int main() { Masik m1(1, "MEG123"); cout << endl; 1 k M E G 1 2 3 M Masik m2 = m1; cout << endl; 1 c m1 = m2; cout << endl; = M E G 1 2 3 Alap a1(0); cout << endl; 0 k if (a1) cout << "g12" << endl; g 1 2 else cout << "me" << endl; * return(0); d D d D d * Az utolsó sort itt is elfogadtuk, mivel az if egyik ágán az endl nem íródik ki. 2. Feladat Σ 3 pont Írjon függvénysablont (my_replace_if), ami az STL replace_if sablonjához hasonlóan a függvény 4. paramétereként megadott értékre állítja egy tároló azon elemeit, melyek a 3. paraméterben átadott predikátumnak eleget tesznek! A függvény első két paramétere két előrehaladó iterátor, ami kijelöli a jobbról nyílt intervallum kezdetét és végét. A függvény void visszatérési értékű. Amennyiben helyesen oldja meg a feladatot, akkor az alábbi kódrészlet a következőt írja ki: 1, 2, 3, 8, 8, 8, int v[] = { 1, 2, 3, 17, 18, 6 ; my_replace_if(v, v+6, bind2nd(greater<int>(), 5), 8); for (int *p = v; p!= v+6; ++p) cout << *p << ", "; Készítsen egy olyan függvényobjektum sablont (greater_than), amit a fenti példában így lehetne alkalmazni: my_replace_if(v, v+6, greater_than<int>(5), 8);

Egy lehetséges megoldás: template <class Iter, class Pred, class T> void my_replace_if(iter first, Iter last, Pred pred, T v) { for (; first!= last; first++) { if (pred(*first)) *first = v; template <class T> class greater_than { T ref; greater_than(t ref) :ref(ref) { bool operator()(t a) { return a > ref; ; 3. Feladat Σ 5 pont Csapatának egy Verem osztályt kell létrehoznia egész számok tárolására. A csapattagokkal megállapodtak az osztály publikus interfészében, valamint abban, hogy a verembe tehető adatok számát nem korlátozzák, a tárolás dinamikus. A megállapodást az alábbi kommentezett deklaráció rögzíti. A deklarációt a pontozott részen kiegészítheti, de a publikus interfészt nem változtathatja meg! Követelmény, hogy az osztály legyen átadható érték szerint függvényparaméterként, és működjön helyesen a többszörös értékadás is. class Verem private deque<int> { Verem(int n = 0, int val = 0); // Létrehoz egy vermet n db val értékkel (minden eleme val) void push(int); // Verembe tesz egy egész értéket. int pop() throw(range_error); // Kiveszi verembe utoljára betett értéket; // üres verem esetén range_error() kivételt dob. bool empty() const; // Igaz, ha üres a verem. void dup() throw(range_error); // A verem tetején levő elemet megduplázza (újból beteszi); // üres verem esetén range_error() kivételt dob void swap()throw(range_error); // A verem tetején levő két elemet megcseréli; // üres verem esetén range_error() kivételt dob. int size() const; // Visszaadja a veremben levő elemek számát. ~Verem();......... ; Egészítse ki a fenti deklarációt úgy, hogy az az elvárásoknak megfelelően működjön! A megoldáshoz felhasználhatja az STL bármelyik tárolóját ill. algoritmusát! (2p) Ügyeljen arra, ha származtatással oldja meg a feladatot, akkor is csak a jelenlegi interfész legyen publikusan elérhető! A tagfüggvények közül valósítsa meg a következőket: destruktor, konstruktorok, pop, empty!

Célszerűen egy STL tárolóból származtatunk private vagy protected örökléssel: Verem::~Verem() { Verem::Verem(int n, int val) { for (int i = 0; i < n; i++) push(val); int Verem::pop() throw(range_error) { if (empty()) throw range_error("verem::pop - empty"); int tmp = back(); pop_back(); return tmp; inline bool Verem::empty() const { return deque<int>::empty(); Tartalmazott STL, vagy saját tárolóval is megoldható. Ez utóbbival többet kellett írni. További tagfüggvények (ebben a csoportban nem kellett megírni): inline void Verem::push(int val) { push_back(val); void Verem::dup() throw(range_error) { if (empty()) throw range_error("verem::dup - empty"); push(back()); void Verem::swap() throw(range_error) { if (size() < 2) throw range_error("verem::swap - empty"); int tmp1 = pop(); int tmp2 = pop(); push(tmp1); push(tmp2); inline int Verem::size() const { return deque<int>::size(); 4. Feladat Σ 4 pont Tételezze fel, hogy a 3. feladat Verem osztálya elkészült és hibátlanul működik! Ezen osztály felhasználásával deklaráljon egy Szamologep osztályt elemi aritmetikai műveletek (osszead, kivon, szoroz, oszt) végzésére. A műveletvégző tagfüggvények a verem két legfelső elemét kiveszik, elvégzik a műveletet, majd az eredményt a verem tetejére teszik! Legyen az osztálynak egy kiir tagfüggvénye is, ami kiírja a legfelső elemet a standard kimenetre, de kiírt érték a veremben is maradjon meg! Egy istream típusú objektumból legyen lehetőség egész számokat beolvasni a szokásos >> operátorral! Valósítsa meg az osztály osszead és kiir tagfüggvényét, valamint a >> operátort! Működjön helyesen a következő kódrészlet: Szamologep gep; std::cin >> gep >> gep; // input: 4 2 gep.osszead(); gep.kiir(); // output: 6

Tartalmazott objektum alkalmazása a célszerű: class Szamologep { Verem v; void osszead(); void kivon(); void szoroz(); void oszt(); void kiir(); friend istream& operator>>(istream&, Szamologep&); ; void Szamologep::osszead() { v.push(op2+op1); void Szamologep::kiir() { v.dup(); cout << v.pop(); istream& operator>>(istream& is, Szamologep& szg) { int i; is >> i; szg.v.push(i); return is; Privát örökléssel is megoldható. További tagfüggvények (eben a csoportban nem kellett megírni): void Szamologep::kivon() { v.push(op2-op1); void Szamologep::szoroz() { v.push(op2*op1); void Szamologep::oszt() { if (op1 == 0) then throw range_error("szamologep::oszt - nullával oszt"); v.push(op2/op1); A hibakezelés hiányát nem vettük itt hibának.

5. Feladat Σ 5 pont Egy számítógéppel felügyelt kaszinó működését szeretnénk modellezni. A kaszinóban a játékasztalok (Asztal) nyilvántartják a pillanatnyi tétet, és az asztalnál ülő játékosokat, valamint azt, hogy az adott játék hanyadik körében járunk. Egy asztalnál maximum 10 játékos ülhet, de lehet üres asztal is. Bármelyik játékos bármelyik asztalhoz leülhet és ott a leülés sorrendjében játszhat. A játék során az asztalba épített számítógép körönként, sorban felszólítja a játékosokat, hogy lépjenek. Egy játékos a játék fajtájától függően többféleképpen léphet: passzolhat, tétet emelhet, stb. Többféle játékos lehet, amelyek eltérő stratégiát alkalmaznak: például kezdő (Kezdo) játékos, aki minden páratlan körben passzol, a többiben emeli a tétet, vagy egy minden körben passzoló robot (Robot) játékos. Minden játékos nyilvántartja, hogy éppen melyik asztalnál ül. A rendszerben az alábbi műveleteket kell megvalósítani: Asztal: 1. Új játékos csatlakozása az asztalhoz (ujjatekos). Ilyenkor a játékos is megjegyzi, hogy melyik asztalnál ül. 2. Játék kezdése az asztalnál (ujjatek). Ennek hatására a tét és a körszámláló nullázódik. 3. Kör végrehajtása (kor), melyben minden asztalnál ülő játékos egyet lép. 4. Kör sorszámának lekérdezése (getkor). 5. Tét emelése (emel) Játékos: 6. Lép (lep). A játékos ilyenkor megkérdezheti az asztalt, hogy hanyadik körnél tartanak, vagy éppen szólhat az asztalnak, hogy emeli a tétet. Feladatok: Tervezzen meg OO modellt a problémának megfelelően, amelyben van Asztal, Robot, valamint Kezdo játékos, és könnyen bővíthető további játékosokkal. Rajzolja fel a modell osztálydiagramját! Használja a dőlt betűs neveket! Használhat STL tárolókat, algoritmusokat is! Implementálja az osztályokat és tagfüggvényeit! Írjon egy egyszerű programrészletet, ami egy asztalhoz leültet két különböző játékost, és lejátszik egy kört! Egy lehetséges megoldás: Jatekos # ap: Asztal* +lep() +setasztal(asztal*) 0..10 Asztal - csapat: Jatekos*[] - tet: double - korok: int + ujjatek() + ujjatekos(jatekos*) + getkor(): int + emel() + kor() Kezdo Robot + lep() + lep()

class Asztal; class Jatekos { protected: Asztal *ap; void setasztal(asztal *a) { ap = a; virtual void lep() {; virtual ~Jatekos() { ; class Asztal { vector<jatekos*> csapat; double tet; int korok; Asztal() :tet(0) { void ujjatek() { korok = 0; tet = 0; void ujjatekos(jatekos *uj); void kor(); int getkor() { return korok; void emel(double v) { tet += v; ; void Asztal::ujJatekos(Jatekos *uj) { csapat.push_back(uj); uj->setasztal(this); void Asztal::kor() { korok++; for (unsigned int i = 0; i < csapat.size(); i++) csapat[i]->lep(); class Kezdo :public Jatekos { void lep() { if (ap->getkor() % 2 == 0) ap->emel(100); ; class Robot :public Jatekos { ; Asztal a; Robot r; Kezdo k; a.ujjatekos(&r); a.ujjatekos(&k); r.lep();