1. BB Megoldó Béla BB 1.



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

417. AA Megoldó Alfréd AA 417.

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

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

Programozás C++ -ban 2007/4

485. AA Megoldó Alfréd AA 485.

200. Megoldó Alfréd 200.

500. CC Megoldó Alfréd CC 500.

500. AA Megoldó Alfréd AA 500.

.AA Megoldó Alfréd AA.

Mit ír ki? feladatok megoldásokkal

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

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

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

500. DD Megoldó Alfréd DD 500.

191. BB Megoldó Alfréd BB 191.

128. AA Megoldó Alfréd AA 128.

Bevezetés a programozásba 2

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

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

Osztály és objektum fogalma

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

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

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.

503.AA Megoldo Arisztid 503.A

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

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

228. AA Default Konstruktor AA 228.

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

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

111. AA Megoldó Alfréd AA 111.

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

Származtatási mechanizmus a C++ nyelvben

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

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

Globális operátor overloading

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

1.AA MEGOLDÓ BERCI AA 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

AA MEGOLDÓ ALADÁR AA

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

3. Osztályok II. Programozás II

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

INFORMATIKAI ALAPISMERETEK

1000.AA Megoldo Alfréd 1000.A

1. Alapok. Programozás II

500.AA Megoldo Arisztid 500.A

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

Bánsághi Anna

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

500.AJ Megoldó Magyar Magdolna 500.J

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

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

Programozás C++ -ban

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

Objektumorientált programozás C# nyelven III.

Programozás alapjai 1. (BMEVIEEA100)

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

Maximum kiválasztás tömbben

Programozás II gyakorlat. 6. Polimorfizmus

ELEKTRONIKAI ALAPISMERETEK

Objektumok inicializálása

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

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

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

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

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

ELEKTRONIKAI ALAPISMERETEK

CAD-CAM

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

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

Lineáris algebra gyakorlat

500.AA Megoldó Kulcsár 500.A

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

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

Kivételkezelés a C++ nyelvben Bevezetés

C++ Gyakorlat jegyzet 7. óra

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

Pénzügyi algoritmusok

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

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

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

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

Programozás C++ -ban

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

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

Bevezetés a C++ programozási nyelvbe

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

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

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

Alkalmazott modul: Programozás 9. előadás. Strukturált programozás: dinamikus adatszerkezetek

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

3. Gyakorlat Ismerkedés a Java nyelvvel

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

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

Programozás alapjai 2. (2. ea) C++

Átírás:

