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

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

117. AA Megoldó Alfréd AA 117.

1. BB Megoldó Béla BB 1.

485. AA Megoldó Alfréd AA 485.

200. Megoldó Alfréd 200.

228. AA Default Konstruktor AA 228.

500. CC Megoldó Alfréd CC 500.

500. AA Megoldó Alfréd AA 500.

.AA Megoldó Alfréd AA.

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.

128. AA Megoldó Alfréd AA 128.

503.AA Megoldo Arisztid 503.A

191. BB Megoldó Alfréd BB 191.

417. AA Megoldó Alfréd AA 417.

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

1.AA MEGOLDÓ BERCI AA 1.

Programozás I gyakorlat

500. DD Megoldó Alfréd DD 500.

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

500.AJ Megoldó Magyar Magdolna 500.J

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

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

Bevezetés a programozásba 2

500.AA Megoldo Arisztid 500.A

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

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

500.AA Megoldó Kulcsár 500.A

Programozás C++ -ban 2007/4

1000.AA Megoldo Alfréd 1000.A

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

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

Mit ír ki? feladatok megoldásokkal

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

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

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

INFORMATIKAI ALAPISMERETEK

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

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

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

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

Objektumorientált programozás C# nyelven III.

111. AA Megoldó Alfréd AA 111.

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

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

Országzászlók (2015. május 27., Sz14)

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

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

C++ Standard Template Library (STL)

1. Alapok. Programozás II

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

Fejlett programozási nyelvek C++ Iterátorok

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

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.

Bánsághi Anna

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

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

Pénzügyi algoritmusok

Minta programterv a 1. házi feladathoz

INFORMATIKAI ALAPISMERETEK

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

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

Bevezetés a C++ programozásba

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Magas szintű programozási nyelvek 2 Előadás jegyzet

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!

INFORMATIKAI ALAPISMERETEK

feladat pont min elért

C# osztályok. Krizsán Zoltá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

CAD-CAM

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

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

A C programozási nyelv VI. Parancssori argumentumok File kezelés

feladat pont min elért

Bevezetés a programozásba I.

Maximum kiválasztás tömbben

Információs Technológia

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

Készítsen négy oldalas prezentációt egy vállalat bemutatására!

Széchenyi István Egyetem Műszaki Tudományi Kar. A szakdolgozatok közös sablonja (a Kari Tanács i ülésén elfogadva)

Származtatási mechanizmus a C++ nyelvben

Beszámoló: a kompetenciamérés eredményének javítását célzó intézkedési tervben foglaltak megvalósításáról. Őcsény, november 20.

Ablakok használata. 1. ábra Programablak

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

Az éves statisztikai összegezés STATISZTIKAI ÖSSZEGEZÉS AZ ÉVES KÖZBESZERZÉSEKRŐL A KLASSZIKUS AJÁNLATKÉRŐK VONATKOZÁSÁBAN

Rekurzió. Horváth Gyula.

Programozás C++ -ban

- 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]++;

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

Osztály és objektum fogalma

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

MATLAB. 4. gyakorlat. Lineáris egyenletrendszerek, leképezések

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

Vodafone ReadyPay. Használati útmutató

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

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

Átírás:

Programozás alapjai 2. (inf.) zárthelyi 2012.05.10. gyak. hiányzás: kzhpont: ABCDEF MEG/1. Hftest: 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ó. Elektronikus eszköz (pl. kalkulátor, számítógép, notebook, mobiltelefon, Kindle) 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/kéri! 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 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! Ha olyan sorba ír, ahova nem történik kiírás, azért pontot vonunk le! #include <iostream> using namespace std; struct Alap { Alap(int i = 1) { cout << i << "k"; virtual void f(int i) { cout << "f"; void operator=(const Alap& a) { cout << "=" << "f"; virtual ~Alap() { cout << "d"; ; struct Uj :public Alap { Uj(int a, const char *m) :Alap(a) { cout << m << "K"; Uj(const Uj& u) :Alap(u) { cout << "C" << "f";; void f(int i) { cout << "F" << i; ~Uj() { cout << "D"; ; void f(uj u) { u.f(2); int main() { Uj u12(1, "cde"); cout << endl; 1 k c d e K Alap *pa = &u12; cout << endl; Uj u2 = u12; cout << endl; C f u12 = u2; cout << endl; = f pa->f(1); cout << endl; F 1 f(u12); cout << endl; C f F 2 D d Alap a1 = *pa; cout << endl; d D d D d F. Max. Elért 1 3 2 4 3 4 4 4 5 5 Σ 20 2. Feladat 4 pont Írjon függvénysablont (talal_ha), ami az STL find_if sablonjához hasonlóan kikeresi egy tárolóból az első olyan elemet, amelyik a harmadik paraméterben átadott predikátumnak eleget tesz! A függvény első két paramétere két iterátor, ami kijelöli a jobbról nyílt intervallum kezdetét és végét. A függvény visszatérési értéke egy olyan iterátor, ami a megtalált elemre vagy az intervallum végére mutat. Amennyiben helyesen oldja meg a feladatot, akkor az alábbi kódrészlet a következőt írja ki: 17 int v2[] = { 2, 2, 3, 17, 18, 6, 0; cout << *talal_ha(v2, v2+6, bind2nd(greater<int>(), 5)) << endl; Készítsen egy olyan függvényobjektumot, ami alkalmazható lenne a fenti példában az első páratlan szám megtalálására! Mutassa be, hogy az elkészített függvénysablonnal és függvényobjektummal hogyan tudná az első páratlan számot megtalálni egy egészeket tartalmazó std::vector-ban! Egy lehetséges megoldás: template<typename Iter, class Pred> Iter talal_ha(iter first, Iter last, Pred pred) { while (first!= last) { if (pred(*first)) break; ++first; return first;

