Programozási Nyelvek: C++

Hasonló dokumentumok
1. Alapok. Programozás II

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

8. gyakorlat Pointerek, dinamikus memóriakezelés

3. Osztályok II. Programozás II

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

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

C++ programozási nyelv Konstruktorok-destruktorok

1.AA MEGOLDÓ BERCI AA 1.

5. Gyakorlat. struct diak {

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

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

OOP #14 (referencia-elv)

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Memóriakezelés, dinamikus memóriakezelés

C++ Standard Template Library (STL)

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

Pénzügyi algoritmusok

500. AA Megoldó Alfréd AA 500.

Programozás II gyakorlat. 6. Polimorfizmus

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Alprogramok, paraméterátadás

Programozás I gyakorlat. 10. Stringek, mutatók

és az instanceof operátor

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozási nyelvek Java

Programozás I gyakorlat

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

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

7. fejezet: Mutatók és tömbök

500. CC Megoldó Alfréd CC 500.

Bevezetés a C++ programozási nyelvbe

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Programozás C és C++ -ban

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

1000.AA Megoldo Alfréd 1000.A

Pénzügyi algoritmusok

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

.AA Megoldó Alfréd AA.

A C programozási nyelv I. Bevezetés

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

A C programozási nyelv I. Bevezetés

503.AA Megoldo Arisztid 503.A

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

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

128. AA Megoldó Alfréd AA 128.

Mintavételes szabályozás mikrovezérlő segítségével

Globális operátor overloading

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

Programozas 1. Strukturak, mutatok

Bevezetés a C++ programozási nyelvbe

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

C++ Gyakorlat jegyzet 7. óra

A C programozási nyelv III. Pointerek és tömbök.

C++ Gyakorlat jegyzet 2. óra A jegyzetet Umann Kristóf készítette Horváth Gábor gyakorlata alapján. (2018. április 30.) 1. Láthatóság, élettartam

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

Bevezetés a programozásba. 8. Előadás: Függvények 2.

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

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Mutatók és mutató-aritmetika C-ben március 19.

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

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

Programozási Nyelvek (C++) Összefoglaló

A C programozási nyelv III. Pointerek és tömbök.

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

JAVA PROGRAMOZÁS 2.ELŐADÁS

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.

Osztályok. 4. gyakorlat

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás I gyakorlat

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

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

500.AA Megoldo Arisztid 500.A

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus változók. Dinamikus változók. Dinamikus változók. Dinamikus változók. 7.

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

Maximum kiválasztás tömbben

Programozás alapjai 9.Gy: Struktúra 2.

C++ programozási nyelv Konstruktorok Gyakorlat

Programozás I gyakorlat

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

Kivételek, kivételkezelés a C++ nyelvben

Programozási nyelvek Java

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Objektum Orientált Programozás IV.

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

500.AJ Megoldó Magyar Magdolna 500.J

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

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

Bevezetés a programozásba I.

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

Osztály és objektum fogalma

Átírás:

Programozási Nyelvek: C++ Gyakorló feladatkönyv Umann Kristóf #include "CppStudent.h" int main() { CppStudent *reader = new CppStudent(); reader->readbook(); while(!reader->doesunderstand()) { reader->exercise(); reader->readbook(); delete reader; 2018. május 5.

Tartalomjegyzék 1. Előszó 2 2. Preprocesszor 2 3. Mutatók 2 4. Láthatóság, élettartam, sztringkezelés, függvénytúlterhelés 4 5. Memóriakezelés 5 1

1. Előszó Ez a jegyzet az ELTE Informatikai Kar hallgatóinak készült a Programozási Nyelvek C++ című tárgyhoz. Ez a dokumentum a gyakorlatokon történő számonkéréshez és vizsgához szolgál gyakorló feladatokkal. Ez a dokumentum segédanyagként szolgál egy meglevő jegyzethez, mely szintén e projektnek a része! A jegyzet első számú forrása Horváth Gábor 2015/2016/2 és 2016/2017/1 félévében tartott gyakorlatai, Pataki Norbert 2015/2016/1 előadásai, valamint a gyakorlaton megjelent helyettesítő tanárok órái: Porkoláb Zoltán, Brunner Tibor. Külön köszönet jár Horváth Gábornak, aki a jegyzet javításában segített és aktívan segít, és mindenki másnak, aki az esetleges hibák észrevétele után szóltak. A jegyzet teljes mértékben nyílt forráskódú, amennyiben esetleges hibába, pontatlanságba botlana, vagy szeretne segíteni az jegyzet fejlesztésében, az alábbi linken megteheti: https://github.com/szelethus/elte IK CPP. (Felhívnánk rá a figyelmet, hogy a szerkesztés jelen pillanatában a jegyzet nem teljes terjedelmében lektorált.) 2. Preprocesszor 2.0.1. Feladat. Legyen adott ez a C++ fájl: 01_01pp_main.cpp #include "01_01pp.h" std::cout << add(5, 6) << std::endl; Kimenet: 11 Implementáljuk a 01_01pp.h header fájlt mely tartalmazza az add függvény deklarációját, mely két egész számot vár paraméterül, és az összegüket adja vissza visszatérési értékeként! A függvényt definiáljuk a 01_01pp.cpp fájlban, majd fordítsuk le a programot és ellenőrizzük hogy helyesen működik-e! 2.0.2. Feladat. Legyen adott ez a C++ fájl: 01_02pp_main.cpp // * std::cout << 5 * ADD(1, 2) << std::endl; Kimenet: 15 Implementáljunk a *-al jelölt sorba egy preprocesszor függvényt, mely az összeadást valósítja meg! Figyeljünk a műveletek asszociativitására is! 3. Mutatók 3.0.1. Feladat. Legyen adott ez a C++ fájl: 02_01ptr_main.cpp int t[] = {1, 2, 3, 4; int *ptr; for (/*... */) { 2

std::cout << /* t egyik eleme */ << std::endl; Iteráljunk végig t tömb elemein újabb változó létrehozása nélkül! Hogyan változna a megoldás, ha t méretét megváltoztatjuk? 3.0.2. Feladat. Legyen adott ez a C++ fájl: 02_02ptr_main.cpp void changepointer(/*... */) { int c = 5, d = 6; int *ptr = &c; changepointer(&ptr, &d); std::cout << ptr << \n << &d << std::endl; Implementáljuk a changepointer függvényt, mely egy intre mutatót egy, a paraméterként átadott int objektum címére állít! Megoldásunk helyességét azzal ellenőrizhetjük, hogy ptr és &d értékét kiíratjuk amennyiben ezek azonosak, az azt jelenti hogy ptr d-re mutat. 3.0.3. Feladat. Miben változna az előző feladat megoldása, ha c és d konstansok lennének? Implementáljuk a 02_03ptr_main.cpp fájlba! 3.0.4. Feladat. Legyen adott ez a C++ fájl: 02_04ptr_main.cpp int findif(/*... */) { bool iseven(int i) { return i % 2 == 0; bool isequaltoseven(int i) { return i == 7; bool isnegative(int i) { return i < 0; int t[] = {1, 3, 4, 6, 7, 8, 10; std::cout << findif(/*... */, iseven) << << findif(/*... */, isequaltoseven) << << findif(/*... */, isnegative) << std::endl; Kimenet: 2 4-1 Valósítsuk meg a findif függvényt, mely egy tetszőleges int-eket tartalmazó tömböt és egy predikátum függvényt (olyan függvény, melynek bool a visszatérési értéke és egy paramétere van, ez esetben int típusú) kap paraméterül, és amennyiben a tömb tartalmaz olyan elemet amelyre a predikátumfüggvény igazat ad, adja vissza a tömbbéli indexét, különben térjen vissza -1-el! Azt, hogy az Olvasó hogyan szeretné a findif függvény implementálni (beleértve azt is, hogy milyen paramétereket várjon) nincs megkötve, azzal a kivétellel, hogy a predikátumfüggvény függvény legyen az utolsó paraméter. 3

3.0.5. Feladat. Hogyan tudnánk a fenti feladatokat referenciákkal megoldani? 4. Láthatóság, élettartam, sztringkezelés, függvénytúlterhelés 4.0.1. Feladat. Legyen adott ez a C++ fájl: 03_01str_main.cpp void insertspace(const char *orig, char *dest) { const char *str = "Sziamizujs?"; char buf[256]; insertspace(str, buf); std::cout << buf << std::endl; Kimenet: Szia mizujs? Valósítsuk meg az insertspace függvényt, mely minden a karakter után beszúr egy space-t a paraméterként kapott strigbe! Feltételezhetjük, hogy dest legalább akkora tömbre mutat, mint orig. Hogyan változna a megoldás, ha char* és char[] helyett std::string objektumokkal dolgoznánk? 4.0.2. Feladat. Egészítsünk ki egy korábbi feladatot! 03_01static_main.cpp int findif(/*... */) { bool issecondeven(int i) { int t[] = {1, 3, 4, 6, 7, 8, 10; std::cout << findif(/*... */, issecondeven) << std::endl; Kimenet: 3 A korábban megvalósított findif függvényhez írjunk egy újabb predikátumfüggvényt, mely egy statikus változó segítségével akkor ad igazat, ha a paraméterként kapott int a második páros szám! Soroljunk fel legalább két indokot, miért célszerűtlen ez a megoldás valós alkalmazásra! 4.0.3. Feladat. Legyen adott ez a C++ fájl: 03_01overload_main.cpp struct IntWrapper { 4

int i; ; // * int i = 10; IntWrapper wrap; wrap.i = 5; std::cout << add(i, wrap) << << add(wrap, i) << << add(wrap, wrap) << << add(i, i) << std::endl; Kimenet: 15 15 10 20 Valósítsuk meg az add függvényt, mely két tetszőleges szám összegét adja vissza! Függvénytúlterhelés segítségével érjük el azt, hogy ez a két paraméter mind int mind IntWrapper típusú is lehessen! 4.0.4. Feladat. Legyen adott ez a C++ fájl: 03_02overload_main.cpp struct IntWrapper { int i; ; // * IntWrapper wrap1, wrap2; wrap1.i = 10; wrap2.i = 5; std::cout << wrap1 * wrap2 << << wrap1 / wrap2 << << wrap1 + wrap2 << << wrap1 - wrap2 << std::endl; Kimenet: 50 2 15 5 Operátor túlterheléssel valósítsuk meg a szorzás, osztás, összeadás és a kivonás műveletét! Minden operátor két IntWrapper típusú paramétert várjon, és a visszatérési értéke is egy IntWrapper típusú változó legyen! Gondoljuk meg, érték vagy referencia szerinti átvétel lenne-e hatékonyabb! A kiíratáshoz terheljük túl a right shift operátort (<<) a jegyzetben található módon! 5. Memóriakezelés 5.0.1. Feladat. Legyen adott ez a C++ fájl: 05_01heap_main.cpp void allocall(int **t, int size) { void fillall(int **t, int size) { 5

void printall(int **t, int size) { void freeall(int **t, int size) { int* t[20]; allocall(t, sizeof(t) / sizeof(t[0])); fillall(t, sizeof(t)/sizeof(t[0])); printall(t, sizeof(t)/sizeof(t[0])); freeall(t, sizeof(t)/sizeof(t[0])); Kimenet: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Implementáljuk az allocall függvényt mely végigiterál egy tetszőleges int pointereket tároló tömbön, és minden eleméhez allokál a heapről memóriát! Ezután a fillall függvénnyel a tömb összes elemét változtassuk meg a mutatott értékét a tömbbéli indexére, a printall függvény a tömb összes eleme által mutatott értéket írassa ki, majd a freeall függvénnyel szabadítsuk fel a memóriát! 5.0.2. Feladat. Módosítsuk az előző feladatot úgy, a t tömb maga is heapen legyen allokálva! 6