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



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

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

.AA Megoldó Alfréd AA.

1. BB Megoldó Béla BB 1.

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.

485. AA Megoldó Alfréd AA 485.

128. AA Megoldó Alfréd AA 128.

500. CC Megoldó Alfréd CC 500.

200. Megoldó Alfréd 200.

500. AA Megoldó Alfréd AA 500.

417. AA Megoldó Alfréd AA 417.

503.AA Megoldo Arisztid 503.A

1.AA MEGOLDÓ BERCI AA 1.

191. BB Megoldó Alfréd BB 191.

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

500.AJ Megoldó Magyar Magdolna 500.J

Bevezetés a programozásba 2

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

1000.AA Megoldo Alfréd 1000.A

500.AA Megoldo Arisztid 500.A

Mit ír ki? feladatok megoldásokkal

500. DD Megoldó Alfréd DD 500.

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

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

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

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

500.AA Megoldó Kulcsár 500.A

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

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

Programozás C++ -ban 2007/4

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

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

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

Osztály és objektum fogalma

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

111. AA Megoldó Alfréd AA 111.

C++ Standard Template Library (STL)

1. Alapok. Programozás II

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

INFORMATIKAI ALAPISMERETEK

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

AA MEGOLDÓ ALADÁR AA

Bevezetés a C++ programozásba

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

INFORMATIKAI ALAPISMERETEK

Bánsághi Anna

CAD-CAM

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

MATEMATIKA ÍRÁSBELI VIZSGA május 3.

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

Fejlett programozási nyelvek C++ Iterátorok

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

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

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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

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

INFORMATIKAI ALAPISMERETEK

feladat pont min elért

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

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

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

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

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) {} };

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

feladat pont min elért

Maximum kiválasztás tömbben

ELEKTRONIKAI ALAPISMERETEK

3. Gyakorlat Ismerkedés a Java nyelvvel

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

Származtatási mechanizmus a C++ nyelvben

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

AWP TELEPÍTÉSE- WINDOWS7 64 OPERÁCIÓS RENDSZEREN

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

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

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.

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

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

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Objektumorientált programozás C# nyelven

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

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

Programozás C++ -ban

Lineáris algebra gyakorlat

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

Alkalmazott modul: Programozás

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!

Bevezetés a programozásba I.

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

ELEKTRONIKAI ALAPISMERETEK

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

G Szabályfelismerés feladatcsomag

Bevezetés a programozásba I.

Laborgyakorlat Windows 7 upgrade-je, felhasználói adatok költöztetése

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

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

Átírás:

Programozás alapjai 2. (inf.) zárthelyi 2013.05.13. gyak. hiányzás: 0 kzhpont: #HIÁNYZIK ABCDEF MEG/1. Hftest: 0 (p) 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! Abba a sorba írjon, ahol a kiírás keletkezik! Figyeljen a változók élettartamára! #include <iostream> std::ostream& cout = std::cout; inline void nl() { cout << std::endl; struct Adat { int i; Adat(int i = -1) :i(i) { cout << i << "k"; Adat(const Adat& a) :i(a.i) { cout << i << "c"; Adat operator+(int n) { Adat tmp(i + n); cout << '+'; return tmp; ~Adat() { cout << "d"; ; Adat operator+(int n, Adat a) { Adat tmp(a + n); return tmp; struct Uj { Adat a; Uj(int a = -2, const char *m = "cde"):a(a) { cout << m << "K"; Uj(const Uj& u) { cout << "C" ; ~Uj() { cout << "D"; ; int main() { Adat *p = new Adat(1); nl(); 1 k *p = *p + 3; nl(); 4 k + d *p = 2 + *p; nl(); 4 c 6 k + d d Uj u2(4, "ABCDEF"); nl(); 4 k A B C D E F K Uj uj16 = u2; nl(); - 1 k C delete p; nl(); d return 0; D d D d 2. Feladat Σ 4 pont 2.a) Írjon függvénysablont (zip), ami két sorozatból egy új sorozatot képez! A sablon az új sorozat elemeit az eredeti sorozat megegyező pozíciójú elemeiből az 5. paramétereként megadott kétparaméteres függvénnyel/függvényobjektummal képezze! A zip függvény első három paramétere három bemeneti iterátor, amelyek bemeneti adatokat jelölik ki: Az első kettő az első sorozat elejét és végét (jobbról nyílt intervallum kezdete és vége), a harmadik pedig a másik sorozat elejét. A negyedik paraméter egy kimeneti iterátor, ami az eredmény elejére mutat. Amennyiben helyesen oldja meg a feladatot, akkor az alábbi kódrészlet a következőt írja ki: 6, 5, 4, 4, 5, 6, int in1f[] = { 1, 2, 3, 4, 5, 6; // egyik bemeneti sorozat int in2f[] = { 6, 5, 4, 3, 2, 1; // másik sorozat int outf[6]; // eredmény helye zip(in1f, in1f+6, in2f, outf, max<int>); copy(outf, outf+6, ostream_iterator<int>(cout, ", ")); F. Max. Elért 1 3 2 4 3 4 4 4 5 5 Σ 20

