.AA Megoldó Alfréd AA.

Hasonló dokumentumok
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. CC Megoldó Alfréd CC 500.

500. AA Megoldó Alfréd AA 500.

128. AA Megoldó Alfréd AA 128.

1000.AA Megoldo Alfréd 1000.A

117. AA Megoldó Alfréd AA 117.

503.AA Megoldo Arisztid 503.A

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

500. DD Megoldó Alfréd DD 500.

Mit ír ki? feladatok megoldásokkal

500.AA Megoldo Arisztid 500.A

500.AJ Megoldó Magyar Magdolna 500.J

111. AA Megoldó Alfréd AA 111.

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

500.AA Megoldó Kulcsár 500.A

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

AA MEGOLDÓ ALADÁR AA

feladat pont min elért

C++ Standard Template Library (STL)

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

1. Alapok. Programozás II

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

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

feladat pont min elért

3. Osztályok II. Programozás II

Fejlett programozási nyelvek C++ Iterátorok

5. Gyakorlat. struct diak {

Bevezetés a programozásba I.

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

C++ programozási nyelv Konstruktorok-destruktorok

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

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

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

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

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

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 2

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

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

Objektumok inicializálása

Programozási Nyelvek: C++

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

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

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

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

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

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

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

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

Maximum kiválasztás tömbben

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

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

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

PROGRAMOZÁSI NYELVEK - CPP. GYAKORLAT JEGYZET

Osztály és objektum fogalma

OOP: Java 8.Gy: Abstract osztályok, interfészek

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

Programozás módszertan

#include <iostream> using namespace std; // struct macska is lehetne class macska { public: int kor; int suly; }; void main() { macska cirmi;

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

C++ Gyakorlat jegyzet 8. óra

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

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

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

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

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

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

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

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

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

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

Alprogramok, paraméterátadás

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.

C++ Gyakorlat jegyzet 7. óra

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

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

Pénzügyi algoritmusok

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

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

Programozás II gyakorlat. 6. Polimorfizmus

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

Globális operátor overloading

Programozás alapjai II. (2. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

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

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

Elemi alkalmazások fejlesztése II. 2. Beadandó feladat Juhász Ádám

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

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

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

INFORMATIKA javítókulcs 2016

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

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

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

Programfejlesztés. Programozás alapjai II. (3. ea) C++ Néhány programozási módszer. Korai szoftverkészítés jellemzői. Gépi nyelv? Strukturált tervezés

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írás:

Programozás alapjai 2. (inf.) pót zárthelyi 2013.05.23. gyak. hiányzás: kzh: ZH:0 ABCDEF MEG/200. Hftest: (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! Ponthatárok: 8, 11, 14, 17 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 = -3, const char *m = "cde"):a(a) { cout << m << "K"; Uj(const Uj& u) { cout << "C" ; ~Uj() { cout << "D"; ; int main() { Adat *p = new Adat(200); nl(); 2 0 0 k *p = *p + 3; nl(); 2 0 3 k + d *p = 2 + *p; nl(); 2 0 5 k + d Uj u3(4, "ABCDEF"); nl(); 4 k A B C D E F K Uj uj16 = u3; nl(); - 1 k C delete p; nl(); d return 0; D d D d F. Max. Elért 1 3 2 4 3 4 4 4 5 5 Σ 20 A fenti megoldásban nem tüntettük fel a kioptimalizálható másolókonstruktor hívásokat, de ha valaki azt is feltüntette természetesen elfogadtuk.

2. Feladat Σ 4 pont 2.a) Készítsen sablont adatpár tárolására (Par)! A pár mindkét adata azonos típusú. Az adattagok legyenek közvetlenül elérhetők. Az osztálynak az automatikusan keletkező tagfüggvényein kívül ne legyen más tagfüggvénye. Oldja meg, hogy az osztályból példányosított objektumok kiírhatók legyenek egy std::ostream típusú objektumra a szokásos << operátorral. (1p) struct Par { T tag1, tag2; ; ostream& operator<<(ostream &os, Par<T> p) { return os << p.tag1 << p.tag2; 2.b) Készítsen egy olyan függvénysablont (kombi), ami előállítja egy sorozat másodosztályú kombinációit, azaz az elemeiből álló összes lehetséges párt (Par)! A függvény első két paramétere egy-egy iterátor, amely a sorozat elejét és végét (jobbról nyílt intervallum kezdete és vége) jelöli. A sorozat elemeiről feltételezheti, hogy mind különbözőek. A harmadik paraméter egy olyan std::vector, amelybe az eredményt kell betennie: n(n-1)/2 darab párt (Par), ahol n a bemeneti sorozat hosszát jelenti. A megoldáshoz használhatja az STL elemkészletét! Amennyiben helyesen oldotta meg mindkét részfeladatot, az alábbi kódrészlet a következőt írja a standard outputra: AB,AC,AD,BC,BD,CD, using namespce std; char betuk[] = "ABCD"; vector<par<char> > parok; kombi(betuk, betuk+4, parok); copy(parok.begin(), parok.end(), ostream_iterator<par<char> >(cout, ",")); template <class I, class T> void kombi(i first, I last, vector<par<t> >& vec) { while (first!= last) { Par<T> p; p.tag1 = *first++; for (I i = first; i!= last; i++) { p.tag2 = *i; vec.push_back(p); 3. Feladat Σ 4 pont Egy generikus halmaz (Set) tárolót kell készíteni, ami tetszőleges számú adatot képes tárolni. A tároló rendelkezzen a következő műveletekkel: iselement() annak eldöntése, hogy egy adott elem benne van-e a halmazban; insert() elem hozzáadása a halmazhoz ; size() visszaadja, hogy hány elem van a halmazban; empty() igaz, ha a halmaz üres; clear() törli az összes elemet 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 (s1=s2=s3); Deklarálja a Set osztályt! Valósítsa meg az osztály konstruktorát, másoló konstruktort, valamint a clear() tagfüggvényt Hozza létre a {10.0, 10.3, 10.8 halmazt! Specializálja ennek a halmaznak (double) az iselement tagfüggvényét úgy, hogy két elemet akkor tekintsen azonosnak, ha különbségük abszolútértéke kisebb, mint 1e-8!

class Set { T *t; size_t siz; Set() :t(null), siz(0) { Set(const Set& rhs); Set& operator=(const Set& rhs); bool iselement(const T& val) const; void insert(const T& val); size_t size() const; bool empty() const; void clear(); ~Set(); ; Set<T>::Set(const Set& rhs) :t(null) { siz = rhs.siz; t = new T[siz]; t[i] = rhs.t[i]; void Set<T>::clear() { siz = 0; t = NULL; Létrehozás: Set<double> s; s.insert(10.0); s.insert(10.3); s.insert(10.8); Specializáció: template <> bool Set<double>::isElement(const double& val) const { for (size_t i = 0; i!= siz; i++) if (abs(t[i]-val) < 1e-10) return true; return false; Más csoportok feladatai: Set<T>& Set<T>::operator=(const Set& rhs) { if (this!= &rhs) { siz = rhs.siz; t = new T[siz]; t[i] = rhs.t[i]; return *this;

void Set<T>::insert(const T& val) { if (iselement(val)) return; T* tuj = new T[siz+1]; tuj[i] = t[i]; tuj[siz++] = val; t = tuj; size_t Set<T>::size() const { return siz; 4. Feladat Σ 4 pont Klónozhatónak nevezünk egy objektumot, ha létezik a clone() tagfüggvénye, ami dinamikusan létrehoz egy eredetivel megegyező típusú és tartalmú objektumot, és visszaadja annak címét. Az std::vector osztály felhasználásával készítsen egy olyan generikus osztályt (ClonableCollection), amelyet klónozható heterogén kollekcióként használhatunk! Az így klónozott objektum egy különálló heterogén kollekció. A tárolt típusról tételezze fel, hogy az klónozható alaposztályra mutató pointer! Hozzon létre egy klónozható osztályt, és segítségével mutassa be a ClonableCollection osztály klónozását! using namespce std; template<class T> class ClonableCollection: public vector<t> { ClonableCollection* clone() { ClonableCollection* myclone = new ClonableCollection; for (size_t i=0; i< vector<t>::size();i++) myclone->push_back((*this)[i]->clone()); return myclone; ~ClonableCollection() { for (size_t i=0; i< vector<t>::size();i++) delete (*this)[i]; ; struct A { virtual A* clone() {return new A; Virtual ~A() { ; ClonableCollection<A*> cc, *ccp; ccp=cc.clone(); 5. Feladat Σ 5 pont Hackerképző iskolát modellezünk, ahol a diákok (Student) különféle képességeket (Skill) tanulhatnak (Student::learn). A képesség például jelszótörés (PwdCracking), ami adott időt vesz igénybe (int), féregtelepítés (WormInstall), stb. Ha egy diák meghal, a tanult képességei elvesznek. Bármely képességet lehet alkalmazni (Skill::apply) egy számítógépen (Computer). A számítógépnek van védelme (int). Ha egy számítógépen egy képességet alkalmaznak, csökken a védelme. Pl. a jelszótörés eggyel csökkenti a védelmet, a féregtelepítés mindig egy véletlen számmal. Ha a védelem 1 alá csökken, a gép feltörtnek minősül, ami lekérdezhető (Computer::isBroken). A diák megkísérelheti egy iterátorpárral megadott számítógép-sorozat feltörését (Student::crack).

Feladatok: STL eszközök felhasználásával tervezzen olyan OO modellt, ami könnyen bővíthető további képességekkel, hiszen az iskolában folyamatosan újabb képességeket tanítanak! Rajzolja fel a modell osztálydiagramját! Ne tüntesse fel a tagfüggvényeket az UML ábrán! Használja a megadott dőlt betűs neveket! Deklarálja és implementálja a Computer, Student, Skill és PwdCracking osztályokat! Írjon egy olyan kódrészletet, amiben dinamikusan létrehoz 80 számítógépből álló tömböt, két diákot valamilyen képességgel, és megkíséreli mindkét diák a számítógépek feltörését, majd kiírja, hogy hány számítógép feltörése sikerült. class Computer { int vedelem; Computer(int v0):vedelem(v0) { void addvedelem(int delta) { vedelem += delta; bool isbroken() const { return vedelem < 1; ; class Skill { virtual void apply(computer& c)=0; virtual ~Skill() { ; class PwdCracking : public Skill { void apply(computer& c) { c.addvedelem(-1); ; class Student { vector<skill*> skills; void addskill(skill*s) { skills.push_back(s); template<class I> void crack(i start, I end) { while (start!= end) { for (size_t i = 0; i < skills.size(); i++) skills[i]->apply(*start); start++; ~Student() { for (size_t i = 0; i < skills.size(); i++) delete skills[i]; ; vector<computer> sz(80,computer(2)); Student jozsi, gezu; jozsi.addskill(new PwdCracking); gezu.addskill(new PwdCracking); gezu.crack(sz.begin(), sz.end()); jozsi.crack(sz.begin(), sz.begin()+5); int cnt = 0; for (size_t i = 0; i < 80; i++) if (sz[i].isbroken()) cnt++; cout << cnt << " db gepet tortunk fel" << endl;