500. CC Megoldó Alfréd CC 500.

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

128. AA Megoldó Alfréd AA 128.

.AA Megoldó Alfréd AA.

117. AA Megoldó Alfréd AA 117.

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.

500. DD Megoldó Alfréd DD 500.

228. AA Default Konstruktor AA 228.

1.AA MEGOLDÓ BERCI AA 1.

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

503.AA Megoldo Arisztid 503.A

1000.AA Megoldo Alfréd 1000.A

500.AJ Megoldó Magyar Magdolna 500.J

500.AA Megoldo Arisztid 500.A

111. AA Megoldó Alfréd AA 111.

AA MEGOLDÓ ALADÁR AA

Pénzügyi algoritmusok

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

Mit ír ki? feladatok megoldásokkal

feladat pont min elért

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

feladat pont min elért

1. Alapok. Programozás II

500.AA Megoldó Kulcsár 500.A

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

3. Osztályok II. Programozás II

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

C++ programozási nyelv Konstruktorok-destruktorok

Objektumok inicializálása

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

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

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

Kalapácsvetés 2016 szöveges

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

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

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

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

C++ Standard Template Library (STL)

Bevezetés a programozásba I.

5. Gyakorlat. struct diak {

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

Programozás alapjai II. (4. ea) C++

BME MOGI Gépészeti informatika 8.

Programozás C++ -ban 2007/4

0.2.1 Operátorok túlterhelése (műveletek definiálhatók felhaszn. típusokra) Kutya. Eb1. Eb2. Név (txt): Rex. Blöki. Német juhász 3

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 C++ -ban

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

Maximum kiválasztás tömbben

ISA szimulátor objektum-orientált modell (C++)

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

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 II. 2. gyakorlat Áttérés C-ről C++-ra

Fejlett programozási nyelvek C++ Iterátorok

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

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

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

Szövegek C++ -ban, a string osztály

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

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.

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

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

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

Alprogramok, paraméterátadás

Programozás II gyakorlat. 6. Polimorfizmus

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

Bevezetés a programozásba 2

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

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

Osztály és objektum fogalma

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Bevezetés a programozásba I.

Programozás alapjai II. (7. ea) C++

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

OOP: Java 8.Gy: Gyakorlás

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

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás C és C++ -ban

Elemi Alkalmazások Fejlesztése II.

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

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

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

Programozás C++ -ban

Programozási Nyelvek: C++

Bevezetés a programozásba. 9. Előadás: Rekordok

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

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

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

Algoritmizálás + kódolás C++ nyelven és Pascalban

C++ Gyakorlat jegyzet 7. óra

Programozás alapjai II. (4. ea) C++

Programozás alapjai II. (4. ea) C++

Programozási alapismeretek 2009/2010

Számítógép és programozás 2

A C programozási nyelv I. Bevezetés

C++ programozási nyelv Konstruktorok Gyakorlat

C++ Gyakorlat jegyzet 8. óra

Mentsd el code file-t kektura.cs néven, illetve kiterjesztéssel! Másold be a kektura.csv állományt a Projects munkamappa megfelelő almappájába!

Átírás:

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, 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 Adat { int adat; Adat(int i = 0) :adat(i) { cout << adat << 'k'; Adat(const Adat&) :adat(4) { cout << adat << 'c'; Adat& operator=(const Adat& a) { cout << a.adat << 'e'; return *this; ~Adat() { cout << 'd'; class Ma { Adat a; const char *s; Ma(const char *s = "C", int al = 0) :s(s), a(al) { cout << s << "Mk"; ~Ma() { cout << "Md"; int main() { Ma me6("megold", 6); Ma b1 = me6; b1 = me6; Ma* p = new Ma[1]; delete[] p; return(0); 6 k M E G O L D M k 4 c 6 e 0 k C M k M d d M d d M d d 2. Feladat Σ 3 pont Deklaráljon C++ nyelven egy olyan osztályt (Person), ami személyi adtatok (név, születési év) tárolására alkalmas! Tételezze fel, hogy létezik a Text osztály, amit nem változtathat meg, amely tetszőleges hosszú karakterláncok tárolására alkalmas. A név tárolásához használja a Text típust! A Person osztály minden adata legyen külön-külön lekérdezhető és beállítható, de kívülről közvetlenül ne legyen elérhető! Legyen a destruktor virtuális! Valósítsa meg az osztály tagfüggvényeit! Használja a dőlt betűvel szedett azonosítókat! Működjön az elvárásoknak megfelelően az alábbi kódrészlet! (2p) Legyen az osztálynak egy kisebb, mint operátora (operator<), amivel össze lehet hasonlítani két Person-t a koruk alapján! (1p)

Person s1, s2 = Person("Jancsi", 1980), s3("juliska", 1985); s1 = s2; if (s3 < s2) cout << s3.getnev() << "a fiatalabb"; else if (s2 < s3) cout << s2.getnev() << "a fiatalabb"; else cout << "azonos koruak"; class Person { Text nev; int szulido; Person(const char *n = "", int sz = 0) : nev(n), szulido(sz) { void setnev(const Text & n) { nev = n; void setszul(int ev) { szulido = ev; Text getnev() const { return nev; int getszul() const { return szulido; bool operator<(const Person& sz) const { return szulido > sz.szulido; virtual ~Person() { 3. Feladat Σ 5 pont A 2. feladatban felhasznált Text osztályt az alábbi sablonnal valósítottuk meg: template <class T = char> class mytext { typedef T char_typ; char_typ *str; // pointer a stringre (lezáró nullával) int len; // hossz, amibe nem számoljuk bele a lezáró nullát explicit mytext (const char_typ* s = 0); mytext (const mytext&); mytext& operator=(const mytext&); mytext& operator+=(char_typ); // a string végéhez fűz egy karaktert mytext& operator+=(const mytext&); // a végéhez fűz egy stringet bool operator<(const mytext&) const; operator const char_typ*() { return str; ~mytext () { delete [] str;

mytext<t>::mytext (const char_typ* s) :len(0) { if (s!= 0) for (const char_typ *t = s; *t; t++) len++; // meghatározzuk a hosszát str = new char_typ[len+1]; // len+1 helyet foglalunk if (s!= 0) for (char_typ *t = str; *s; s++) *t++ = *s; // átmásoljuk str[len] = 0; // lezáró nulla Valósítsa meg a sablon másoló konstruktorát, az értékadó operátorát, és az operator+=(char_typ) tagfüggvényét! (4p) Definiáljon egy wtext típust, ami széles karakterekből álló karaktersorozat tárolására alkalmas! Deklaráljon ezzel a típussal egy vezeteknevem azonosítójú példányt, amit a saját vezetéknevével inicializál! (1p) mytext<t>::mytext (const mytext& s) { str = 0; *this = s; mytext<t>& mytext<t>::operator=(const mytext& s) { if (this!= &s) { delete [] str; len = s.len; str = new char_typ[len+1]; for (int i = 0; i <= len; i++) str[i] = s.str[i]; return *this; mytext<t>& mytext<t>::operator+=(char_typ c) { char_typ *tmp = new char_typ[len+2]; for (int i = 0; i < len; i++) tmp[i] = str[i]; delete[] str; str = tmp; str[len++] = c; str[len] = 0; return *this; Másik Csoportnak: mytext<t>& mytext<t>::operator+=(const mytext& s){ char_typ *tmp = new char_typ[len+s.len+1]; int i = 0; for (; i < len; i++) tmp[i] = str[i]; for (int j = 0; j < s.len; j++) tmp[i++] = s.str[j]; delete[] str; str = tmp; len = i; str[len] = 0; return *this; typedef mytext<wchar_t> wstring; wstring vezeteknevem(l"megodldo");

4. Feladat Σ 4 pont Az STL generikus prioritási sorának (priority_queue) felhasználásával írjon programrészletet, amely először névsorrendben, majd koruk sorrendjében kiírja azok nevét, akiket egy iterátorral rendelkező tárolóban (varolista) tartunk nyilván. A tárolóban Person (lásd 2. feladat) típusú objektumokat tárolunk. Ha szükséges, készítsen predikátumot (függvényobjektum) is! Segítségül megadjuk az std::priority_queue rövid leírását: template <class T, class Container = vector<t>, class Compare = less<t> > class priority_queue; Az osztály tagfüggvényei a következők: def. konstruktor: létrehoz egy üres Container típusú tárolót és egy Compare típusú predikátumot konstruktor két iterátorral: mint a default, majd a tárolót feltölti az iterátorok által meghatározott elemekkel bool empty(): visszaadja, hogy üres-e a sor int size(): visszaadja a sorban tárolt elemek számát const T& top():sor legnagyobb prioritású elemének referenciáját adja void pop(): törli a sor legnagyobb prioritású elemét void push(const T& t): betesz egy új elemet a sorba priority_queue<person > q(varolista.begin(), varolista.end()); while(q.size()) { cout << q.top().getnev() << endl; q.pop(); struct comp { bool operator()(const Person& sz1, const Person& sz2) const { return sz1.getnev() < sz2.getnev(); priority_queue<person, vector<person>, comp> q2(varolista.begin(), varolista.end()); while(q2.size()) { cout << q2.top().getnev() << endl; q2.pop(); 5. Feladat: A feladat megoldásához használhatja az STL elemeit! Σ 5 pont Három független nyilvántartási rendszer adatait szeretnénk integrálni úgy, hogy az bővíthető legyen, és ne tároljunk benne többszörösen (redundánsan) adatokat. Jelenleg a magánszemélyeket (Person) a lakossági adatbázisban (Lako), az olimpikonokat (Olimpikon) a Magyar Olimpiai Bizottság (MOB), az egyetemi hallgatókat (Hallgato) a Neptun (Neptun) adatbázisában tartják nyilván. Természetesen lehet olyan olimpikon, aki egyben hallgató is. A feladatanalízis során a szereplők attribútumait az alábbiakban határoztuk meg:

Person (Person) Olimpikon (Olimpikon) o legjobb olimpiai helyezés (egész) MOB, Neptun, Lako o tárolók Hallgató (Hallgato) o görgetett átlag (valós) Olimpikon hallgató (OlimpikonHallgato) o görgetett átlag (valós) o legjobb olimpiai helyezés (egész) Kezdeti modellünk csak minimális funkciókkal rendelkezik: o objektumok létrehozása (minden attribútum legyen megadható a konstruktorban) o objektumok megszüntetése o új adat felvétele a megfelelő adatbázisba (regisztral()) o az olimpikonok és a hallgatók névsorának kiírása a standard kimenetre (MOB::listaz(), Neptun::listaz()). A névsor soronként egy nevet tartalmazzon! Azon olimpikonok neve mellett, akik egyben hallgatók is, jelenjen meg az olimpikon és hallgató szöveg. Tervezzen objektummodellt a feladat megoldására. Osztálydiagrammal mutassa be az egyes osztályok attribútumait, és kapcsolatát, melyen jelölje a tagváltozók és tagfüggvények láthatóságát is! (1p) Deklarálja C++ nyelven a MOB, az Olimpikon, a Hallgato és az OlimpikonHallgato osztályokat! 2. feladatban készített Person osztályt felhasználhatja, azt nem kell újra deklarálnia! (2p) Valósítsa meg a következő tagfüggvényeket: MOB::regisztral(), OlimpikonHallgato konstruktorát, és az osztályok azon metódusát, ami szükséges a MOB névsor elkészítéséhez (MOB::listaz())! (2p) Működjön az alábbi kódrészlet! Lako lakosok; MOB mobadat; Neptun neptunadat; lakosok.regisztral(new Szemely("Jancsi", 1950)); Olimpikon* op = new Olimpikon("juliska", 1954, 30); lakosok.regisztral(op); mobadat.regisztral(op); OlimpikonHallgato* oph = new OlimpikonHallgato("Cseh Laci",1987,2,4.13); lakosok.regisztral(oph); mobadat.regisztral(oph); neptunadat.regisztral(oph); mobadat.listaz(); Person -nev: Text -szulido: int +getnev():text +setnev(text) +getszul(): int +setszul(int) Lako -lakok: vector<person*> +regisztral(person*): void +listaz(): void Olimpikon -helyezes: int +print(): virt. void Hallgató -atlag: double +print(): virt. void MOB -olimp: vector<olimpikon*> +regisztral(olimpikon*):void +listaz(): void OlimpikonHallgato +print():void Neptun -halgatok: vector<hallgato*> +regisztral(hallgató*): void +listaz(): void

class Olimpikon : virtual public Person { int helyezes; Olimpikon(Text nev, int kor, int hely) : Person(nev, kor), helyezes(hely) { virtual void print() { cout << getnev() << endl; class Hallgato : virtual public Person { double atlag; Hallgato(Text nev, int kor, double atl) : Person(nev, kor), atlag(atl) { virtual void print() { cout << getnev() << endl; class OlimpikonHallgato : public Hallgato, public Olimpikon { OlimpikonHallgato(Text nev, int kor, int hely, double atl) : Person(nev, kor), Olimpikon("", 0, hely), Hallgato("", 0, atl) { void print() {cout << getnev() << " olimpikon es hallgato" << endl; class MOB { vector<olimpikon*> olimpikonok; void regisztral(olimpikon* op) { olimpikonok.push_back(op); void listaz(); void MOB::listaz(){ for (size_t i = 0; i < olimpikonok.size(); i++) { olimpikonok[i]->print(); Másik Csoportnak: class Neptun { vector<hallgato*> hallgatok; void regisztral(hallgato* op) { hallgatok.push_back(op); void listaz(); void MOB::listaz(){ for (size_t i = 0; i < hallgatok.size(); i++) { hallgatok[i]->print();