2.b) Készítsen egy olyan függvényobjektumot, ami alkalmazható a fenti példában a páronkénti összegek előállítására! (1p) 2.c) Mutassa be, hogy az elkészített függvénysablonnal és függvényobjektummal hogyan tudná összeadni két egészeket tartalmazó std::vector elemeit! (1p) template <class Ii1, class Ii2, class Oi1, class F> void zip(ii1 b1, Ii1 e1, Ii2 b2, Oi1 oi, F f) { while (b1!= e1) { *oi++ = f(*b1, *b2); b1++; b2++; struct Osszead { int operator()(int i, int j) { return (i + j); ; vector<int> v1, v2, v3,; zip(v1.begin(), v1.end(), v2.begin(), v3.begi(), Osszead()); 3. Feladat Σ 4 pont Készítsen olyan korlátos méretű generikus sort (Queue), ami képes visszaadni a legnagyobb és a legkisebb elemet is a tárolóból! Az elemek összehasonlítását a < operátorral végezze! A tároló maximális méretét az osztály egyparaméteres konstruktora vegye át, melynek alapértelmezett értéke 160 legyen! Az osztály rendelkezzen a következő műveletekkel: max_e() a sor legnagyobb elemének referenciáját adja; dobjon std::out_of_range kivételt, ha üres a sor; min_e() a sor legkisebb elemének referenciáját adja; dobjon std::out_of_range kivételt, ha üres a sor; top() a sor legelső 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 dobjon std::out_of_range kivételt; pop() eldobja a sor legelső elemét; 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 max_e, min_e, és top tagfüggvényeknek nem kell konstans objektumra működni! Deklarálja a Queue osztályt! Valósítsa meg az osztály egyparaméteres konstruktorát, a másoló konstruktort, valamint a min_e(), és a push() metódusokat! Egy rövid kódrészlettel mutassa be az osztály használatát: deklaráljon egy sort valós adatokkal és tegyen bele egy elemet! class Queue { T *tar; size_t maxsiz; size_t siz; Queue(size_t maxsiz = 160): maxsiz(maxsiz), siz(0) { Queue(const Queue&); Queue& operator=(const Queue&); T& max_e(); T& min_e(); T& top(); void push(const T&); void pop(); size_t size() const; size_t maxsize() const; ~Queue(); ;

Queue<T>::Queue(const Queue& q) { maxsiz = q.maxsiz; siz = q.siz; for (size_t i = 0; i < siz; ++i) tar[i] = q.tar[i]; T& min_e () throw (out_of_range) { if (size() == 0) throw out_of_range("queue::min_e: empty!"); return *min_element(tar, tar+siz); void Sor<T>::push(const T& e) { if (siz >= maxsize) throw std::out_of_range("queue::push: full!"); tar[siz++] = e; Sor<double> s(100); s.push(3.56); // másik csoportok feladatai: Queue<T>& Queue<T>::operator=(const Queue& q) { if (&p!= this) { delete[] tar; maxsiz = q.maxsiz; siz = q.siz; for (size_t i = 0; i < siz; ++i) tar[i] = q.tar[i]; return *this; T& max_e () throw (out_of_range) { if (size() == 0) throw out_of_range("queue::max_e: empty!"); return *max_element(tar, tar+siz); T& Queue <T>::top { if (siz == 0) throw std::out_of_range("queue::top: empty!"); return tar[0];

4. Feladat Σ 4 pont Az std::list tároló felhasználásával hozzon létre egy olyan perzisztens tárolót (PListString), amely std::string típusú adatokat (a stringben nincsenek szóközök) tárol és úgy viselkedik, mint egy std::list tároló, azaz az std::list minden tagfüggvénye (konstruktorok is) és típusa elérhető! Deklarálja és valósítsa meg a PListString osztályt! Mutassa be az elkészült tároló használatát: egy kódrészletben hozzon létre kettő darab eltérő méretű PListString típusú objektumot, írja ki (perzisztálja) azokat egy fájlba, majd töltse vissza úgy, hogy a két objektum tartalma felcserélődjön! using namespace std; struct PListString: public list<string> { PListString(size_t n, const string& val = string()) : list<string>(n, val) { template <class Iterator> PListString(Iterator first, Iterator last) : list<string>(first, last) { void write(ostream& os) { os << size() << endl; for (iterator it = begin(); it!= end(); ++it) os << *it << endl; void read(istream& is) { size_t siz; is >> siz; erase(begin(),end()); while (siz--) { string str; is >> str; push_back(str); ; PListString p1(1, "haho"), p2(2, "ketto"); ofstream ofs("zh.dat"); p1.write(ofs); p2.write(ofs); ifstream ifs("zh.dat"); p2.read(ifs); p1.read(ifs); 5. Feladat Σ 5 pont Egy mosoda (Mosoda) működését szeretnénk modellezni. Az érkező koszos ruhákat (Ruha) a mosoda azonnal kimossa és eltárolja. A ruháknak van tulajdonosuk (string). Mosáskor (mos) a ruhák koszos állapotból tiszta állapotba kerülnek. Az általános ruhafajtán kívül van a színes ing (Ing), ami minden alkalommal 3%-ot veszít a színéből (double). Ezen kívül a jövőben további speciális ruhafajtákat tervezünk bevezetni (pl. kétrészes ruha). Ha a mosoda megsemmisül (pl. leég), az összes még ki nem adott ruha is megsemmisül. A rendszerben a következő műveleteket kell megvalósítani: új ruha beadása a mosodába (bead); adott tulajdonos tiszta ruhájának kiadása a Mosoda-ból (kiad); ha nincs ilyen ruha, dobjon egy standard kivételt; mosoda megsemmisülése; ruha adatainak kiírása (kiir); ing esetén a szín erősségét is írja ki; ruha tisztítása (mos). Feladatok: STL eszközök felhasználásával tervezzen olyan OO modellt, ami könnyen bővíthető további ruhafajtákkal. Rajzolja fel a modell osztálydiagramját! Ne tüntesse fel a tagfüggvényeket az UML ábrán! Használja a dőlt betűs neveket! Deklarálja és implementálja a Mosoda, Ruha és Ing osztályokat! Írjon egy olyan kódrészletet, ami különböző ruhákat dinamikusan létrehoz, bead a mosodába, és kiadat egy kimosott ruhát, amelynek az adatait kiírja! A kivett ruhát ezután szüntesse meg!

class Ruha { enum {piszkos, tiszta allapot; const string tulaj; Ruha(const string & a) : allapot(piszkos), tulaj(a) { const string& tulajdonos() const { return tulaj; virtual void tisztit() { allapot = tiszta; virtual void kiir() const { cout << "#" << tulaj << ", " << (allapot == piszkos? "piszkos" : "tiszta"); virtual ~Ruha() { ; class Garbo : public Ruha { double szinero; Garbo(const string & a, double sz = 1.0) : Ruha(a), szinero(sz) { void tisztit() { Ruha::tisztit(); szinero *=.97; void kiir() const { Ruha::kiir(); cout << " szinero: " << szinero; ; class Mosoda { list<ruha*> t; void bead(ruha *r) { r->tisztit(); t.push_back(r); Ruha * kiad(const string & tulaj) { for (list<ruha*>::iterator i = t.begin(); i!= t.end(); i++) if ((*i)->tulajdonos() == tulaj) { Ruha *r = *i; t.erase(i); return r; throw runtime_error("elvesztettuk, sajnaljuk"); ~Mosoda() { for (list<ruha*>::iterator i = t.begin(); i!= t.end(); i++) delete *i; ; Mosoda m1; m1.bead(new Ruha("t1")); m1.bead(new Garbo("g1")); Ruha *r = m1.kiad("g1"); r->kiir(); delete r;