A feladat második részéhez nem kellett template osztályt készíteni, de azt is elfogadtuk. Ezzel szemben csak függvény objektumot fogadtunk el, ahogy a feladat kérte, függvényt nem. struct Odd { bool operator()(int i) { // függvényhívás operátorát használjuk return (i & 1) == 0; ; Feladat harmadik része: vector<int> bemutat; vector<int>::iterator it = talal_ha(bemutat.begin(), bemutat.end(), Odd()); if (it == bemutat.end()) cout << "Nincs" << endl; else cout << *it << endl; 3. Feladat 4 pont Egy korlátos méretű generikus adatsor (Sor) osztályt kell készíteni. A tároló maximális méretét az osztály egyparaméteres konstruktora kapja meg. A default konstruktor állítsa a méretet 160-ra! Az osztály rendelkezzen a következő műveletekkel: front() a sor első elemének referenciáját adja; dobjon std::out_of_range kivételt, ha üres a sor; back() a sor utolsó elemének referenciáját adja; dobjon std::out_of_range kivételt, ha üres a sor; push() elemet tesz a sor végére; amennyiben a tárolt elemek száma meghaladná a tároló méretét, úgy a sor elejéről dobjon el egy adatot; pop() eldob egy elemet a sor elejéről; dobjon std::out_of_range kivételt, ha üres a sor; size() a tárolóban levő elemek számát adja; maxsize() a tároló maximális méretét adja. Az osztályból példányosított objektum: legyen átadható érték szerint függvényparaméterként; kezelje helyesen a többszörös értékadást (q1=q2=q3); a front és a back tagfüggvényeknek nem kell konstans objektumra működni! Deklarálja a Sor osztályt! Valósítsa meg az osztály default konstruktorát, valamint a front() és a push() metódusokat! Egy lehetséges megoldás: class Sor { T *tar; // pointer az adatra const int msiz; //maximális méret int siz; // aktuális méret int first; //első adat helye Sor(int msiz = 160); Sor(const Sor&); Sor& operator=(const Sor&); T& front(); T& back(); void push(const T&); void pop(); int size() const; int maxsize() const; ~Sor(); ; // A tagfüggvények megvalósítása lehetne az osztály deklarációjával együtt, de külön írva a megoldás menetének jobban megfelel. Sor<T>::Sor(int msiz = 160): msiz(msiz), siz(0), first(0) { tar = new T[msiz]; // tárterület lefoglalása T& Sor<T>::front() { if (siz == 0) throw std::out_of_range("sor::front: empty!"); return tar[first]; void Sor<T>::push(const T& e) { if (siz == msiz) pop(); tar[(first+siz) % msiz] = e; siz++;

// További csoportok megoldásai (back, pop, másoló) T& Sor<T>::back() { if (siz == 0) throw std::out_of_range("sor::back: empty!"); return tar[(first+siz-1) % msiz]; void Sor<T>::pop() { if (siz == 0) throw std::out_of_range("sor::pop: empty!"); first = (first+1) % msiz; siz--; Sor<T>::Sor(const Sor& s2) { t = NULL; *this = s2; 4. Feladat 4 pont Tételezze fel, hogy a 3. feladat Sor osztálya elkészült, és hibátlanul működik! Ezen osztály felhasználásával hozzon létre egy SzamSor osztályt maximum 120 db int típusú elem tárolására! Az osztály mindenben működjön úgy, ahogy a Sor osztály, kivéve a push metódus, ami ne engedjen adatot veszni: ha megtelik a tároló, akkor dobjon std::range_error kivételt! A SzamSor osztály felhasználásával írjon egy olyan kódrészletet, ami a standard inputról fájl végéig számokat olvas be, majd a beolvasás sorrendjében kiírja az átlagnál nagyobbakat! A programrészlet kezelje az esetleg keletkező kivételeket is! A feladatot delegációval vagy örökléssel lehetett megoldani. Delegáció esetén többet kellet írni, mivel a Sor minden tagfüggvényét delegálni kellett. Egy lehetséges megoldás örökléssel: class SzamSor : public Sor<int> { SzamSor() :Sor<int>(120) { void push(int i) { if (size() >= maxsize()) throw std::range_error("szamsor::push"); Sor<int>::push(i); ; Kódrészlet: try { SzamSor szsor; int x; int sum = 0; while (cin >> x) { szsor.push(x); sum += x; double atl = (double)sum / szsor.size(); while (szsor.size()) { x = szsor.front(); szsor.pop(); if (x > atl) cout << x << endl; catch (exceptions& e) { cerr << Kivetel: << e.what() << endl;

5. Feladat 5 pont A BME irattárában szeretnénk a szakdolgozatok (Szakdoga), diplomatervek (Diploma), doktori disszertációk (Doktori) tárolását elektronikus rendszerrel segíteni. A rendszerben együtt akarják tárolni (Tarolo) ezeket az írásműveket. Minden ilyen írásműnek (IrasMu) van szerzője, beadási éve és címe. Ezen felül a szakdolgozatok mellett tárolni kell a bíráló nevét és a javasolt osztályzatot is. A diplomatervek esetében még a bírálat szövegét is tárolni kell. A doktori disszertációk esetében pedig két bíráló és két bírálati szöveg van, valamint tárolni kell, hogy hány db irodalmi hivatkozás van a dolgozatban. A rendszerben a következő műveleteket szeretnénk megvalósítani: új írásmű felvétele; keresés adott cím szerint; a keresés eredményeként megtalált mű adatainak kiíratása; az összes mű címének kiíratása ábécé sorrendben; Feladatok: STL eszközök felhasználásával tervezzen olyan OO modellt, ami könnyen bővíthető további művekkel. Rajzolja fel a modell osztálydiagramját! Nem fontos tagfüggvényeket feltüntetni az UML ábrán. Használja a dőlt betűs neveket! Legyen a Tarolo osztálynak iterátora, amivel bejárhatók és elérhetők a tárolt írásművek! Deklarálja az osztályokat! Implementálja o a Szakdoga osztály konstruktorát; o a címek szerinti kereséséhez és ábécé sorrendben történő kiírásához szükséges metódusokat! Írjon egy olyan kódrészletet, ami Tarolo iterátorát felhasználva azonos című műveket keres, és kiírja azok adatait! A heterogén kollekció elemeinek helyes használatát értékeltük. Az öröklési hierarchia több módon is kialakítható volt, (szétágazó, láncoló, többszörös) ezeket mind elfogadtuk. Heterogén kollekció esetén súlyos hiba a tárolóból örökölni. Ezt szigorúan büntetettük. Egy lehetséges megoldás: Szétágazó: Láncoló:

A láncoló hierarchia megvalósítása: class IrasMu { string szerzo; string cim; int ev; IrasMu(string szerz, string cim, int ev); string getszerzo() const { return szerzo; string getcim() const { return cim; virtual void kiir() const = 0; // virtuális kell virtual ~IrasMu(); // virtuális kell ; class Szakdoga: public IrasMu { string biralo; int jegy; Szakdoga(string szerz, string cim, int ev, string bnev, int jegy) :IrasMu(szerz, cim, ev), biralo(bnev), jegy(jegy) { void kiir() const; // nincs getter, mert csak kiírjuk a bírálatot ; class Diploma: public Szakdoga { string biralat; Diploma(string szerz, string cim, int ev, string bnev, string bir, int jegy); void kiir(); // nincs getter, mert csak kiírjuk a bírálatot ; class Doktori: public Diploma { string biralo2; string biralat2; int irodalom; Doktori(string szerz, string cim, int ev, string bnev, string bir, string bnev2, string bir2); void kiir() const; // nincs getter, mert csak kiírjuk a bírálatot ; class Tarolo { vector<irasmu*> tar; // alaposztályra mutató pointer kell typedef vector<irasmu*>::iterator iterator; // vektor iterátorát delegáljuk void felvesz (IrasMu *ir) { tar.push_back(ir); void kiir(); iterator begin() { return tar.begin(); iterator end() { return tar.end(); iterator kerescimre(string cim); void kiircimeket(); ~Tarolo(){ // vektor push műveletét delegáljuk ; Tarolo::iterator Tarolo::keresCimre(string cim) { iterator it=begin(); while ( it!=end() && (*it)->getcim()!=cim ) ++it; return it; void Tarolo::kiirCimeket() { priority_queue<string, vector<string>, greater<string> > pq; for (iterator it=begin(); it!=end(); ++it) pq.push( (*it)->getcim() ); while (!pq.empty()) { cout << pq.top() << endl; pq.pop(); // vektor begin műveletét delegáljuk // vektor end műveletét delegáljuk

Azonos címűek keresése: Tarolo tar; for (Tarolo::iterator it1=tar.begin(); it1!=tar.end(); ++it1) { Tarolo::iterator it2=it1; while (++it2!= tar.end()) { if ( (*it1)->getcim() == (*it2)->getcim() ) { (*it1)->kiir(); (*it2)->kiir();