191. BB Megoldó Alfréd BB 191.



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

1. BB Megoldó Béla BB 1.

500. AA Megoldó Alfréd AA 500.

500. CC Megoldó Alfréd CC 500.

128. AA Megoldó Alfréd AA 128.

200. Megoldó Alfréd 200.

485. AA Megoldó Alfréd AA 485.

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

417. AA Megoldó Alfréd AA 417.

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.

228. AA Default Konstruktor AA 228.

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

1.AA MEGOLDÓ BERCI AA 1.

.AA Megoldó Alfréd AA.

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

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

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

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

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

Programozás C++ -ban 2007/4

503.AA Megoldo Arisztid 503.A

Bevezetés a programozásba 2

Mit ír ki? feladatok megoldásokkal

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

Programozás I gyakorlat

500. DD Megoldó Alfréd DD 500.

1000.AA Megoldo Alfréd 1000.A

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

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

Körkörös listák. fej. utolsó. utolsó. fej

Objektumorientált programozás C# nyelven

Osztály és objektum fogalma

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

Fejlett programozási nyelvek C++ Iterátorok

500.AA Megoldo Arisztid 500.A

INFORMATIKAI ALAPISMERETEK

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

111. AA Megoldó Alfréd AA 111.

Bánsághi Anna

Objektumorientált programozás C# nyelven

500.AJ Megoldó Magyar Magdolna 500.J

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

Objektumorientált programozás C# nyelven III.

INFORMATIKAI ALAPISMERETEK

Objektumorientált programozás C# nyelven

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

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

Érettségi feladatok Algoritmusok egydimenziós tömbökkel (vektorokkal) 1/6. Alapműveletek

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

INFORMATIKAI ALAPISMERETEK

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

500.AA Megoldó Kulcsár 500.A

Származtatási mechanizmus a C++ nyelvben

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

AA MEGOLDÓ ALADÁR AA

Programozás C++ -ban

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

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

A táblázatkezelő felépítése

Vodafone ReadyPay. Használati útmutató

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

1. Bevezető előadás. Schulcz Róbert (1) (70)

feladat pont min elért

C++ Standard Template Library (STL)

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

Maximum kiválasztás tömbben

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

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

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.

CAD-CAM

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

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

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

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Információs Technológia

Bevezetés a C++ programozásba

Digitális technika (VIMIAA01) Laboratórium 1

feladat pont min elért

Az aktiválódásoknak azonban itt még nincs vége, ugyanis az aktiválódások 30 évenként ismétlődnek!

Fókuszban a formahibák. Konzultációs nap Minőségfejlesztési Iroda szeptember 18. Fekete Krisztina

Programozás 5. Dr. Iványi Péter

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

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

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

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

EPER E-KATA integráció

Fejlett programozási nyelvek C++

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

C# feladatgyűjtemény Kovács Emőd, Radványi Tibor, Király Roland, Hernyák Zoltán

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Bánsághi Anna

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

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

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

Árverés kezelés ECP WEBSHOP BEÉPÜLŐ MODUL ÁRVERÉS KEZELŐ KIEGÉSZÍTÉS. v ECP WEBSHOP V1.8 WEBÁRUHÁZ MODULHOZ

KOVÁCS BÉLA, MATEMATIKA I.

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

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

Átírás:

Programozás alapjai 2. (inf.) pótzárthelyi 2011.05.19. gyak. hiányzás: 0 kzhpont: 0 N123OO IB.028/1. Hftest:0,NZH:n 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, C++ és STL ö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! Elégséges szint: 8p 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! A soremelések segítségül szerepelnek a programban, de nem szükséges a soremelésekkel foglalkoznia. Abba a sorba írjon, amelyik sorban a kiírás keletkezik, ez lehet egy zárójelet tartalmazó sor is! A többit hagyja üresen! #include <iostream> #include <string> using namespace std; class Hiba { int h; Hiba(int h) :h(h) { cout << 'H' << endl << endl; int hibakod() { return h; ; ; struct A0 { A0() { cout << '1'; ~A0() { cout << 'd'; ; class Alap : public A0 { int al; string n; Alap(int i, const char *p = "N123OO") : n(p) { if (i == 0) throw Hiba(1); al = i; cout << i << 'k'; Alap(const Alap& a) :al(a.al) { cout << al << 'C' << endl << endl; Alap& operator=(const Alap& a) { al = a.al; cout << a.n; return *this; ~Alap() { cout << 'D'; ; int main() { Alap a0(52); try { Alap a1(1, "23o"); a0 = a1; Alap a2(0,"n1"); Alap a3 = a1; catch (Hiba& h) { cout << h.hibakod(); return(0); 1 5 2 k 1 1 k 2 3 o 1 H d D d 1 D d Az a2 a kivétel miatt nejött létre, ezért a destruktora sem fog lefutni. (ld. 10. előadás 12-13. slide)! F. Max. Elért 1 3 2 5 3 3 4 3 5 6 Σ 20

