Nyolc királynő probléma. Programozás alapjai II. (13. ea) C++ visszalépéses (backtrack) algoritmusok táblás játékok, összefoglalás.
|
|
- Hunor Somogyi
- 7 évvel ezelőtt
- Látták:
Átírás
1 Programozá alapjai II. (13. ea) C++ vizalépée (backtrack) algoritmuok táblá játékok, özefoglalá Szeberényi Imre BME IIT Nyolc királynő probléma Helyezzünk el nyolc királynőt úgy egy akktáblán, hogy azok ne üék egymát! Egy megoldát kereünk nem kereük az öze lehetége elhelyezét. M Ű E G Y E T E M C++ programozái nyelv BME-IIT Sz.I Probálgatá Egy ozlopban cak egy királynő lehet, ezért ozloponként próbálgatunk. Vizalépé (back track) A 24. lépében vizalépünk, é levezük a korábban már elhelyezett királynőt Vizalépé é újból próba A 36. lépében imét viza kell lépni. A 60. lépé imét kudarcba fullad. Vizalépé é újból próba Egy lehetége megoldát a 876. lépében kapunk
2 Hogyan modellezhető Oko tábla, buta királynő A akktábla imeri a zabályokat é nyilvántartja a királynők helyzetét. A királynő lényegében nem cinál emmit. Oko királynő, buta tábla A királynő imeri a zabályokat é nyilvántartja a aját pozícióját. A akktábla nem tud emmit. Okokodó tábla, oko királynő Oko tábla metóduai: Szabad adott pozícióra lehet-e lépni Lefoglal adott pozíciót lefoglalja Felzabadít adott pozíciót felzabadítja Rajzol kirajzolja a pillanatnyi állát Probal elhelyezi a királynőket Metódu pec. - Szabad bool Szabad(int or, int ozlop); megvizgálja, hogy az adott helyre lehet-e királynőt tenni. bemenet: or or (1..8) ozlop ozlop (1..8) kimenet: true a pozíció zabad fale ütében van a királynő Metódu pec. - Lefoglal void Lefoglal(int or, int ozlop); Lefoglalja az adott pozíciót. bemenet: or or (1..8) ozlop ozlop (1..8) Metódu pec. - Felzabadit void Felzabadit(int or, int ozlop); Felzabadítja az adott pozíciót. bemenet: or or (1..8) ozlop ozlop (1..8) Metódu pec. - Rajzol void Rajzol(int or, int ozlop); Kirajzolja a táblát. Az aktuáli or, ozlop pozícióba jelet tez bemenet: or or (1..8) ozlop ozlop (1..8)
3 Metódu pec. - Probal bool Probal(int ozlop); A paraméterként kapott ozlopba é az azt követő ozlopokba megpróbálja elhelyezni a királynőket bemenet: ozlop orzáma (1..8) kimenet: true - ha ikrült a 8. ozlopba i. fale - ha nem ikerült Implementáció - Probal bool Probal(int ozlop) { int iker = 0, or = 1; do { if (Szabad(or, ozlop)) { Lefoglal(or, ozlop) if (ozlop < 8) iker = Probal(ozlop+1); ele iker = 1; if (!iker) Felzabadit(or, ozlop); or++; while (!iker && or <= 8); return(iker); következő ozlopba nem ikerült, vizalép Adatzerkezet (mit kell tárolni) Átlók tároláa Adott orban van-e királynő 8 or: vektor 1..8 indexzel Adott átlóban van-e királynő főátlóval párhuzamo átlók jellemzője, hogy a or-ozlop = álladó (-7..7-ig 15 db átló) mellékátlóval párhuzamo átlók jellemzője, hogy a or+ozlop = álladó (2..16-ig 15 db átló) or - ozlop = állandó or + ozlop = állandó Tabla oztály megvalóítáa cla Tabla { bool or[8]; bool f_atlo[15]; bool m_atlo[15]; int tab[8]; int probalkoza; // orok foglaltága // főátlók (-o) // mellékátlók (+o) // kiírához kell // kiírához kell bool& Sor(int i) { return or[i-1]; bool& Fo(int, int o) { return f_atlo[-o+7]; bool& Mellek(int, int o) { return m_atlo[+o-2]; int& Tab(int ) { return tab[-1]; Tabla oztály megvalóítáa /2 bool Szabad(int, int o) { return Sor() && Fo(, o) && Mellek(, o); void Lefoglal(int, int o) { Sor() = Fo(, o) = Mellek(, o) = fale; Tab() = o; void Felzabadit(int, int o) { Sor() = Fo(, o) = Mellek(, o) = true; Tab() = 0;
4 Tabla oztály megvalóítáa /3 Tabla(); bool Probal(int ozlop); void Rajzol(int or, int ozlop); ; Tabla::Tabla() { probalkoza = 0; for (int i = 0; i < 15; i++) { f_atlo[i] = m_atlo[i] = true; if (i < 8) { or[i] = true; tab[i] = 0; Tabla oztály megvalóítáa /4 bool Tabla::Probal(int ozlop) { int or = 1; bool iker = fale; do { Rajzol(or, ozlop); if (Szabad(or, ozlop)) { Lefoglal(or, ozlop); if (ozlop < 8) iker = Probal(ozlop+1); ele iker = true; if (!iker) Felzabadit(or, ozlop); or++; while (!iker && or <= 8); return iker; Működé megfigyelée A minden próbálkozát zámolunk: kell egy zámláló: probalkoza Minden próbálkozát kirajzolunk: * a már elhelyezett királynők helyére a próba helyére kell tárolni a táblát: tabla változó Implementáció - kiir void Tabla::Rajzol(int or, int ozlop) { cout.width(3); cout << ++probalkoza << ".\n"; for (int i = 1; i <= 8; i++) { cout.width(5); cout << 9-i << ' '; for (int j = 1; j <= 8; j++) { if (i == or && j == ozlop) cout << " "; ele if (Tab(i) == j) cout << "* "; ele cout << " "; cout << endl; cout << " A B C D E F G H\n\n"; Főprogram Eredmények int main() { Tabla t; if (t.probal(1)) { t.rajzol(8, 0); cout << "Siker"; ele cout << "Baj van"; // véglege áll. kirajzoláa * 7 * 6 * 5 * 4 * 3 * 2 * 1 A B C D E F G H * A B C D E F G H
5 Eredmények /2 Oko királynő * 7 * 6 * 5 * 4 * 3 * 2 * 1 * A B C D E F G H Kiralyno *babu = NULL; for (int i = 1; i <= 8; i++) { babu = new Kiralyno(i, babu); babu->helyezkedj(); bool Kiralyno::Helyezkedj() { while (zomzed!= NULL && zomzed->uteben(or, ozlop)) if (!Lep()) return fale; return true; Oko királynő metóduai: Uteben Ellenőrzi, hogy az adott pozíció ütében áll-e. Lep Előre lép az adott ozlopban, ha nem tud, akkor az ozlop elejére áll é a tőle balra levőt lépteti. Helyezkedj Jó helyet kere magának. Kiír kiírja a pozícióját. Metódu pec. - Uteben bool Uteben(int or, int ozlop); megvizgálja, hogy az adott pozíció ütében álle a aját pozíciójával, ha nem, akkor azono paraméterekkel meghívja a zomzéd Uteben() tagfüggvényét. bemenet: or or (1..8) ozlop ozlop (1..8) kimenet: true a pozíció ütében áll fale ninc ütéi helyzet Metódu pec. - Lep void Lep(); Előre lép az adott ozlopban, ha nem tud, akkor az ozlop elejére áll é meghívja a tőle balra levőt királynő Lep() tagfüggvényét. bemenet: - kimenet: true tudott lépni fale nem tudott lépni Metódu pec. - Helyezkedj void Helyezkedj(); Megvizgála a aját pozícióját, hogy megfelelőe. Ha ütében áll, akkor meghívja Lep() tagfüggvényét. Ha tudott lépni, akkor imét megvizgálja a aját pozícióját. bemenet: - kimenet: true tudott megfelelő helyet találni magának fale nem tudott megfelelő helyet találni
6 Metódu pec. - Kiir void Kiir(); Kiírja a aját é a zomzédok pozícióját. Kiralyno oztály megvalóítáa cla Kiralyno { int or; // or 1-8 int ozlop; // ozlop 1-8 Kiralyno *zomzed; // zomzéd pointere Kiralyno(int o, Kiralyno *z): zomzed(z), ozlop(o) { or = 1; bool Uteben(int, int o); bool Lep(); bool Helyezkedj(); void Kiir(); ; Kiralyno oztály megvalóítáa/2 bool Kiralyno::Uteben(int, int o) { int d = ozlop - o; // ozlop differencia if (or == or + d == or - d == ) return true; ele if (zomzed!= NULL) // ha van zomzéd return zomzed->uteben(, o); // akkor azzal i ele return fale; Kiralyno oztály megvalóítáa/3 bool Kiralyno::Lep() { if (or < 8) { or++; return true; // tudott lépni if (zomzed!= NULL) { // nem tud, van zomz. if (!zomzed->lep()) return fale; if (!zomzed->helyezkedj()) return fale; ele { return fale; or = 1; return true; Kiralyno oztály megvalóítáa/4 bool Kiralyno::Helyezkedj() { while (zomzed!= NULL && zomzed->uteben(or, ozlop)) if (!Lep()) return fale; return true; void Kiralyno::Kiir() { if (zomzed!= NULL) zomzed->kiir(); cout << (char)(ozlop-1+'a') << 9-or << endl; Főprogram int main() { Kiralyno *babu = NULL; for (int i = 1; i <= 8; i++) { babu = new Kiralyno(i, babu); babu->helyezkedj(); babu->kiir();
7 Megtalálja-e az egér a ajtot Egér algoritmua Minden cellából előzör jobbra, majd le, ezután balra é végül fel irányokba indul. Minden cellában otthagyja a nyomát, azaz azt, hogy onnan merre indult legutoljára. Cak olyan cellába lép be, ahol ninc "nyom". Ha már nem tud hova lépni, vizalép Megtalálja-e az egér a ajtot Megtalálja-e az egér a ajtot Megtalálja-e az egér a ajtot Megtalálja-e az egér a ajtot
8 Megtalálja-e az egér a ajtot Megtalálja-e az egér a ajtot Hogyan modellezhető Réztvevők, kapcolatok, tevékenyégek labirintu cellákból épül fel a celláknak zomzédai vannak tárolja a rajta álló valamit é annak nyomát megkéri a rajta álló valamit, hogy lépjen kirajzolja az állát egér irány néz lép fal haonlít az egérhez, de nem lép Statiku modell Labirint Cella Obj n, m, poi Lép, Print zomzéd, nyom, Set.., Get.. Az attribútumok megadáa nem telje, cak vázlato! A telje program ill. dokumentáció letölthető a tárgy honlapjáról Eger irány Néz,Lépj,Lép jel, erő Lép Fal jel, erő Lép Obj metóduai Eger objektum cla Obj { protected: int ir; // ebbe az irányba tart mot Obj() :ir(-1) {; // kezdő irány Obj *Nez(int i, Cella &c, bool b = fale); void Lepj(int i, Cella &c, bool b = fale); virtual char Jele() = 0; // jel lekérdzée virtual int Ereje() = 0; // erő lekérdezée virtual void Lep(Cella &c); // léptet virtual void operator()(obj*) {; // ha "megették" ; cla Eger :public Obj { cont int ero; cont char jel; Eger(char j = 'e', int e = 10) :ero(e), jel(j) { char Jele() { return(jel); // jele int Ereje() { return(ero); // ereje void operator()(obj *p) { // meghívódik, ha megették cout << "Jaj zegeny " << Jele(); cout << " megetvett a(z):"; cout << p->jele() << " jelu\n"; ;
9 Cella objektum /1 cla Cella { int x, y; // geometriai koordináták Cella *z[4]; // zomzédok, ha NULL, akkor ninc Obj *p; // cella tartalma. URES, ha ninc Lita<Labnyom> ny; // lábnyomok litája enum irany { J, L, B, F ; // nehéz zépen elérni.. Cella() { SetPo(0, 0); void SetPo(int i, int j); void SetSz(int n, Cella *cp) { z[n] = cp; // zomzéd Cella *GetSz(int n) { return(z[n]);... Cella objektum /2... void SetObj(Obj *a) { p = a; // objektum beíráa Obj *GetObj() { return(p); // objektum lekérdezée void SetNyom(int n); // lábnyom beíráa int GetNyom(cont Obj *a); // lábnyom lekérdezée void DelNyom() {ny.torol(labnyom(getobj())); Főprogram (rézlet) Labirintu lépteté Labirint lab(4,5); // 4 * 5 o labirintu Eger e1, e2; // 2 egér; jele: e lab.setobj(2, 3, e1); // egerek elhelyezée lab.setobj(1, 4, e2); try { char ch; lab.print(); // kiírjuk a labirintut while (cin >> nokipw >> ch, ch!= 'e') { lab.lep(); lab.print(); // lépteté catch (exception& e) { cout << e.what() << endl; Végig kell járni a cellákat meghívni az ott "lakó" objektum léptetéét Figyelni kell. hogy nehogy duplán lépteünk. (bejárái orrend elé lépett) Obj::lep() /1 Obj::Lep() /2 if (c.getnyom(thi) < 0) // ha nem volt nyoma, indul c.setnyom(f+1); // így nem tud vizalépni if (++ir <= F) { // ha van még bejáratlan irány if (Obj *p = Nez(ir, c)) { // ha van zomzéd if (Ereje() > p->ereje()) { // haő az erőebb (*p)(thi); // meghívjuk a függv. operátorát Lepj(ir, c); // rálépünk (eltapouk) ir = -1; // mot léptünk be: kezdő irány ele { // ninc már bejáratlan irány if ((ir = c.getnyom(thi)) > F) { // kezdő nem lép viza. throw td::logic_error("kezdo pozicioba jutott"); ele { // vizalépé if (Obj *p = Nez(ir, c, true)) { // lehet, h. van ott valaki if (Ereje() > p->ereje()) { // Ő az erőebb (*p)(thi); // meghívjuk a függv. operátorát Lepj(ir, c, true); // vizalépünk é eltapouk ir ^= 2; // erre ment be (trükk: a zemben levő irányok cak a 2-e bitben különböznek)
10 Amőba Szereplők: tábla, korongok, játékook Ki imeri a zabályokat Tábla Korongok Válaztott megvalóítá: Tábla imeri a korongok helyzetét, zomzédokat A korongok le tudják kérdezni a zomzédokat Meg tudják állapítani, ha nyert helyzet van. Ekkor zínt váltanak. Objektum hierachia Table belő oztálya Poition beépíthető lenne a Dic oztályba, de a felelőégek így jobban elvállnak Szomzédok é irányok typedef td::map<int, Dic*> neighbor_type; cla Table { td::vector<td::vector<dic*> > t; tatic cont int MaxDir = 8; truct dir_type { int dx, dy; dir[maxdir];... void Dic::checkAll() { Table::neighbor_type nb = po.getneighbor(); for(table::neighbor_type::iterator it= nb.begin(); it!= nb.end(); ++it) { if ((it->econd)->check(color, it->firt)) etcolor(red); Sor ellenőrzée egyik irányban bool Dic::check(color_type col,int dir,int max) { if (col == color) { if (--max == 0) { etcolor(red); return true; ele { Dic *dp = po.getnext(dir); if (dp && dp->check(col, dir, max)) { etcolor(red); return true; return fale; Objektum Programozá alapjai II. (13. ea) C++ Év végi özefoglalá Szeberényi Imre BME IIT <zebi@iit.bme.hu> M Ű E G Y E T E M OBJEKTUM: konkrét adat é a rajta végezhető műveletek megteteítője egyedileg azonoítható vielkedéel é állapottal jellemezhető felelőége é jogköre van képe kommunikálni má objektumokkal a belő adatzerkezet, é a műveleteket megvalóító algoritmu rejtve marad könnyen módoítható újrafelhaználható általánoítható
11 OO paradigmák egyégbezárá (encapulation) oztályok (adatzerkezet, műveletek özekapcoláa) többarcúág (polymorphim) műveletek paraméter függőek, tárgy függőek (köté) példányoítá (intantiation) öröklé (inheritance) generiku adatzerkezet alapú megoldáok Cla Objektum oztály objektum fajta, típu (vielkedéi oztály) Oztály Objektum Objektum Egy vielkedéi oztály egy konkrét példánya. oztály Komplex k1, k2, k3; objektumok Létrehozá, megemmiíté, értékadá Kontruktor // létrehozá default: X() // ninc paramétere automatikuan létrejön, ha ninc máik kont. máoló: X(cont X&) // referencia paramétere van, automatikuan létrejön: meghívja az adattagok é őök máoló kont.-rát, ha obj. egyébként bitenként máol. Detruktor // megemmiíté automatikuan létrejön: meghívja az adattagok é őök detruktorát operator=(cont X&) // értékadó operátor automatikuan létrejön: meghívja az adattagok é őök értékadó operátorát, ha objektum, egyébként bitenként máol Kontruktor é detruktor KONSTRUKTOR: Definíció é inicializálá özevonáa. DESTRUKTOR: Az objektum megzüntetée. cla Komplex { double re, im; Komplex() { // kontruktornak ninc típua Komplex(double r, double i) { re = r; im = i; ~Komplex() { // detruktornak ninc paramétere... ; Komplex k1; Komplex k2 = k1; ez az alapértelmezé ideiglene objektum // máoló (copy) kontruktorral Komplex k3 = Komplex(1.2, 3.4); Inicializálá miért má mint az értékadá A kezdeti értékadákor még inicializálatlan a változó (nem létezik), ezért nem lehet a máoláal azono módon kezelni. Mikor hívódik a máoló kontruktor inicializálákor (azono típual inicializálunk) függvény paraméterének átadáakor függvény vizatéréi értékének átvételekor ideiglene változók özetett kifejezéekben kivétel dobáakor Detruktor feladatai Megzünteti a aját rézt: végrehajtja a programozott törzet tartalmazott objektumok detruktorainak híváa virtuáli függvénymutatók vizaállítáa virtuáli alapoztály mutatóinak vizaállítáa Hívja a közvetlen, nem virtuáli alapoztályok detruktorait. Örökléi lánc végén hívja a virtuáli alapoztályok detruktorait
12 Statiku tag Az oztályban tatikuan deklarált tag nem példányoodik. Pontoan egy példány létezik, amit explicit módon definiálni kell (létre kell hozni). Minden objektum ugyanazt a tagot éri el. Nem zükége objetummal hivatkozni rá. pl: String::SetUcae(true); Statiku tagként az oztály tartalmazhatja önmagát. Felhaználá: globáli változók elrejtée Statiku tagfüggvény Cak egy példányban létezik. Statiku tagfüggvény nem éri el az objektumpéldányok nem tatiku adattagjait. cla A { int a; Nem éri el! tatic void f() { cout << a; ; Alapértelmezett tagfüggvények Kontruktor default: X() // ninc paramétere máoló: X(cont X&) // referencia paraméter Detruktor operator=(cont X&) // értékadó operator&() // címképző operator,(cont X&) // vező A kontruktor/detruktor é az értékadó operátor alapértelmezé zerint meghívja az adattagok é őök megfelelő tagfüggvényét. Ha azonban aját függvényünk van, akkor abban cak az történik, amit beleírtunk. Kivéve a kontruktor/detruktor alapfunkcióit (default létrehozá, megemmiíté.) Operátorok kiértékelée ha a bal oldal oztály, akkor meg kell vizgálni, hogy van-e megfelelő alakú tagfüggvény ha ninc, vagy beépített típu, de a jobb oldal oztály, akkor meg kell vizgálni, hogy van-e megfelelő alakú globáli függvény Mikor kell globáli függvény ha a bal oldal nem oztály (pl. 2 + X ) vagy ninc a kezünkben (pl. cout << X) A védelem enyhítée: friend cla Komplex { double re, im;... Komplex operator+(cont Komplex& k) { Komplex um(k.re + re, k.im + im); return(um); Komplex operator+(cont double r) { return(operator+(komplex(r))); friend otream& operator<<(otream&, cont Komplex& k); ; otream& operator<<(otream&, cont Komplex& k) << k.re << ',' << k.im << 'j'; return(); Így láncolható cout << k1 << k2; Védelem özefoglaláa külő zármaztatott tagfüggvény é barát protected: private:
13 Öröklé Az öröklé olyan implementáció é modellezéi ezköz, amelyik lehetővé tezi, hogy egy oztályból olyan újabb oztályokat zármaztaunk, melyek rendelkeznek az eredeti oztályban már definiált tulajdonágokkal, zerkezettel é vielkedéel. Újrafelhaználhatóág zinonimája. Nem cak bővíthető, hanem a tagfüggvények át i definiálhatók pecializáció Kompatibilitá/2 állat általánoítá madár emlő vízi galamb veréb kutya bálna ponty A típuú objektum kompatibil B-vel, ha A típuú objektum bárhol é bármikor alkalmazható, ahol B haználata megengedett. (pl: kutya kompatibili az emlőel) Generiku oztályok é függv. Generiku oztályokkal é függvényekkel általáno zerkezetekhez jutunk: Típut paraméterként adhatunk meg. A generiku oztály v. függvény kéőbb a típunak megfelelően példányoítható. A pecializáció orán a ablonból az általánotól eltérő példány hozható létre. A függvényparaméterekből a konkrét ablonpéldány levezethető. Függvényablon átdefiniálható. template <cla T> void rendez (T a[], int n) { for (int i = 1; i < n; i++) { T tmp = a[i]; int j = i-1; while (j >= 0 && a[j] > tmp) { a[j+1] = a[j]; j--; Generiku oztályok é függv. /2 template <cla T, int > cla Array { T t[]; T& operator[](int i); ; a[j+1] = tmp; Array<int, 10> i10; Array<double, 5> d5; Array<char*, 20> cp20; int t[100]; rendez<int>(t, 100); Predikátumok Predikátumok /2 Az algoritmuok tovább általánoíthatók ún. predikátumokkal. Ezek a logikai függvények, vagy függvényobjektumok befolyáolják az algoritmut működéét. template <cla T, bool Ha(T, T)> void rendez (T a[], int n) { for (int i = 1; i < n; i++) { T tmp = a[i]; int j = i-1; while (j >= 0 && Ha(a[j], tmp)) { a[j+1] = a[j]; j--; a[j+1] = tmp; int t[100]; rendez<int, haonlitfv>(t, 100); Template paraméterként átadott predikátumok. template<cla T> bool haonlitfv(t a, T b) { return a > b; template<> bool haonlitfv<char*>(char* a, char* b) { // pecializáció return trcmp(a, b) >= 1; int t[6] = { 1, 2, -8, 0, 12, 3 ; rendez<int, haonlitfv<int> >(t, 6); char *txt[] = { "zilva", "alma", "korte" ; rendez<char*, haonlitfv<char*> >(txt, 3);
14 Predikátumok /3 Függvényparaméterként átadott predikátumok: template<cla T, cla S> T kivalazt(t a[], int n, S cmp) { ilyen fv. poi T tmp = a[0]; for (int i = 1; i < n; i++) if (cmp(a[i], tmp)) tmp = a[i]; return tmp; template<cla T> bool haonlitfv(t a, T b) { return a > b; int t[6] = { 1, 2, -8, 0, 12, 3 ; kivalazt<int, bool (*)(int,int)>(t, 6, HaonlitFv<int>); kivalazt(t, 6, haonlitfv<int>);// kitalálja templ. par. Bejárók Tárolók -> adatorozatok tároláa adatorozat elemeit el kell érni tipiku művelet: "add a következőt" Iterátor: általánoított adatorozat elemeire hivatkozó elvont mutatóobjektum. Legfontoabb műveletei: éppen akt. elem elérée (* ->) következő elemre lépé (++) mutatók özehaonlítáa ( ==,!= ) mutatóobjektum létrehozáa az elő elemre ( begin() ) mutatóobjektum létrehozáa az utoló utáni elemre ( end() ) Bejárók /2 Kivételkezelé = globáli goto Nem kell imerni a tároló belő adatzerkezetét. Tároló könnyen változtatható. Generiku algoritmuok fel tudják haználni. Indexelé nem mindig alkalmazható, de iterátor.. A pointer az iterátor egy peciái fajtája. Kivétel2 Kritiku műveletek Kivétel1 template<cla Iter> void PrintFv(Iter firt, Iter lat){ while (firt!= lat) cout << *firt++ << endl; int tarolo[5] = { 1, 2, 3, 4, 5 ; PrintFv<int*>(tarolo, tarolo+5); Array<double, 10> d10; PrintFv<>(d10.begin(), d10.end()); További műv Kivételkezelé/2 A dobott kivétel alap ill. zármaztatott objektum i lehet. try { throw E(); catch(h) { // mikor jut ide 1. H é E azono típuú, 2. H bázioztálya E-nek, 3. H é E mutató é teljeül rájuk 1. vagy 2., 4. H é E referencia é teljeül rájuk 1. vagy 2. Kivételkezelé/3 Célzerű kivétel oztályokat alkalmazni, (pl. td::exception) amiből zármaztatáal újabb kivételeket lehet létrehozni. A dobá értékparamétert dob, ezért az elkapákor zámolni kell az alapoztályra történő konverzióval (adatvezté). Célzerű pointert, vagy referenciát alkalmazni. Kell máoló kontruktor
15 Szabványo kivételek (tdexcept) bad_alloc bad_cat bad_typeid bad_exception io_bae::failure range_error overflow_error undeflow_error lenght_error domain_error out_of_range invalid_argument runtime_error exception logic_error Szabványo kivételek/2 cla exeption {... Aut. típukonverzió letiltáa exception() throw(); exception(cont exception&) throw(); execption& operator=(cont exception&) throw(); virtual ~exception() throw(); virtual cont char *what() cont throw(); ; cla runtime_error : public exception { explicit runtime_error(cont tring& what_arg); ; cla logic_error : public exception { explicit logic_error(cont tring& what_arg ); ; Szabványo kivételek/3 A tandard könyvtár nem bővíti az exception oztály függvényeit, cak megfelelően átdefiniálja azokat. A felhaználói programnak nem köteleége az exceptionből zármaztatni, de célzerű. try {... referencia catch (exception& e) { cout << "exeptionból zármazik" cout << e.what() << endl; catch (...) { cout << "Ez valami má\n"; Szabványo könyvtár (STL) Általáno célú, újrafelhaználható elemek: tárolók, majdnem tárolók algoritmuok függvények bejárók memóriakezelők adatfolyamok Tárolók (konténerek) Szabványo tárolók Tetzőlege adatok tároláára Sorban, vagy tetzőlege orrendben érhetők el az adatok. Tipizált felületek vector<int> i1(10, -3); vector<double> d1(100); i1[8] = 12; i1.at(9) = 13; for (vector<double>::ize_type i = 0; i < d1.ize(); i++) d1[i] = 3.14; for (vector<int>::iterator i = i1.begin(); i < i1.end(); i++) cout << *i << endl; vector lit deque tack queue priority_queue map multimap et multiet tring array valarray bitet
16 STL tárolók özefoglaláa A tárolók nem cak tárolják, hanem "birtokolják i az elemeket" elemek létrehozáa/megzüntetée Két fajta STL tároló van: Sorozat tárolók (vector, lit, deque) A programozó határozza meg a orrendet: Azociatív tárolók (et, multiet, map, multimap) A tároló határozza meg a tárolt orrendet Ez elemek egy kulccal érhetők el. STL tárolók özefoglaláa /2 vector<t, Alloc> lit<t, Alloc> deque<t, Alloc> map<key, T, Cmp, Alloc> et<key, Cmp, Alloc> tack<t, deque> queue<t, deque> priority_queue<t, vector, Cmp> Tárolók fontoabb műveletei Kontr. detr. op= Iterátoro k i z e m a x _ i z e e m p t y r e i z e fr o n t vector deque b a c k lit o p [] a t a i g n i n e rt e r a e w a p et multiet map multimap c l e a r p u h _ fr o n t p o p _ fr o n t p u h _ b a c k p o p _ b a c k Algoritmuok <algorithm> Nem módoító orozatműveletek Sorozatmódoító műveletek Rendezé, rendezett orozatok műveletei Halmazműveletek Kupacműveletek Mimimum, maximum Permutációk Függvényobjektumok <functional> unary_function, binary_function template <cla Arg, cla Reult> truct unary_function { typedef Arg argument_type; typedef Reult reult_type; ; truct Valami : public uanry_function<int, bool> {... ;... Valami::argument_type... Valami::reult_type Predikátumok é aritm. műv. equal_to, not_equal_to, greater, le, greater_equal, le_equal logical_and, logical_or logical_not plu minu multiplie divide modulu negate
17 Lekötők, átalakítók, típuok Nem cak C++-t tanultunk! bind2nd() bind1t() mem_fun() mem_fun_ref() prt_fun() not1() not2() binder1t binder2nd mem_fun1_ref_t mem_fun1_t mem_fun_ref_t mem_fun_t unary_negate binary_negate OO tervezé dolgok zereplők zámbavétele vielkedéük modellezée újrafelhaználhatóág, generikuág OO modell leíráa Fejleztő környezet Dokumentálá pici UNIX Modellezéi példa 1. Terv: elvi kapcolati zint Modellezzük hallgatók, tantárgyak, feleletek kapcolatát: Hallgatók tárgyakat vehetnek fel Tárgyakhoz zámonkéréek tartoznak Számonkéréek eredményét tárolni kell Mik az olbjektumok (zereplők) Ki miért felel Ki mihez férhet hozzá Ki milyen interfézt ad Megvalóítái zint Kik a zereplők Ki miért felel Mihez férhet hozzá Milyen interfézt ad Modell: heterogén koll. Óceán olyan alapobjektumra mutató pointert tárol mely objektumból zármaztatható hal, cápa, tb. Óceán ciklikuan bejárja a tárolót é a pointerek egítégével minden objektumra meghív egy metódut, ami a vielkedét zimulálja. Minden ciklu végén kirajzolja az új populációt
18 Statiku modell Modellezéi példa kieg. Ocean cellak[n][m] lep Hal kor lep Obj lep Capa kor nemevett lep Egézítük ki a korábbi modellünket: Az állatvédők tudni akarják, hogy mekkora utat tez meg élete orán Cápeti, a cápa. A tengerbiológuok tudni akarják, hogy hányzor zaporodik Cápeti. A dokumentum film kézül Cápeti útjáról. Kérdéek: Tegyünk 3 jeladót Cápeti nyakába 1 jeladó jelezzen mindenkinek Oberver terv. minta A forma i fonto! ConcreteOb1 +update( ) Oberver -ubjptr +update( ) ConcreteOb2 +update( ) Subject -obptr[] +attach() +detach() +notify() ConcreteSubj main(l,a,n,d)char**a;{ for(d=atoi(a[1])/10*80- atoi(a[2])/5-596;n="@nka\ CLCCGZAAQBEAADAFaISADJABBA^\ SNLGAQABDAXIMBAACTBATAHDBAN\ ZcEMMCCCCAAhEIJFAEAAABAfHJE\ TBdFLDAANEfDNBPHdBcBBBEA_AL\ H E L L O, W O R L D! " [l++-3];)for(;n-->64;) putchar(!d+++33^ l&1); WhereAmI 47 19!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! UNIX-zal kezdtük a félévet Néhány gondolat a UNIX-o fejleztőezközökről befejezéül: Számtalan ezköz, többek által ma már elavultnak tekintett, ugyanakkor hatékony, egyége parancoro felülettel. Kiemelt a zövegfeldolgozá/elemzé hatékony támogatáa. Egyre több next, next, next, finih program, a PC- változatokban, ami nem mindig jelent előnyt
19 Fejleztét egítő ezközök make cc, rc, cv, vn, git prof lex (flex) yacc (bion) awk perl... lex (cak gondolatébreztőként) Lexikai analizátor generátor Regulári kifejezéekkel megadott lexikai elemek felimerééhez C programot generál. Önállóan i felhaználható ( ll), de legtöbbzör beépítik egy máik programba yacc (cak gondolatébreztőként) Compiler generáló ezköz környezetfüggetlen nyelvhez. A nyelvtani zabályokból előállítja a nyelvtant felimerő C programot. Önállóan i haználható (-ly), de legtöbbzör beépítik máik programba. Péda: római zámok konverziója %token RDIG %{ int lat = 0; % %% lit: lit '\n' lit number '\n' { printf("-> %d\n", $2); lat = 0; lit error '\n' { yyerrok; ; number: RDIG { lat = $$=$1; RDIG number { if ($1 >= lat) $$ = $2 + (lat=$1); ele $$ = $2 - (lat=$1); ; romailex.l Közönöm a figyelmet % extern int yylval; % %% I { yylval= 1; return RDIG; V { yylval= 5; return RDIG; X { yylval= 10; return RDIG; L { yylval= 50; return RDIG; C { yylval= 100; return RDIG; D { yylval= 500; return RDIG; M { yylval=1000; return RDIG; [^IVXLCDM] { return(yytext[0]);
Programozás alapjai II. (12. ea) C++ visszalépéses (backtrack) algoritmusok táblás játékok
Programozás alapjai II. (12. ea) C++ visszalépéses (backtrack) algoritmusok táblás játékok Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT
RészletesebbenNyolc királynő probléma. Programozás alapjai II. (12. ea) C++ visszalépéses (backtrack) algoritmusok táblás játékok. Probálgatás
Programozás alapjai II. (12. ea) C++ visszalépéses (backtrack) algoritmusok táblás játékok Szeberényi Imre, Somogyi Péter BME IIT Nyolc királynő probléma Helyezzünk el nyolc királynőt
RészletesebbenProgramozás alapjai II. (12. ea) C++ gtest - tesztelést segítő csomag visszalépéses (backtrack) algoritmusok. Tesztelési követelmények.
Programozás alapjai II. (12. ea) C++ gtest - tesztelést segítő csomag visszalépéses (backtrack) algoritmusok Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv
RészletesebbenTesztelési követelmények. Programozás alapjai II. (12. ea) C++ gtest - tesztelést segítő csomag visszalépéses (backtrack) algoritmusok.
Programozás alapjai II. (12. ea) C++ gtest - tesztelést segítő csomag visszalépéses (backtrack) algoritmusok Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv
RészletesebbenKivételek, kivételkezelés a C++ nyelvben
2009. Kivételek, kivételkezelés a C++ nyelvben Haladó C++ programozás Kurucz Attila ELTE - IK 2009.06.09. Tartalomjegyzék Tartalomjegyzék... 2 Mi a kivételkezelés?... 3 Alapfogalmak... 3 Kivétel... 3 Try
RészletesebbenPénzügyi algoritmusok
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
RészletesebbenProgramozás alapjai II. (4. ea) C++
Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.03.01. -1-
Részletesebben117. AA Megoldó Alfréd AA 117.
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,
Részletesebben500. AA Megoldó Alfréd AA 500.
Programozás alapjai 2. NZH 2010.05.13. gyakorlat: / Hiány:0 ZH:0 MEGOLD IB.027/51. Hftest: 0 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden
RészletesebbenSTL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1
STL gyakorlat C++ Izsó Tamás 2016. május 9. Izsó Tamás STL gyakorlat/ 1 Komponensek kapcsolata Deklarálja az alábbi osztálydiagramon szereplő osztályok közül az A, AA és AB osztályokat! A konstruktorokat
RészletesebbenObjektumok inicializálása
Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú
Részletesebben1. 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?
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? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
RészletesebbenMit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai,
RészletesebbenProgramozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float,
RészletesebbenProgramozás II gyakorlat. 6. Polimorfizmus
Programozás II gyakorlat 6. Polimorfizmus Típuskonverziók C-ben: void * ptr; int * ptr_i = (int*)ptr; Ez működik C++-ban is. Használjuk inkább ezt: int * ptr_i = static_cast(ptr); Csak egymással
RészletesebbenProgramozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa
Programozás alapjai II. (8. ea) C++ bejárók és egy tervezési példa Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2018.03.27. -
RészletesebbenFejlett programozási nyelvek C++ Iterátorok
Fejlett programozási nyelvek C++ Iterátorok 10. előadás Antal Margit 2009 slide 1 Témakörök I. Bevezetés II. Iterátor definíció III. Iterátorok jellemzői IV. Iterátorkategóriák V. Iterátor adapterek slide
RészletesebbenKivételkezelés a C++ nyelvben Bevezetés
Kivételkezelés a C++ nyelvben Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Kivételkezelés a C++ nyelvben CPP9 / 1 Hagyományos hibakezelés Függvény visszatérési értéke (paramétere) hátrányai:
RészletesebbenProgramozás II gyakorlat. 8. Operátor túlterhelés
Programozás II gyakorlat 8. Operátor túlterhelés Kezdő feladat Írjunk egy Vector osztályt, amely n db double értéket tárol. A konstruktor kapja meg az elemek számát. Írj egy set(int idx, double v) függvényt,
Részletesebben500. CC Megoldó Alfréd CC 500.
Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: G1/IB.146 Hiány:3 ZH:7,71 MEGOLD SCH/500. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
RészletesebbenGlobális operátor overloading
Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal
Részletesebben1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon
1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (
RészletesebbenStatikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék
Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma
RészletesebbenProgramozás II. 4. Dr. Iványi Péter
Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include
RészletesebbenOsztályok. 4. gyakorlat
Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum
Részletesebben128. AA Megoldó Alfréd AA 128.
Programozás alapjai 2. PótZH 2010.05.20. gyakorlat: Hiány:0 ZH: MEGOLD SEHOL/5. Hftest: 0 ZHp: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti, hogy minden
RészletesebbenFü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 Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok
RészletesebbenProgramozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből
Részletesebben.AA Megoldó Alfréd AA.
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,
RészletesebbenFelhasználó által definiált adattípus
Felhasználó által definiált adattípus C++ Izsó Tamás 2017. február 24. Izsó Tamás Felhasználó által definiált adattípus/ 1 Irodalom Izsó Tamás Felhasználó által definiált adattípus/ 2 Programtervezési
Részletesebben1.AA MEGOLDÓ BERCI AA 1.
Programozás alapjai 2. (inf.) 2. zárthelyi 2015.05.07. gyak./lab. hiányzás: 3/2 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat
RészletesebbenProgramozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)
Programozás alapjai C nyelv 5. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.17. -1- Tömbök Azonos típusú adatok tárolására. Index
RészletesebbenProgramozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)
Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
RészletesebbenProgramozás alapjai II. (4. ea) C++
Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I.
RészletesebbenProgramozás alapjai II. (4. ea) C++
Programozás alapjai II. (4. ea) C++ konstruktor és értékadás, dinamikus szerkezetek Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I.
Részletesebben3. Osztályok II. Programozás II
3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt
RészletesebbenProgramozás alapjai II. (11. ea) C++ STL algoritmusok
Programozás alapjai II. (11. ea) C++ STL algoritmusok Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2015.04.21. - 1 - Előző óra összefoglalása
RészletesebbenISA szimulátor objektum-orientált modell (C++)
Budapesti Műszaki és Gazdaságtudományi Egyetem ISA szimulátor objektum-orientált modell (C++) Horváth Péter Elektronikus Eszközök Tanszéke 2015. február 12. Horváth Péter ISA szimulátor objektum-orientált
RészletesebbenBánsághi Anna anna.bansaghi@mamikon.net
ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64
RészletesebbenC++ Standard Template Library (STL)
Programozási Nyelvek és Fordítóprogramok Tanszék Programozási Nyelvek I. Témák 1 STL alapok 2 STL fogalmak 3 Konténerek 4 Iterátorok 5 Funktorok C++ STL Ne fedezzük fel újra spanyolviaszt! Sok adatszerkezet/algoritmus
RészletesebbenC++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
RészletesebbenBevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum
Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout
RészletesebbenProgramozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia
Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
Részletesebbenosztályok kapcsolata Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1
Származtatatás C++ Izsó Tamás 2014. március 19. Izsó Tamás Származtatatás/ 1 Dinamikus tagváltozó az osztályban class RVektor { i n t n ; R a c i o n a l i s p ; p u b l i c : RVektor ( i n t n=10 ) :
Részletesebben503.AA Megoldo Arisztid 503.A
Programozás alapjai 2. (inf.) 2. ZH 2017.04.27. gy./l. hiány: / ABCD123 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de csak a feladatlapra írt megoldásokat értékeljük!
Részletesebben500. DD Megoldó Alfréd DD 500.
Programozás alapjai 2. (inf.) zárthelyi 2009.05.21. gyakorlat: / Érdemjegy: QBX734 () IB319/32. Hftest: Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
RészletesebbenPelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
RészletesebbenOsztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;
PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function
RészletesebbenBevezetés a programozásba 2
Bevezetés a programozásba 2 7. Előadás: STL konténerek, sablonok http://digitus.itk.ppke.hu/~flugi/ Vector int int main() { vector v(10); int int sum=0; for for (int i=0;i
RészletesebbenHiba és kivételkezelés. Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető. Kivételkezelés újból. Kivételkezelés = globális goto
Hiba és kivételkezelés Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT Hagyományos hibakezelési módszerek: Befejezi a program futását Hibakódot
RészletesebbenProgramozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető. Hiba és kivételkezelés. Kivételkezelés újból
Programozás alapjai II. (10. ea) C++ hibakezelés és STL bevezető Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2010.04.13. -1- Hiba és kivételkezelés
RészletesebbenProgramozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.02.23.
RészletesebbenProgramozás C++ -ban
8. Dinamikus objektumok Programozás C++ -ban Ahhoz hogy általános prolémákat is meg tudjunk oldani, szükség van arra, hogy dinamikusan hozhassunk létre vagy szüntethessünk meg objektumokat. A C programozási
RészletesebbenBevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok
Bevezetés a programozásba II 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Emlékeztető struct Vektor { int meret, *mut; Vektor(int meret); int szamlal(int mit); }; int Vektor::szamlal(int mit)
RészletesebbenProgramfejleszté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
Programozás alapjai II. (3. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT Programfejlesztés Feladatanalízis világ = dolgok + tevékenységek Modellezés
RészletesebbenProgramozá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)
Programozás alapjai II. (3. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.02.22.
Részletesebben1. Bevezetés A C++ nem objektumorientált újdonságai 3
Előszó xiii 1. Bevezetés 1 2. A C++ nem objektumorientált újdonságai 3 2.1. A C és a C++ nyelv 3 2.1.1. Függvényparaméterek és visszatérési érték 3 2.1.2. A main függvény 4 2.1.3. A bool típus 4 2.1.4.
RészletesebbenMutató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 alapjai C nyelv 8. gyakorlat Szeberényi mre BME T Programozás alapjai. (C nyelv, gyakorlat) BME-T Sz.. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
RészletesebbenProgramozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ C++ kialakulása, nem OOP újdonságok: Szeberényi Imre BME IIT M Ű E G Y T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2011.02.15. -1- C++ kialakulása
RészletesebbenProgramozás alapjai II. (2. ea) C++
Programozás alapjai II. (2. ea) C++ C++ kialakulása, nem OOP újdonságok: Szeberényi Imre BME IIT Veszélyforrások csökkentése C + javítások C++ kialakulása C++ Objektum orientált szemlélet
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenProgramozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c
RészletesebbenMiután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:
Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba
RészletesebbenProgramozá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)
Programozás alapjai II. (2. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.02.23.
RészletesebbenSTL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók
STL Elsődleges komponensek: Tárolók Algoritmusok Bejárók Másodlagos komponensek: Függvény objektumok Adapterek Allokátorok (helyfoglalók) Tulajdonságok Tárolók: Vektor (vector) Lista (list) Halmaz (set)
RészletesebbenC# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag
C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció
RészletesebbenProgramozás C és C++ -ban
Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új
RészletesebbenProgramozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
RészletesebbenProgramozás alapjai II. (11. ea) C++
Programozás alapjai II. (11. ea) C++ STL algoritmusok Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2018.04.24. - 1 - Előző óra
Részletesebben- 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]++;
Az alábbi feladatokat a AUT.BME.HU tanszéki weboldalon fellelhető AUT C++ Példatárból másoltam ki. A feladatokat a Programozás alapjai 2. ZH-ra való felkészülés jegyében válogattam, a példák nagy részét
RészletesebbenProgramozás alapjai II. (6. ea) C++
Programozás alapjai II. (6. ea) C++ mutatókonverziók, heterogén kollekció Szeberényi Imre BME IIT Öröklés (ismétlés) Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
RészletesebbenObjektumorientált programozás C# nyelven III.
Objektumorientált programozás C# nyelven III. Kivételkezelés Tulajdonságok Feladatok Készítette: Miklós Árpád Dr. Kotsis Domokos Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és
RészletesebbenProgramozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010
Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása
RészletesebbenObjektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése
Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése Készítette: Gregorics Tibor Szabóné Nacsa Rozália Alakítsunk át egy infix formájú aritmetikai kifejezést postfix
RészletesebbenOAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek
RészletesebbenProgramozás alapjai II. (1. ea) C++
Programozás alapjai II. (1. ea) C++ C++ kialakulása, nem OO újdonságok: Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.02.05.
RészletesebbenProgramozás alapjai II. (1. ea) C++
Programozás alapjai II. (1. ea) C++ C++ kialakulása, nem OO újdonságok: Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2019.02.05.
RészletesebbenC++ programozási nyelv
C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok
RészletesebbenElőző óra összefoglalása. Programozás alapjai II. (11. ea) C++ STL algoritmusok. Létrehozás/megsemm. példa. STL tárolók összefoglalása
Előző óra összefoglalása Programozás alapjai II. (11. ea) C++ STL algoritmusok Szeberényi Imre, Somogyi Péter BME IIT Kivételkezelés működés részletei, hatása az objektumok élettartamára
RészletesebbenC++ 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++ referencia Izsó Tamás 2017. február 17. 1. Bevezetés A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák: Sokan összetévesztik a pointerrel. Keveset alkalmazzák
RészletesebbenPénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális
RészletesebbenProgramozás II. 3. gyakorlat Objektum Orientáltság C++-ban
Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus
RészletesebbenPénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Folyamok kezelése Fájlok írása/olvasása Folyamok kezelése Szabvány folyamok Eddig Kiírás a szöveges konzolra:
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 3. rész Tulajdonságok Indexelők Kivételkezelés Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát
Részletesebben1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
RészletesebbenProgramozá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)
Programozás alapjai II. (2. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2017.02.14.
Részletesebben111. AA Megoldó Alfréd AA 111.
Programozás alapjai 2. (inf.) pótzárthelyi 2008.05.22. gyakorlat: 0/0 Érdemjegy: ABCDEF () IB028/102. Hftest: 12000 Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
RészletesebbenSzámítógép és programozás 2
Számítógép és programozás 2 10. Előadás Öröklődés http://digitus.itk.ppke.hu/~flugi/ Tagfüggvény struct Particle { int x,y; unsigned char r,g,b; void rajzol() { gout
RészletesebbenProgramozás II. 6.Öröklés Dr. Iványi Péter
Programozás II. 6.Öröklés Dr. Iványi Péter 1 Öröklés Programozók lusta emberek, nem szeretnék valamit kétszer leírni Miért veszélyes? Nem hatékony Újra kell tárolni a kódot, újra le kell fordítani Karbantartás
Részletesebben0.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
0 Az objektum-orientáltság 0.1 Objektum fogalma Egy rendszer egyedileg azonosítható szereplője adatokkal és működéssel. Egységbezárás (encapsulation) - viselkedés a külvilág felé - belső struktúra (kívülről
RészletesebbenImperatív programozás
Imperatív programozás 6. Előadás Python típusok (folytatás) Függvények Típusok + műveleteik Listák - mutable (változtatható) - heterogén lista >>> lista = ["szo", 12, 3.5] >>> lista[1] 12 >>> lista[1:3]
RészletesebbenVirtuális függvények (late binding)
Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy
RészletesebbenProgramozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.
Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. április 8. Csak bázisosztályként használt/értelmezhető
RészletesebbenOsztálytervezés és C++ implementációs ajánlások I.
Osztálytervezés és C++ implementációs ajánlások I. Miskolci Egyetem Általános Informatikai Tanszék Osztálytervezés és implementációs kérdések I. OTERV1 / 1 Osztály tervezés Egy nyelv szabályrendszere számos
RészletesebbenProgramozás C++ -ban 2007/7
Programozás C++ -ban 2007/7 1. Másoló konstruktor Az egyik legnehezebben érthető fogalom C++ -ban a másoló konstruktor, vagy angolul "copy-constructor". Ez a konstruktor fontos szerepet játszik az argumentum
RészletesebbenOOP #14 (referencia-elv)
OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet
RészletesebbenProgramozás alapjai II. (3. ea) C++
Programozás alapjai II. (3. ea) C++ OO paradigmák, osztály, operátorok átdefiniálása Szeberényi Imre, Somogyi Péter BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I.
Részletesebben0. 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.
Programozás alapjai 2. (inf.) pót zárthelyi 2014.05.22. gyak. hiányzás: 2 n/kzhp: n/11,5 ABCDEF IB.028/2. Hftest: 4 (2,4p) Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot,
Részletesebben1. MINTAFELADATSOR KÖZÉPSZINT JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ
Oktatákutató é Fejleztő Intézet TÁMOP-3.1.1-11/1-01-0001 XXI. zázadi közoktatá (fejlezté, koordináció) II. zakaz FIZIKA 1. MINTAFELADATSOR KÖZÉPSZINT 015 JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ Oktatákutató é Fejleztő
RészletesebbenAlprogramok, paraméterátadás
ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi
Részletesebben