117. AA Megoldó Alfréd AA 117.



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

500. AA Megoldó Alfréd AA 500.

Bevezetés a programozásba 2

128. AA Megoldó Alfréd AA 128.

500. CC Megoldó Alfréd CC 500.

.AA Megoldó Alfréd AA.

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

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

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

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

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

503.AA Megoldo Arisztid 503.A

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

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

1000.AA Megoldo Alfréd 1000.A

500. DD Megoldó Alfréd DD 500.

Bevezetés a C++ programozásba

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

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

Programozás C++ -ban 2007/4

Maximum kiválasztás tömbben

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.

3. Gyakorlat Ismerkedés a Java nyelvvel

Osztály és objektum fogalma

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

Objektumorientált programozás C# nyelven

228. AA Default Konstruktor AA 228.

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

Objektumorientált programozás C# nyelven III.

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

INFORMATIKAI ALAPISMERETEK

Információs Technológia

Bánsághi Anna

Objektumorientált programozás C# nyelven

1.AA MEGOLDÓ BERCI AA 1.

INFORMATIKAI ALAPISMERETEK

Származtatási mechanizmus a C++ nyelvben

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

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

Rekurzió. Horváth Gyula.

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 II. 4. Dr. Iványi Péter

Bevezetés Kiíratás Beolvasás Formázás Fájlkezelés Gyakorló feladatok C++ I/O. Bevezetés. Izsó Tamás február 20. Izsó Tamás C++ I/O / 1

111. AA Megoldó Alfréd AA 111.

500.AJ Megoldó Magyar Magdolna 500.J

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

1. Alapok. Programozás II

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

Mit ír ki? feladatok megoldásokkal

Alkalmazott modul: Programozás

Bánsághi Anna

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

500.AA Megoldo Arisztid 500.A

Kalapácsvetés 2016 szöveges

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

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

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

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

C# feladatok gyűjteménye

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

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

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

Objektumorientált programozás C# nyelven

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

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

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

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

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

Java II. I A Java programozási nyelv alapelemei

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

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

Programozás alapjai. 5. előadás

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

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

3. Osztályok II. Programozás II

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

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

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

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

Bevezetés a C programozási nyelvbe. Az Általános Informatikai Tanszék C nyelvi kódolási szabványa

500.AA Megoldó Kulcsár 500.A

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Access adatbázis elérése OLE DB-n keresztül

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

Programozás C++ -ban

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

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

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

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

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

Bevezetés a C++ programozási nyelvbe

Programozás II gyakorlat. 6. Polimorfizmus

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Pénzügyi algoritmusok

Átírás:

Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH: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 végigl, 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 Kollegája két feladatot kapott: 1. készítenie kellett egy olyan generikus osztálysablont, mely egy dinamikus tömböt valósít meg. A konstruktoron/destruktoron kívül csak a balértékként is használható index ([ ]) operátort kellett megvalósítania. 2. Be kellett mutatnia az osztály működését egy olyan Komplex osztály segítségével, ami hozzá tud adni komplex értékhez valós számot a + operátorral, és ki tudja írni magát egy std::ostream típusú objektumra a szokásos << operátorral. Sajnos kollegája elég sok hibát vétett. Javítsa ki, írja át a megfelelő helyeken az alábbi kódot úgy, hogy az a fenti elvárásoknak megfelelően működjön! #include <iostream> #include <stdexcept> using namespace std; template <typename T> class Tar { T *p1; unsigned int s; Tar(const Tar&); Tar& operator=(const Tar&); explicit Tar(unsigned int s) :s(s) { p1 = new T[s]; T& operator[](unsigned int i) { if (i >= s) throw range_error("tar::index"); return p1 [i]; virtual ~Tar() { for (int i = 0; i < size; i++) delete[] p1 [i]; ; class Komplex { double re, im; Komplex(double re = 0, double im = 0) :re(re), im(im) { Komplex& operator+(const Komplex k, double c) const { Komplex tmp; tmp.re = k.re + c; tmp.im = im; return *thistmp; friend ostream& operator<<(ostream& os, const Komplex& k) { os << "(" << k.re << "," << k.im << ")"; return os; ; int main() { Tar<Komplex> a(101); a[0] = a[1] + 10; cout << a[0] << endl; return 0; F. Max. Elért 1 3 2 5 3 3 4 4 5 5 Σ 20