2. Feladat Σ 5 pont Készítsen C++ nyelven egy generikus vektor (Vektor) osztályt, amely sablonparaméterként kapja a vektor méretét, és egy osztályt is, amit indexelési hiba esetén kivételként eldob! Ez utóbbinak legyen egy standard hibaosztály az alapértelmezése! Az osztálynak legyen alapértelmezett és egyparaméteres konstruktora is. Alapértelmezett esetben a vektor minden eleme a generikus típus alapértelmezett értéke (alaptípus esetén 0) legyen, egyparaméteres esetben pedig minden eleme a paraméterként megadott érték legyen! Valósítsa meg a következő operátorokat: két vektor különbsége a - operátorral két vektor összege (+) balértékként is használható index ([ ]) operátor Az osztály legyen átadható érték szerint, és működjön helyesen a többszörös értékadás is! Sorolja fel, hogy a generikus adatra vonatkozóan mely tagfüggvények meglétét tételezi fel a megvalósítás! Hozzon létre egy olyan vektort, ami 2 db char típusú elemet tartalmaz! Specializálja az osztály operator- műveletét úgy, hogy moduló 10 aritmetika (az eredmény 10-es maradékát kell venni) szerint működjön! Egy lehetséges megoldás: (A feladat sokban hasonlít a 8. hét 2. laborfeladatához, és a minta házi feladathoz is, de kiszh-n is volt hasonló feladat)! template <class T, int size, class E = std::range_error> class Vector { T adat[size]; Vector(T val = T()) { // T() a generikus típus alapértelmezett értéke. Alaptípus estén 0 adat[i] = val; Vector operator+(const Vector& v) const { Vector osszeg; osszeg.adat[i] = adat[i] + v.adat[i]; return osszeg; Vector operator-(const Vector& v) const { Vector kulonbseg; kulonbseg.adat[i] = adat[i] + v.adat[i]; return kulonbseg; T& operator[](unsigned int i) { if (i >= size) throw E("Vector::Index"); return adat[i]; ; Generikus adat tagfüggvényei: Konstruktor/destruktor, op+, op-, op= 2 db char elemet tartalmazó vektor: Vector<char, 2> v3; Specializáció: template <> Vector<char,2> Vector<char, 2>::operator-(const Vector& v) const { Vector kulonbseg; for (int i = 0; i < 2; i++) kulonbseg.adat[i] = (adat[i] - v.adat[i]) % 10; return kulonbseg; További tagfüggvények (ebben a csoportban nem kellett megírni): template <class T, int size, class E> T Vector<T, size, E>::operator*(const Vector& v) const { T tmp = T(); tmp = adat[i] * v.adat[i]; return tmp;

3. Feladat Σ 3 pont Tételezze fel, hogy a második feladatban elkészített sablon jól működik! Ennek felhasználásával készítsen egyszerűsített modellt részecskék ütközésének vizsgálatához! Definiáljon egy Reszecske osztályt, ami tárolja a részecske tömegét (double), töltését (int) és impulzusát (3D double vektor). Legyen az osztálynak minden adata lekérdezhető és beállítható (getter/setter), valamint legyen egy olyan metódusa, ami az ütközést (utkozik) szimulálja. Az ütközés során keletkező új részecske tömege, töltése, és impulzusa a két eredeti részecske megfelelő adatainak (tömeg, töltés, impulzus) összege. Definiáljon az osztályhoz olyan << operátort, mellyel egy std::ostream típusú objektumra kiírható a Reszecske osztály minden adata! A fentieket felhasználva modellünkben két részecske ütközése így valósítható meg: Reszecske *bozon1 = new Reszecske; Reszecske *bozon2 = new Reszecske; Reszecske *bozon3 = bozon1->utkozik(bozon2); delete bozon1; delete bozon2; cout << *bozon3; Valósítsa meg a következőket: << operátor, utkozik tagfüggvény! Egy lehetséges megoldás: class Reszecske { double tomeg; int toltes; typedef Vector<double, 3> imp_t; imp_t impulzus; double gettomeg() const; int gettoltes() const; imp_t getimpulzus() const; void gettomeg(double); void gettoltes(int); void getimpulzus(imp_t); Reszecske* utkozik(const Reszecske*); ; Reszecske* Reszecske::utkozik(const Reszecske *r2) { Reszecske* ret = new Reszecske; ret->tomeg = tomeg + r2->tomeg; ret->toltes = toltes + r2->toltes; ret->impulzus = impulzus + r2->impulzus; return ret; ostream& operator<<(ostream& os, Reszecske& r) { os << "Tomeg:" << r.gettomeg(); os << " Toltes:" << r.gettoltes(); os << " (" << r.getimpulzus()[0]; os << "," << r.getimpulzus()[1]; os << "," << r.getimpulzus()[2] << ")"; return os;

4. Feladat Σ 3 pont Tételezze fel, hogy a 2. és 3. feladatban elkészített sablon és osztály a rendelkezésére áll. Ezek felhasználásával deklaráljon egy Reaktor osztályt, melyben maximum 150 részecskéket tud tárolni és ütközéseket szimulálni! Az osztály konstruktora hozzon létre 150 részecskét, majd a react tagfüggvénye ütköztesse azokat, azaz menjen végig a tárolón, és ütköztesse a tárolóban levő részecskéket! Az ütközés során keletkező új részecskét a két megszűnő közül az egyik helyére tegye a tárolóba! Az ütközésekben részvevő részecskéket bármilyen sorrendben kiválaszthatja. A folyamatot akkor állítsa le, amikor már csak 1 részecske marad! Ügyeljen arra, hogy ne lépjen fel memóriaszivárgás! Írjon programrészletet, ami bemutatja a Reaktor osztály használatát! A szabványos kimenetre írja ki a folyamat végén megmaradt részecske adatait! Egy lehetséges megoldás: class Reaktor { static const int db = 150; Vector<Reszecske*, db> tar; Reaktor(const Reaktor &); Reaktor& operator=(const Reaktor &); Reaktor() { for (int i = 0; i < db; i++) tar[i] = new Reszecske; void react() { for (int i = 0; i < db-1; i++) { Reszecske *tmp = tar[i]->utkozik(tar[i+1]); delete tar[i]; tar[i] = 0; delete tar[i+1]; tar[i+1] = tmp; void kiir() { cout << *tar[db-1]; ~Reaktor() { for (int i = 0; i < db; i++) delete tar[i]; ; Reaktor rr; rr.react(); rr.kiir();

5. Feladat Σ 6 pont Egy bevásárlóközpontot (Plaza) szeretnénk modellezni. A plázát különféle vevők (Vevo) látogatják, akik eltérő módszerekkel végigjárják a plázában található különféle boltokat (Bolt). A boltok eltérő módon szolgálják ki a vevőket: például a mozi (Mozi) minden jegyet 1000 forintért ad, a lottózó (Lottozo) pedig minden vásárlótól beszed 200 forintot, de minden 10. vásárlónak 400 forintot ad. A vevők eltérő mennyiségű pénzzel indulnak vásárolni, és különböző módszerekkel látogatják a boltokat. Az alapos (Alapos) vevő minden boltot végigjár, míg a sietős (Sietos) csak a legelső boltba megy be. A plázában a boltok sorban épülnek. A boltok bejárását egy információs rendszer segíti, ami azonban csak 3 dolgot tud: 1. tudja, hogy hol van az első bolt; 2. tudja, hogy melyik a következő bolt; 3. tudja, hogy hol lesz a következő, még fel nem épült bolt. A rendszerben az alábbi műveleteket (tagfüggvényeket) kell megvalósítani: Pláza: 1. Új bolt felvétele (ujbolt) 2. Első boltra mutató előre haladó iterátor létrehozása (begin) 3. Az utolsó bolt utáni, még fel nem épült boltra mutató iterátor létrehozása (end) 4. Előre haladó iterátor osztály szokásos műveletei. Bolt: 5. Vevő kiszolgálása (kiszolgal) Vevő: 6. Vásárlás (vasarol). Paraméterként kapja kifizetendő/jóváírandó összeget (negatív: fizet). Ha a vásárló pénztárcája kiürül, vagy negatívba fordul, akkor dobjon std::runtime_error kivételt! 7. Boltok bejárása (latogat). Két iterátorral megadott boltintervallumot kap paraméterként (pl: begin, end) Feladatok: Tervezzen egy OO modellt a problémának megfelelően, amelyben van Plaza, Mozi, Lottozo, Alapos és Sietos vevő, és könnyen bővíthető újabb típusú boltokkal és vevőkkel. Rajzolja fel a modell osztálydiagramját! Használja a dőlt betűs neveket! Deklarálja az objektumokat C++ nyelven! Implementálja (valósítsa meg) a Plaza, Lottozo, és az Alapos objektumok összes tagfügvényét! Használhat STL tárolókat, algoritmusokat is! Bolt +kiszolgal(vevo *) Plaza - boltok: vector<bolt*> + <<typedef>> iterator + ujbolt() + begin(): iterator + end(): iterator Lottozo - vevoszam: int +kiszolgal(vevo*) Mozi +kiszolgal(vevo*) Vevo - penz: double +vasárol(double) +latogatl(plaza::iterator, Plaza::iterator) Alapos Sietos +latogatl(plaza::iterator, Plaza::iterator) +latogatl(plaza::iterator, Plaza::iterator)

class Bolt; class Vevo; class Plaza { vector<bolt*> boltok; typedef vector<bolt*>::iterator iterator; void ujbolt(bolt *bp) { boltok.push_back(bp); iterator begin() {return boltok.begin(); iterator end() {return boltok.end(); ; class Bolt { virtual void kiszolgal(vevo *vp) = 0; virtual ~Bolt() { ; class Vevo { protected: int penz; Vevo(int p):penz(p) { void vasarol(int ennyiert);{ virtual void latogat(plaza::iterator eleje, Plaza::iterator vege) = 0; virtual ~Vevo() { ; class Mozi :public Bolt { void kiszolgal(vevo *vp); ; class Lottozo :public Bolt { int vevoszam; Lottozo():vevoszam(0) { void kiszolgal(vevo *vp) { vevoszam++; vp->vasarol(-200); if (vevoszam % 10 == 0) vp->vasarol(+400); ; class Alapos :public Vevo { Alapos(int p) :Vevo(p) { void latogat(plaza::iterator eleje, Plaza::iterator vege) { while (eleje!= vege) (*eleje++)->kiszolgal(this); ; class SietosVevo :public Vevo { SietosVevo(int p) :Vevo(p) { void latogat(plaza::iterator eleje, Plaza::iterator vege); ;