Programozás alapjai 2. (inf.) zárthelyi 2007.05.17. gyakrolat: G2/V2.706 Érdemjegy: FQ2J73Q Ch.Max./1. Hftest: 4 Minden beadandó lap tetejére írja fel balra a feladat számát, jobbra a nevét és tankörét! 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ó, valamint egy A4-es lapra saját kézzel írt puska használható. Számítógép, notebook, menedzser kalkulátor, organiser, rádiótelefon nem használható. A feladatokat figyelmesen olvassa el! Ne írjon felesleges függvényeket ill. kódot, a feladatra koncentráljon! Jó munkát! F. Max. Elért 1 5 2 2 3 3 4 3 5 7 Σ 20 1. Feladat 5 pont Írjon generikus 2 dimenziós mátrixot! A konstruktor paraméterként kapja mátrix méretét (sor, oszlop). Valósítsa meg következő műveleteket: put elemet tesz a mátrix megadott indexű (i,j) helyére. Nem létező index esetén dobjon kivételt! get elemet vesz ki a mátrix megadott indexű helyéről. Nem létező index esetén dobjon kivételt! size visszaadja a mátrixban tárolt elemek számát. Az osztály: legyen átadható érték szerint függvényparaméterként! kezelje helyesen a többszörös értékadást (m1=m2=m3)! Írjon egy egyszerű, maximum 10 utasításból álló programrészletet, amely bemutatja az osztály szolgáltatásainak használatát int típusra. Mutassa be a kivételkezelést is! 2. Feladat 2 pont Döntse el, hogy hibásak-e az alábbi programrészletek! Ha igen, adja meg a hiba helyét és magyarázatát! A programrészletekben elírások nincsenek, az összes meghívott függvény ill. hivatkozott osztály létezik, ha nincs megadva a kódrészletben, akkor feltételezze a helyes működést. A memóriaszivárgás is hibának minősül! Válaszait a kódrészletek mellett ill. alatt adja meg! a) class B { double re2; friend void operator<<(ostream& os, B& e) { os << e.re2; ; B b12; cout << b12 << endl; Hiba oka, ha van: << így nem fűzhető, mert nem istream a visszatérési értéke. b) class B { char *p; B(const B& b) { f(b); void f(const B b) { ; Hiba oka, ha van: A másoló konstruktor önmagát hívja, mivel f() hívásakor is meghívódik a másoló -> végtelen ciklus

3. Feladat 3 pont Mit ír ki a szabványos kimenetre a program? Válaszához használja a négyzetrácsos területet! #include <iostream> using namespace std; class A { A(const int i = -1) { cout << 'k' << i; A(const A& a) { cout << 'c'; virtual void operator++(int) { cout << 'p'; ~A() { cout << 'd'; ; class B :public A { B(const char *n = "2j72") { cout << 'K' << n; B(int i) :A(i) { cout << 'K'; B(const B& b) :A(b) { cout << 'C'; void operator++(int) { cout << 'P'; ~B() { cout << 'D'; ; int main() { B b1("2j7"); cout << '\n'; k - 1 K 2 j 7 B b2 = b1; cout << '\n'; c C A* p1 = new B(2); cout << '\n'; k 2 K (*p1)++; cout << '\n'; P delete p1; cout << '\n'; d return(0); D d D d 4. Feladat 3 pont Tervezzen 3 dimenziós vektort reprezentáló osztályt, amely megvalósítja: a kivonást a 3d vektorok között, a skalárral történő szorzást (balról és jobbról), az << operátort, mellyel képes egy ostream típusú objektumra (pl: cout) kiírni önmagát! Csak az osztály és az esetleges globális függvények deklarációja szükséges. A függvények definíciója nem része a feladatnak 4. feladat egy lehetséges megoldása: class Vec { double vec[3]; Vec operator-(const Vec); Vec operator*(double); friend Vec operator*(double, const Vec&); friend ostream operator<<(ostream&, const Vec&); ;

5. Feladat 7 pont Egy meteorológiai állomáson különféle adatokat mérnek (szél, hőmérséklet, csapadék, stb.). A mért adatokat egy OO programmal szeretnénk nyilvántartani, mégpedig úgy, hogy azokat az észlelés sorrendjében egy tárolóba tesszük (add). Az adatok eltérő formátumúak. A szélnek pl. iránya és nagysága is van, míg a hőmérséklet csak egy mennyiség, de a sorrend megtartása miatt közös tárolóban kell azokat tárolnunk. A tároló maximum 1000 adatot tud tárolni, és képes kilistázni (list) a benne levő adatokat a hozzájuk tartozó értékekkel együtt. (pl. szél: É-Ny, 10km/h; hőmérséklet: 12 C). Tervezzen OO modellt, mely tartalmaz Wind, Temperature, valamint Store objektumot, és könnyen bővíthető esetleges újabb adatokkal (pl. csapadék). Rajzolja fel a modell osztálydiagramját! Használja a megadott dőltbetűs neveket! Implementálja az osztályokat! Ne legyen egy függvénytörzsben sem feleslegest kód! Olyan módon készítse el az osztályokat, hogy bővítéskor ne kelljen a kódot módosítani! A tárolónak legyen olyan művelete is, mellyel az összes adat kitörölhető (clear)! Írjon egy egyszerű programrészletet, ami megmutatja 2 különböző típusú meteorológiai adat bevitelét egy tárolóba, majd kiírja a tárolóban tárolt adatokat és a hozzájuk tartozó értékeket! 1. feladat egy lehetséges megoldása: #ifndef FELADAT1_B #define FELADAT1_B // feladat1_b.hpp - generikus 2d matrix sablonja template <class T> class Mat { T *tp; // Elemek tömbjére mutató pointer int row; // sorok száma int col; // elemek száma Mat(int row, int col) :row(row), col(col) { tp = new T[row*col]; Mat(const Mat&); // copy konstruktor void put(int i, int j, const T&);// elem be T get(int i, int j); // elem ki int size() { return row * col; // elemek száma Mat& operator=(const Mat&); // egyenlőség op. ~Mat() { delete[] tp; // din. terület felszabadítása ; Mat<T>::Mat(const Mat& e) { tp = 0; *this = e; // copy konstruktor // operator= híváshoz előkészítjük // most már mehet void Mat<T>::put(int i, int j, const T& e) { if (i >= row j >= col i < 0 j < 0) throw range_error("hibas index"); tp[i*row+j] = e; T Mat<T>::get(int i, int j) { if (i >= row j >= col i < 0 j < 0) throw range_error("hibas index"); return tp[i*row+j];

Mat<T>& Mat<T>::operator=(const Mat& e) { // értékadás operátor if(this!= &e) { // nem önmagának ad értéket, akkor átmásol delete[] tp; row = e.row; col = e.col; tp = new T [row*col]; for (int i = 0; i < row*col; i++) tp[i] = e.tp[i]; return *this; #endif // programrészlet: #include "feladat1_b.hpp" void main() { try { Mat<int>m1(5, 8); m1.put(0, 1, 10); m1.put(4, 1, 20); m1.put(3, 0, 30); Mat<int>m2 = m1; Mat<int>m3(1, 2); m3 = m2; cout << m3.get(4,1); cout << m2.size(); cout << m3.get(5,1); catch (exception& e) { cerr << e.what(); 5. feladat egy lehetséges megoldása: Data 0..1000 + Data() + List() Store - Data * t[1000] - int n + list() + add() + clear() Wind dir, sp + list() Temperature temp + list() +list(). +list()

#include <iostream> using namespace std; class Data { virtual void list() = 0; ; class Wind :public Data { char dir[20]; // nem lesz 20-nál hosszabb irány megadva! double sp; Wind(char *d, double sp) :sp(sp) { strcpy(dir, d); // ha hosszabb lenne mint húsz, akkor baj lenne ; void Wind::list() { cout << "szél: " << dir << sp << " km/h" << endl; class Temperature :public Data { double temp; Temperature(double temp) :temp(temp) { ; void Temperature::list() { cout << "hőmérséklet: " << temp << " C" << endl; class Store { Data *t[1000]; int n; Store() :n(0) {; void clear(); void add(data*); ~Store() { clear(); ; // adatok törlése // hozzáadás // adatok listázása void Store::clear() { for (int i = 0; i < n; i++) delete t[i]; // töröljük az obj.-t is, mert dinamikusan hoztuk létre n = 0; void Store::add(Data *d) { t[n++] = d; // letároljuk a pointert void Store::list() { for (int i = 0; i < n; i++) t[i]->list(); // meghívjuk az objektumok listázó függvényét main() { Store met; met.add(new Wind("E-NY", 12)); met.add(new Temperature(5.3)); met.list(); return 0;