Pénzügyi algoritmusok

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

Globális operátor overloading

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

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

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

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

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

Java programozási nyelv 9. rész Kivételkezelés

Informatika terméktervezőknek

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

Pénzügyi algoritmusok

1. Alapok. Programozás II

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

5. Gyakorlat. struct diak {

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

Pénzügyi algoritmusok

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

Alkalmazott modul: Programozás 8. előadás. Strukturált programozás: dinamikus memóriakezelés. Dinamikus memóriakezelés. Dinamikus memóriakezelés

Java II. I A Java programozási nyelv alapelemei

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

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Készítette: Nagy Tibor István

OOP #14 (referencia-elv)

Objektumorientált programozás C# nyelven

Java II. I A Java programozási nyelv alapelemei

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

Alkalmazott modul: Programozás 10. fejezet. Strukturált programozás: dinamikus memóriakezelés. Giachetta Roberto

C++ programozási nyelv Konstruktorok-destruktorok

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

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban

Bevezetés a programozásba. 9. Előadás: Rekordok

Óbudai Egyetem. C programozási nyelv

Maximum kiválasztás tömbben

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

Objektumorientált Programozás VI.

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

Osztályok. 4. gyakorlat

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

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

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

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

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

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

C programozási nyelv

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozás C és C++ -ban

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

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

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

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Programozás C++ -ban

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Objektumorientált programozás C# nyelven III.

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

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

117. AA Megoldó Alfréd AA 117.

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

Java és web programozás

3. Osztályok II. Programozás II

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

és az instanceof operátor

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

Jelszavak helyes megválasztása, szótáras törés. Pánczél Zoltán

Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE

Programozási Nyelvek: C++

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

500. AA Megoldó Alfréd AA 500.

Programozás II gyakorlat. 6. Polimorfizmus

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

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Programozási nyelvek JAVA EA+GY 1. gyakolat

1. Jelölje meg az összes igaz állítást a következők közül!

OOP és UML Áttekintés

8. gyakorlat Pointerek, dinamikus memóriakezelés

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

Programozási nyelvek Java

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

Web-technológia PHP-vel

Java és web programozás

Eljárások, függvények

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

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

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

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

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

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

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

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

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

1.AA MEGOLDÓ BERCI AA 1.

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozási nyelvek Java

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

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

Programozás C++ -ban

Átírás:

Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés

Tömbök 3. Többdimenziós tömbök

Többdimenziós tömbök int a;

Többdimenziós tömbök int a[5];

Többdimenziós tömbök int a[5][4];

Többdimenziós tömbök int a[5][4][3];

Többdimenziós tömbök int a[5][4][3]; 41. 42. 43. 44. 45. 21. 22. 23. 24. 25. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Folytonos memóriaterületen tárolva!

Inicializálás int a[5][4] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 } };

Címzés a[2][3]; int a[4][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };

Alternatívák A tömbök kényelmes és biztonságos C++ alternatíváját lásd később Tömbök tömbje helyett pointerek tömbje A pointerek tömbökre mutatnak Előny: Dinamikusan (heap-en) is létrehozható Elméletileg különböző méretű sorok is lehetnek (jagged array) Hátrány: Nem folytonos memóriaterületen tárolt Felszabadítás és inicializálás bonyolultabb Kilapított, egydimenziós tömb Méret: a[x][y] helyett a[x*y] Címzés: a[i][j] helyett a[i + j*x] Bővebben a különböző tömbökről és függvényekben történő használatukról: http://stackoverflow.com/questions/8767166/passing-a-2d-array-to-a-c-function

Pointerek tömbje inicializálás int a1[5] = { 1, 2, 3, 4, 5 }; int a2[5] = { 6, 7, 8, 9, 10 }; int a3[5] = { 11, 12, 13, 14, 15 }; int a4[5] = { 16, 17, 18, 19, 20 }; int *a[4] = { a1, a2, a3, a4 };

Pointerek tömbje vs. pointer tömbre int *a[4]; int (*a)[4];

Pointerek tömbje vs. pointer tömbre int *a[4]; int (*a)[4]; int **a[4]; int *(*a)[4];? int (*a[3])[4]; int *(*a[3])[4]; C++ deklarációk értelmezéséhez: http://cdecl.org/

Kitekintés: typedef Bármilyen típusnak adható alternatív név Jobban látszik a jelentés A tényleges típus egy helyen definiált typedef double currency; currency income = 200000.0; Összetett típusokat egyszerűsíti typedef int coordinate[3]; typedef coordinate * line[2]; coordinate c1 = { 1, 2, 3 }; coordinate c2 = { 2, 3, 4 }; line l = { &c1, &c2 }; int (*(*a)[2])[3] = &l;

Konstansok Változók, tagváltozók, paraméterek, függvények

Konstans módosító Konstans módosító (constant modifier): Szinte bármilyen deklarációhoz társítható Ökölszabály: arra vonatkozik, ami után a const kulcsszó következik (Tag)változóknál: inicializálás után nem módosítható Paramétereknél: függvényen belül nem módosítható Metódusoknál: a függvény nem módosítja a tagváltozókat Pointereknél összetett szabályok

