500. AA Megoldó Alfréd AA 500.



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

128. AA Megoldó Alfréd AA 128.

117. AA Megoldó Alfréd AA 117.

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

.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.

228. AA Default Konstruktor AA 228.

1.AA MEGOLDÓ BERCI AA 1.

503.AA Megoldo Arisztid 503.A

1000.AA Megoldo Alfréd 1000.A

500. DD Megoldó Alfréd DD 500.

500.AJ Megoldó Magyar Magdolna 500.J

500.AA Megoldo Arisztid 500.A

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

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

111. AA Megoldó Alfréd AA 111.

500.AA Megoldó Kulcsár 500.A

feladat pont min elért

C++ programozási nyelv Konstruktorok-destruktorok

Pénzügyi algoritmusok

1. Alapok. Programozás II

Objektumok inicializálása

Mit ír ki? feladatok megoldásokkal

3. Osztályok II. Programozás II

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

AA MEGOLDÓ ALADÁR AA

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

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.

feladat pont min elért

Programozás II. 3. gyakorlat Objektum Orientáltság 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]++;

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

5. Gyakorlat. struct diak {

Osztály és objektum fogalma

Programozás C++ -ban 2007/4

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

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Bevezetés a programozásba 2

Fejlett programozási nyelvek C++ Iterátorok

Elemi Alkalmazások Fejlesztése II.

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

C++ Standard Template Library (STL)

Programozás C++ -ban

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

C++ programozási nyelv

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

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

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

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

Kalapácsvetés 2016 szöveges

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Alprogramok, paraméterátadás

Programozás C++ -ban

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszé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) {} };

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

Bevezetés a programozásba I.

Maximum kiválasztás tömbben

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?

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

Bevezetés a programozásba Előadás: A const

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

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

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

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozás C++ -ban 2007/7

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

OOP #14 (referencia-elv)

Virtuális függvények (late binding)

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

Osztályok. 4. gyakorlat

Globális operátor overloading

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

Objektumorientált programozás C# nyelven

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.

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

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

Programozás II gyakorlat. 6. Polimorfizmus

Programozás. Osztályok, Származtatott osztályok. Fodor Attila

BME MOGI Gépészeti informatika 8.

A C programozási nyelv I. Bevezetés

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Pénzügyi algoritmusok

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Pénzügyi algoritmusok

Programozási alapismeretek 2009/2010

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

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

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

A C programozási nyelv I. Bevezetés

Programozás módszertan

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

Programozási Nyelvek: C++

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