2. Feladat 5 pont Készítsen C++ nyelven egy generikus halmaz (Halmaz) osztályt, amely sablonparaméterként kapja a halmaz maximális méretét (számosságát), és egy osztályt is, amit kivételként dob, ha az elemek száma meghaladná a maximumot! Ez utóbbinak legyen egy standard (STL) hibaosztály az alapértelmezése! Valósítsa meg a következő operátorokat: elem hozzáadása a halmazhoz a += operatorral összes elem törlése (clear) annak eldöntése, hogy egy adott elem benne van-e a halmazban (iselement) 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 halmazt, amely max. 10 double elemet tartalmazhat! Specializálja ennek a halmaznak az iselement tagfüggvényét úgy, hogy két elemet akkor tekintsen azonosnak, ha a különbségük abszolútértéke kisebb, mint 1e-10! template <class T, int size, class E = std::range_error> class Halmaz { T t[size]; int n; Halmaz() : n(0) { bool iselement(const T& e) const { for (int i = 0; i < n; i++) { if (e == t[i]) return true; return false; Halmaz& operator+=(const T& e) { if (!iselement(e)) { if (n >= size) throw E("Halmaz::operator+="); t[n++] = e; return *this; void clear() { n = 0; ; Generikus adat tagfüggvényei: Konstruktor/destruktor, op=, op== 2 db char elemet tartalmazó vektor: Halmaz<double, 10> v3; Specializáció: template <> bool Halmaz<double, 10>::isElement(const double& e) const { for (int i = 0; i < n; i++) { if (fabs(e - t[i]) < 1e-10) return true; return false; A specializációnak csak a formális helyességét értékeltük, nem az algoritmust.

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 C++ nyelven egy olyan generikus függvényt (szamol), amely megszámolja, hogy a paraméterként kapott, két előre haladó iterátorral megadott sorozatban, hány olyan elem van, ami benne van a szintén paraméterként kapott halmazban! Ha a feladatot jól oldja meg, akkor az alábbi programrészletet lefuttatva a cnt változó értéke 3 lesz. Halmaz<int, 1170> h1; h1 += 1; h1 += 8; int t[] = { 1, 2, 3, 8, 1 ; int cnt = szamol(t, t+5, h1); template<class Iter, class H> int szamol(iter elso, Iter utolso, const H &halm) { int db = 0; while (elso!= utolso) { if (halm.iselement(*elso++)) db++; return db; 4. Feladat 4 pont Írjon C++ programot, amely a standard inputról fájl végéig beolvasott szövegben előforduló szavakat ábécé sorrendben kiírja a standard outputra! Minden szó mellé írja ki, hogy hányszor fordult elő a szövegben. A kis- és nagybetűket tekintse azonosnak. Feltételezheti, hogy a szövegben az angol ábécé betűin kívül csak whitespace (szóköz, tabulátor, újsorjel) karakterek fordulnak elő. A megoldáshoz használhat STL tárolókat és algoritmusokat. #include <iostream> #include <string> #include <algorithm> #include <cctype> #include <map> using namespace std; int main() { map<string, int> cnt; string word; while (cin >> word) { transform(word.begin(), word.end(), word.begin(), tolower); cnt[word]++; for (map<string, int>::iterator i1 = cnt.begin(); i1!= cnt.end(); i1++) cout << i1->first << ": " << i1->second << endl; return 0;

5. Feladat 5 pont Egy használtautó kereskedést (Kereskedes) szeretnénk számítógépes információs rendszerrel segíteni. A kereskedésben árult autóknak (Auto) számos közös alapadata van. Ezek a következők: rendszám (string), gyártási év (int), futott kilométerek (long) és az ár (double). A meghajtás szempontjából jelenleg 3 fajtát kínálnak: benzinest (Benzines), teljesen elektromos meghajtásút (Elektromos), és vegyes üzeműt (Hibrid). A benzines autónak fontos jellemzője az üzemanyagtartály mérete (int), míg az elektromos autónak az akkumulátorok kapacitása (double). A hibrid autónak üzemanyagtartálya és akkumulátora is van. Üzemanyagot a benzines és a hibrid is a benzinkútnál tankol (tankol), de a hibrid az elektromoshoz hasonlóan tölteni (tölt) is tud. A megtervezendő információs rendszerben egyetlen tárolóban szeretnénk nyilvántartani az autókat. A rendszernek a következő funkciókat kell ellátni: o Autó felvétele a nyilvántartásba (ujauto). o Autó törlése a nyilvántartásból rendszám alapján (eladas). o o A kereskedőnél kapható összes autó adatának listázása a standard outputra (listaz). Adott kilométertől kevesebbet futott, a kereskedőnél kapható összes autó adatának listázása a standard outputra (listaz). Feladatok: Tervezzen egy OO modellt a problémának megfelelően, amelyben van Kereskedes, valamint Benzines, Elektromos és Hibrid autó. Legyen a modell könnyen bővíthető újabb autófélével (pl. Diesel), valamint közös és egyedi attribútumokkal (pl. szín, extrák, megtehető távolság, katalizátor). Rajzolja fel a modell osztálydiagramját! Használja a dőlt betűkkel megadott neveket! Deklarálja az objektumokat C++ nyelven! Implementálja (valósítsa meg) az objektumok összes tagfügvényét, ami az összes autó adatának kilistázásához kell! A megoldáshoz használhat STL tárolókat, algoritmusokat is! Auto - rendszam: string - gyartasiev: int - futottkm: long - ar: double +getrendszam() +getev() +getkm() +getar() +setrendszam() +setev() +setkm() +setar() +listaz () Kereskedes - autok: list<auto*> + ujautot() + listaz(long) + listaz() Benzines # tankmeret: int +tankol() Elektromos # akkukapacitas +tolt() Hibrid

class Auto { string rendszam; int gyartasiev; long futottkm; double ar; string getrendszam() const; int getev() const; long getkm() const; double getar() const; void setrendszam(string); void setev(int); void setkm(long); void setar(double); virtual void listaz() const = 0; virtual ~Auto() { ; class Benzines :virtual public Auto { protected: int tankmeret; void tankol(); ; class Elektromos :virtual public Auto { protected: double akkukapacitas; void tolt(); ; class Hibrid :public Benzines, public Elektromos { ; class Kereskedes { list<auto*> autok; void ujauto(auto *a); Auto *eladas(string rendszam); void listaz(long); void listaz() { for (std::list<auto*>::iterator i = autok.begin(); i!= autok.end(); i++) (*i)->listaz(); ~Kereskedes(); ; void Auto::listaz() const { cout << rendszam <<" "<< gyartasiev << " " << futottkm << "km" << ar << endl; void Benzines::listaz() const { cout << "Benzines:" << endl; cout << tankmeret << endl; void Elektromos::listaz() const { cout << "Elektromos:" << endl; cout << akkukapacitas << endl; void Hibrid::listaz() const { cout << "Hibrid: " << endl; cout << tankmeret << endl; cout << akkukapacitas << endl;