Konstansok const int a = 5; int const b = 10; void Person::print(const bool full) const { this->name = ""; // HIBA! }

Konstansok const int a = 5; int const b = 10; void Person::print(const bool full) const { this->name = ""; // HIBA! } const int *a[4]; int const *a[4]; const int (*a)[4];? int * const a[4]; int const * const a[4]; int (* const a)[4]; int const * const * const a[4]; C++ deklarációk értelmezéséhez: http://cdecl.org/

Kivételkezelés Hibakezelés C++ módra

Hibajelzési stratégiák Speciális visszatérési érték Könnyen ellenőrizhető Nem mindig lehetséges Globális változó beállítása Könnyen implementálható Globális A hiba könnyen láthatatlan maradhat Tagváltozó beállítása Könnyen implementálható A hiba könnyen láthatatlan maradhat Adjunk vissza -1 értéket! Unsigned int visszatérési típussal?

Hibajelzési stratégiák Speciális visszatérési érték Könnyen ellenőrizhető Nem mindig lehetséges Adjunk vissza -1 értéket! Unsigned int visszatérési típussal? Globális változó beállítása Könnyen implementálható Globális A hiba könnyen láthatatlan maradhat Tagváltozó beállítása Közös problémák: Könnyen Nem implementálható kényszeríthető ki a hibakezelés A hiba Nehezen könnyen láthatatlan delegálható maradhat a hibakezelés

Kivételkezelés Kivétel (exception): A program futása során észlelt kivételes helyzet (hiba) Pl. érvénytelen bemenet, művelet, adathiba, stb. Kivétel keletkezése esetén hibakezelő kód futtatása try { A try blokkban keletkezett kivételeket kezeljük throw 20; } catch (int e) { cout << "Exception Nr. " << e << endl; }

Kivételkezelés Kivétel (exception): A program futása során észlelt kivételes helyzet (hiba) Pl. érvénytelen bemenet, művelet, adathiba, stb. Kivétel keletkezése esetén hibakezelő kód futtatása try { Hiba esetén a catch blokk fut le. Ha nem történik hiba, a catch blokk nem fut le. throw 20; } catch (int e) { cout << "Exception Nr. " << e << endl; }

Kivételkezelés Kivétel (exception): A program futása során észlelt kivételes helyzet (hiba) Pl. érvénytelen bemenet, művelet, adathiba, stb. Kivétel keletkezése esetén hibakezelő kód futtatása try { throw 20; } catch (int e) { } Hiba jelzése a throw utasítással lehetséges. A hibához egy érték is kapcsolható. cout << "Exception Nr. " << e << endl;

Kivételkezelés Kivétel (exception): A program futása során észlelt kivételes helyzet (hiba) Pl. érvénytelen bemenet, művelet, adathiba, stb. Kivétel keletkezése esetén hibakezelő kód futtatása try { A kapcsolt érték típusának megfelelő catch blokk fut le. Az érték a kezelőben használható. throw 20; } catch (int e) { cout << "Exception Nr. " << e << endl; }

A kivételek működése 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } int hs? 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int n 1 - PC 13 int ret? int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int n 1 - PC 13 int ret? int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int 1 int n 1 - PC 13 int ret? int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése int 1 int n 1 - PC 13 int ret? int n 2 - PC 5 int ret? int hs? 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

A kivételek működése 1. int main() 2. { 3. try 4. { 5. int hs = CalcRec(2); 6. } 7. catch(int ec){...} 8. } int ec 1 9. int CalcRec(int n) 10. { 11. if (n == 1) 12. throw 1; 13. return CalcRec(n - 1); 14. }

Különböző típusú hibák kezelése Egy try blokk után több catch blokk is lehet Választás: A throw utasításnak átadott érték típusa szerint Fentről lefelé try { // code here } catch (int param) { cout << "int exception"; } catch (char param) { cout << "char exception"; } catch (...) { cout << "default exception"; }

Különböző típusú hibák kezelése Egy try blokk után több catch blokk is lehet Választás: A throw utasításnak átadott érték típusa szerint Fentről lefelé try { // code here } catch (int param) { cout << "int exception"; } Bármilyen típust elfogad catch (char param) { cout << "char exception"; } catch (...) {(de cout nem << lehet "default hivatkozni exception"; az értékre) }

Kivételek továbbítása A kezeletlen kivételek tovább terjednek a stacken Ez kézzel is megtehető egy catch blokkban try { try { // code here } catch (int n) { throw; } } catch (...) { cout << "Exception occurred"; }

A standard kivételek A standard könyvtár definiál egy kivétel típust std::exception az <exception> könyvtárban Testreszabható, több fajtája is van (<stdexcept>) try { throw exception(); } catch (exception& e) { cout << e.what() << endl; } Referencia szerint fogadható A hiba leírása kiolvasható

Gyakori kivételfajták bad_alloc: a new parancs dobja, ha nincs elég memória logic_error: a program belső logikájához kapcsolódó hibák Indexelés (out_of_range) Hibás paraméter (invalud_argument) runtime_error: futásidőben észlelt hibák Túlcsordulás (overflow_error) http://www.cplusplus.com/doc/tutorial/exceptions/

Gyakori kivételfajták bad_alloc: a new parancs dobja, ha nincs elég memória logic_error: a program belső logikájához kapcsolódó hibák try { throw logic_error( Whoopsie!"); } catch (exception& e) { cout << e.what() << endl; }

Köszönöm a figyelmet!