Átírás:

Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. 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 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 6 Σ 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 = 0) :alap(i) { cout << alap << 'k'; Alap(const Alap&) :alap(360) { cout << alap << 'c'; Alap& operator=(const Alap& a) { cout << a.alap << 'e'; return *this; virtual ~Alap() { cout << 'd'; class Uj :public Alap { const char *s; Uj(const char *s = "A", int al = 0) :s(s), Alap(al) { cout << s << "Uk"; Uj(const Uj& u) : s(u.s) { cout << s << "Uc"; ~Uj() { cout << "Ud"; int main() { Uj me0("megold", 0); Uj b1 = me0; b1 = me0; Alap* p = new Alap[2]; delete[] p; return(0); 0 k M E G O L D U k 0 k M E G O L D U c 0 e 0 k 0 k d d U d d U d d

2. Feladat Σ 3 pont Egy gyártósor működését szeretnénk modellezni. A gyártás során az elemi alkatrészekből (Alkatresz) egyre összetettebb alkatrészek (OszetettAlkatresz) készülnek, majd ezek felhasználásával eljutunk a végtermékig. A modellben heterogén gyűjteményként kívánjuk kezelni az összetett alkatrészeket, melyek maguk is alkatrészek. Az alkatrészek közös adata a cikkszám (tetszőleges karaktersorozat). Deklarálja az alaposztályt (Alkatresz) C++ nyelven úgy, hogy az később felhasználható legyen tetszőleges alkatrész, pl. OsszetettAlkatresz származtatására is! Az alaposztály tegye lehetővé a következő műveletek elvégzését: cikkszám megadása a konstruktorban. cikkszám(ok) kiíratása (print) a paraméterként kapott std::ostream típusú objektumra. Ügyeljen arra, hogy később a származtatással létrejövő összetett alkatrész minden elemi alkatrésze is kiírható legyen! Elemszám megállapítása (elemszam) (hány db elemi alkatrészből áll az adott alkatrész). Különböző alkatrészek esetén a megállapítás algoritmusa eltérhet, pl. az összetett alkatrész elemszáma az azt alkotó összes elemi alkatrész száma lesz! Ügyeljen ara, hogy a származtatott osztályban a későbbiekben lesz dinamikus adat! Valósítsa meg az elemi alkatrész (Alkatresz) osztály tagfüggvényeit! Használja a dőlt betűvel szedett azonosítókat! A cikkszám tárolásához használja a string osztályt, ami képes tetszőleges hosszú karaktersorozatot tárolni! (2p) Sorolja fel a string osztály azon metódusait, melyet megoldásában felhasznált! Működjön az elvárásoknak megfelelően az alábbi kódrészlet! (1p) Alkatresz csavard = Alkatresz("12-456-89"), tmp(""); tmp = csavard; class Alkatresz { protected: string cikkszám; Alkatresz(string cikk) : cikkszám (cikk) { virtual void print (ostream& os) { os << cikkszám << endl; virtual int elemszam() { return 1; virtual ~Alkatresz() { Nincs szükség külön másoló konstruktorra és operator= -re mert jó a default! A megoldás használja a string osztály konstruktorait (másoló, const char*), destruktorát, operator= és az operator<<(ostream& string) globális operatort, ami nem tagfüggvény.

3. Feladat Σ 5 pont A 2. feladat gyártási modelljében egy összetett alkatrész tetszőleges számú alkatrészből áll, melyek bármelyike lehet elemi vagy összetett (vagy másféle) is. A modellezési feladat folytatásaként deklarálja az összetett alkatrész (OsszetettAlkatresz) osztályt C++ nyelven! Az osztály tegye lehetővé a következő műveletek elvégzését: Összetett alkatrész cikkszámának megadása a konstruktorban. Új alkotóelem (alkatrész) hozzáadása az összetett alkatrészhez (add). Az új elemet az alkatrészjegyzék végére tegye! alkatrész törlése az alkatrészjegyzék végéről (del). A törlés során a törölt alkatrészt semmisítse meg! cikkszámok kiíratása (print) a paraméterként kapott std::ostream típusú objektumra. Az összetett alkatrész valamint az összes alkotóelem cikkszámának lista-szerű kiíratása. Elemszám megállapítása (elemszam) (hány db elemi alkatrészből áll az adott alkatrész). Az osztály az alkotóelemeket úgy tárolja, hogy mindig pontosan annyi memóriaterületet foglaljon, ami éppen szükséges a tároláshoz (ne többet, ne kevesebbet)! Az objektumpéldány megszűnésével az alkotóobjektumok is szűnjenek meg! Oldja meg, hogy az OsszetettAlkatresz osztály ne legyen másolható és az értékadás operátora se legyen elérhető! Tételezze fel, hogy a 2. feladat Alkatresz osztálya létezik! Használja a dőlt betűvel szedett azonosítókat! Valósítsa meg a konstruktort, valamint a print() és az add() tagfüggvényeket! class OsszetettAlkatresz : public Alkatresz { Alkatresz **tar; // pointereket tárolunk dinamikus területen int darab; OsszetettAlkatresz(const OsszetettAlkatresz&); OsszetettAlkatresz& operator=(const OsszetettAlkatresz&); OsszetettAlkatresz(string); void print(ostream&); int elemszam(); void add(alkatresz*); void del(); ~OsszetettAlkatresz(); OsszetettAlkatresz::OsszetettAlkatresz(const char* cikk):alkatresz(cikk){ tar = new Alkatresz*[darab = 0]; void OsszetettAlkatresz::print(ostream& os) { os << "osszetett (" << darab << "db): "; Alkatresz::print(cout); for (int i = 0; i < darab; i++) tar[i]->print(os); void OsszetettAlkatresz::add(Alkatresz* resz) { Alkatresz **tmp = new Alkatresz*[darab + 1]; for (int i = 0; i < darab; i++) tmp[i] = tar[i]; tmp[darab++] = resz; delete[] tar; tar = tmp;

4. Feladat Σ 4 pont Írjon függvénysablont (my_for), ami az STL for_each sablonjához hasonlóan (annak felhasználása nélkül) végiglépdel egy tároló elemein és minden elemen végrehajtja a paraméterként megadott függvényt ill. függvényobjektumot! A függvény két előrehaladó iterátort kap paraméterként, ami kijelöli a jobbról nyílt intervallum kezdetét és végét, továbbá paraméterként kap egy egyparaméterű végrehajtandó függvényt is. A my_for függvény void visszatérési értékű legyen! (2 pont) Amennyiben helyesen készíti el a függvénysablont, akkor az alábbi kódrészlet kiírja a standard kimenetre, hogy Haho C++. char v[] = "Haho C++"; my_for (v, v+8, putchar); Mutassa be a függvénysablon alkalmazását egy olyan feladatra, amelyben double típusú értékeket tartalmazó tárolóból (store) ki kell írni a szabványos kimenetre az összes adatot! Minden adatot külön sorba írjon! Definiálja a kiíráshoz szükséges függvényt, vagy függvényobjektumot! (1p). Tételezze fel, hogy a store objektumnak van iterátora, és létezik a szokásos begin(), end() tagfüggvénye! Írja meg a megfelelő programrészletet, ami a my_for sablon felhasználásával kiírja az összes adatot a store nevű tárolóból (1p)! template <typename Iter, class Pred> void my_for(iter beg, Iter end, Pred pred) { while (beg!= end) pred(*beg++); struct Print{ void operator()(double d) { cout << d << endl; my_for(store.begin(),store.end(), Print()); Vagy függvénnyel megoldva: void Printf(double d) { cout << d << endl; my_for(store.begin(),store.end(), Printf);

5. Feladat: A feladat megoldásához használhatja az STL elemeit! Σ 5 pont Egy egyetem (Egyetem) hallgatóit (Hallgato), oktatóit (Oktato), demonstrátorait (Demonstrator), egyszóval polgárait (Polgar) és azok kapcsolatát szeretnénk modellezni. A modell a későbbiekben bővülni fog, pl. a technikai dolgozókkal, ezért fontos, hogy könnyen bővíthető legyen. Fontos továbbá, hogy kerüljük az adatok redundáns (többszörös) tárolását. Így pl. ha valamelyik szereplő több szerepkörben jelenik meg, akkor a közös adatait (pl. név) csak egyszer tároljuk. A legjobb példa erre a demonstrátor, akinek oktatói és hallgatói szerepköre is van. A feladatanalízis során a szereplők attribútumait az alábbiakban határoztuk meg: Egyetem (Egyetem) o egyetem neve (string) o egyetem polgárai Oktató: (Oktato) o név (string) o fizetés/megbízási díj (double) Hallgató (Hallgato) o név (string) o neptunkkód (string) Demonstrátor (Demonstrator) o név (string) o neptunkkód (string) o fizetés/megbízási díj (double) Kezdeti modellünk csak minimális funkciókkal rendelkezik: o objektumok létrehozása (minden attribútum - kivéve a lista jellegű elemeiket - legyen megadható a konstruktorban) o objektumok megszüntetése o polgár (oktató, hallgató, demonstrátor, stb) felvétele az egyetemre (felvesz()) o egyetemi névsor kiírása a standard kimenetre (nevsor()). A névsorban soronként egy nevet tartalmazzon! hallgatók neve mellett jelenjen meg a hallgató a demonstrátorok neve mellet pedig a demonstrátor 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 modellt megvalósító osztályokat! Használja a dőlt betűs azonosítókat! (2p) Valósítsa meg a következő tagfüggvényeket: felvesz(), Demonstrator osztály konstruktora, és az osztályok azon metódusát, ami szükséges névsor elkészítéséhez (nevsor())! (2p) Működjön helyesen az alábbi kódrészlet! Egyetem bme("bme"); bme.felvesz(new Oktato("Prof. Nagyon Okos Edi", fizetes1)); bme.felvesz(new Oktato("Dr. Szoke Barna", fizetes2)); bme.felvesz(new Hallgato("Streber Szilard Sajo", KOD)); bme.felvesz(new Demonstrator("Doktor Andusz", masik_kod, megbdij)); bme.nevsor(); Polgar - nev: string + print(): void Egyetem - nev: string - polgarok: Polgar** + felvesz (Polgar*): void + nevsor(): void Hallgato - neptun: double Oktato - fizetes: string + print(): void + printt(): void Demonstrator + print(): void

A sárgával kiemelt részek helyett lehetne egy pontosvessző is, mert nem kellett megvalósítani. class Polgar { string nev; Polgar(string nev) : nev(nev) { virtual void print() { cout << nev; virtual ~Polgar() { class Oktato : virtual public Polgar { double fizetes; Oktato(string nev, double fizu) : Polgar(nev), fizetes(fizu) { class Hallgato : virtual public Polgar { string neptun; Hallgato(string nev, string nept) : Polgar(nev), neptun(nept) { void print() { Polgar::print(); cout << " hallgato"; class Demonstrator : public Hallgato, public Oktato { Demonstrator(string nev, string nept, double fizu) : Polgar(nev), Hallgato("", nept), Oktato("", fizu) { void print() { Polgar::print(); cout << " demonstrator hallgato"; class Egyetem { string nev; vector<polgar*> polgarok; Egyetem(string nev) :nev(nev) { void felvesz(polgar* polg) { polgarok.push_back(polg); void nevsor(); ~Egyetem(); void Egyetem::nevsor(){ for (size_t i = 0; i < polgarok.size(); i++) { polgarok[i]->print();