Nagy Krisztián. Programozás. a modellező informatikus szakirányon
|
|
- Fanni Kerekesné
- 8 évvel ezelőtt
- Látták:
Átírás
1 Nagy Krisztián Programozás a modellező informatikus szakirányon Készült: Veszprémi Anna táblás gyakorlatai Hudoba Péter géptermi gyakorlatai alapján Szerkesztette: Nagy Krisztián 1. kiadás A jegyzet módosítások nélkül szabadon terjeszthető! A jegyzet az Eötvös Loránd Tudományegyetem Informatikai Kar azon hallgatóinak készült, akik a Programtervező Informatikus szakon Modellező informatikus szakirányon nappali képzésben tanulnak.
2 Tartalomjegyzék Elmélet 1. Táblás gyakorlatok Bevezetés Intervallumos programozási tételek Intervallumos programozási tételekre visszavezethető feladatok Összetettebb feladatok intervallumos programozási tételekkel Felsorolós programozási tételek Felsorolós programozási tételekre visszavezethető feladatok Típus specifikáció Szekvenciális inputfile Egyedi felsorolók készítése Összefuttató felsoroló Kódolás elmélet és gyakorlat (C++ programozási nyelven) 2. Géptermi gyakorlatok Intervallumos programozási tételek megvalóstása Függvények használata C++ programozási nyelvben Összetettebb feladat megoldása intervallumos programozási tételek segítségével Hibakezelés Csomagokra bontás Struktúrák Osztályok A Deltoid osztály megvalósítása Szekvenciális I/O Összefuttató felsorolók megvalósítása Segédanyagok Felhasznált irodalom (Források)
3 1. Táblás gyakorlatok 1.1 Bevezetés Program terve: Specifikáció Visszavezetés Algoritmus (Struktogramm) Bevezető feladat: (Programozási alapismeret-ről átállás Programozás-ra) Adott két nem negatív egész szám, számítsuk ki a szorzatukat úgy, hogy a szorzás műveletét nem használjuk! Programozási alapismereteken tanult specifikációs módszer: Bemenet: Kimenet: Előfeltétel: Utófeltétel: Programozáson használt specifikációs módszer: állapottér (csak a bemeneti és kimeneti paramétereket tartalmazza) előfeltétel (megjelennek benne a bemenetekre vonatkózó kezdőértékek, amennyiben vannak) A bemenő adatokra kirótt feltételeket tartalmazzák utófeltétel A kimenő adatokra kirótt feltételeket tartalmazzák Ezek alapján a fentebbi feladatot így lehetne felírni: (Megjelennek a matematikában használt jelölések) ( - az adott kezdőértékek) 3
4 1. feladat: Az adott algoritmus alapján specifikáld a programot és határozd meg, hogy mit csinál! Egy program sorról sorra fut le. Vegyünk két tetszőleges számot és nézzük meg, hogy mi történik. Legyen Ekkor: Ha megnézzük az értékeit, akkor jelenleg: ez egy csere program, mely felcseréli az értékeit. Specifikáció: 4
5 2. feladat: Adott egy pozitív egész szám. Adjuk meg a hozzá legközelebb álló prímszámot! Specifikáció: Feladat: Specifikáld: Adott egy összetett természetes szám. Adjuk meg egy valódi osztóját! Feladat: Specifikáld: Adott egy összetett természetes szám. Adjuk meg az összes valódi osztóját! Megjegyzés: := összefűzés (asszociatív, bal oldali 0-elemes művelet. Feladat: Adott egy alakú egyenlet, melyben tetszőleges valós számok. Keressük az -et. nem lehet 0 ha és azonosság 5
6 Specifikáció: (Megjegyzés: karakter sorozat string) Más féle utófeltétellel felírva: 1.2 Intervallumos programozási tételek Az intervallumos programozási tételek megtalálhatóak Gregorics Tibor weboldalán. Cím: A segédanyagok menüpont Programozási tételek cím alatt (1.,2.,3. link) Továbbá az előadás fóliák között is található egy változat. 6
7 1. feladat 1.3 Intervallumos programozási tételekre visszavezethető feladatok Adott egy sakktábla és rajta két bástya, tegyünk le úgy egy harmadik bástyát, hogy mind a kettőt üsse! Lehetőségek: - Nem állhatnak azonos mezőn Specifikáció: ne legyenek azonos mezőn a bástyák Magyarázat Uf-hez: 1.sor: A logikai l változót definiáljuk, azaz leírjuk azokat a lehetős geket, amelyek teljesül se mellett igaz lesz a változó. Sorra: Ha a k t lehelyezett bástya x helyzete megegyezik, akkor az y rz kek távolsága nagyobb legyen, mint 1. (Az adott x vonalban ne állhasson egymás mellett a k t előre lehelyezett bástya) Vagy ugyan ez ne tört nhessen meg az y vonalában vagy (v gezetül) ne lehessen egymásra tenni a k t bástyát. (Ne állhasson egymáson a k t bástya. 2.sor: Megadja a módszer t, hogyha a logikai l változó rt ke igaz, akkor a programunknak mit kelljen csinálnia ahhoz, hogy ki tudja számolni a 3. bástya helyzet t. Itt ebben a sorban a fenti első ábrára ad megoldást. 3. sor: Negyedik ábrára nyújt megoldást 4. sor: Második ábrára nyújt megoldást. Továbbá a minimum/maximum-os megoldás kiküszöböli a harmadik ábrán látott rossz esetet. 7
8 Összegzés tételre visszavezethető feladatok 1. feladat: Egy nap folyamán n-szer megmértük a hőmérsékletet. Adjuk meg az átlaghőmérsékletet! Specifikáció: Visszavezet s: összegz s t telre Magyarázat: Specifikáció alapján vezettük vissza az összegz s t tel re. van egy n dimenziós tömbünk (h), aminek a dimenziója meg van határozva (ha 2, akkor 2 hőm rs klet szerepel benne, ha 3 akkor 3, ha n, akkor n ). A visszavezet s l nyege, hogy az általunk használt változókat a specifikációban, ráhúzzuk az adott t telben már tanult változókra. Jelen esetben a tömböt 1-től nig definiáltuk. (Lásd Utófelt tel szumma.) Így a programozási t telünkbe az m:=1-el. Továbbá az f(i)-t felváltja a h[i], mivel jelen esetben egy tömb adott rt keit szeretn nk összegezni.maga az s változót m g nem használtuk ki, ez rt hagyjuk, hogy az összeg változója ez legyen. (Látható az utófelt telből, hogy a:= s/n) továbbá a műveletünk a +, aminek a nulleleme/semleges 0. Ez rt ezeken nem változtatunk. Most a megfeleltet sek alapján kell megalkotnunk az algoritmust. Az Összegz s algoritmusát használjuk. A dolgunk csak annyi, hogy a visszavezet sben használt változásokat írjuk be az algoritmusba s a v g re hozzá tesszük az átlag számítást. Algoritmus: 8
9 2. feladat: Adjuk meg két vektor skalárszorzatát! Specifikáció: Visszavezet s: összegz s t telre Algoritmus: 3. feladat: Adott egy bankbetét indulóértéke. Évenként kamatos kamattal növekszik és évenként változó kamatlábbal n-évig. Mennyi lesz a betét végértéke? Segítség: Kamatos kamat: Specifikáció: (tizedes törtben kelljen megadni a kamatot (1-nél kisebb) ne százalékban) 9
10 Visszavezetés: Összegzés tételére Megjegyz s: *: szorzás művelet. Szorzás nulleleme/semleges eleme: 1 Algoritmus: A szorzás asszociativitása miatt Visszavezetés: Összegzés tételére Algoritmus: 10
11 Az x tartalmazza a betétet (végeredménynél) Visszavezetés: Összegzés tételére Utófeltétel módosítása: Visszavezetés: Összegzés tételre Algoritmus: Az első lépés az előfeltételünk miatt teljesül, így elhagyható. A továbbiak a második megoldásból adódnak. Így az algoritmusunk: Kiválogatásos feladatok 1. feladat: Adott n nap átlaghőmérséklete. Adott melyik napokon volt fagypont alatt a hőmérséklet. Vállogasd ki! (A) megoldás: Legyen az eredmény egy sorozat! Specifikáció: 11
12 Visszavezet s: összegz s t telre Megjegyzés: művelet az összefűzést szokta jelenteni. Semleges eleme/nulleleme a <>. Algoritmus: (B) megoldás: Legyen a napok tömb! Specifikáció: Visszavezet s: összegz s t telre Algoritmus: 12
13 Feladat (Érdekességből): Az alábbi feladat megoldások hatékonyságból rosszak, így nem ajánlatos ezeket a megoldásokat használni a való életben. Csupán azt szeretnék prezentálni, hogy ezt a feladatot is vissza lehetne vezetni az Összegzés tételre több féleképpen.! Legyen Utófeltételben szerepelhető megoldási részek (nem a teljes ): (a) Visszavezetésben: (b) (c) Számlálás tételre visszavezethető feladat 1. feladat: Adott n pont egy koordináta-rendszerben. Hány pont esik az x és hány pont esik az y tengelyre? Megoldás: Specifikáció: Magyarázat: 1. Hogyan képzeljük el az dimenziós tömböt és hogy helyezzük el benne az adatokat: Jelen esetünkben az 1. oszlop a pontok x koordinátáival, míg a 2. oszlop a pontok y koordinátáival van feltöltve. 2. Utófeltétel sorra: Mikor van az adott pont az x tengelyen, akkor ha az y=0. Az 1.-es pont alapján ez a mi esetünkben akkor teljesül, ha. Mikor van az adott pont az y tengelyen, akkor ha az x=0. Az 1.-es pont alapján ez a mi esetünkben akkor teljesül, ha. A számlálás tétel pedig az adott esetben azt számolja meg, hogy hányszor teljesül a feltétel. Ebből adódóan a mi algoritmusunkban két számlálás lesz. Mivel csak betű paraméterekben és a feltételben aprócska változásokban tér el, így a visszavezetést egyben végeztük el. 13
14 Visszavezetés: Számlálás tételre Algoritmus: Mivel ugyan azt az intervallumot járja be a két megszámlálás és a c-k egymástól függetlenek, így a két megszámlálást egymásba lehet tenni. Vegyes feladatok Adott f -n integrálható. n-részre kell bontani. Adjuk meg az integrál közelítőértékét! Specifikáció: n részre bontjuk Visszavezetés: Összegzés tételére 14
15 Algoritmus: Adott Add meg a páros értékek átlagát egy intervallumon. Specifikáció: Visszavezetés: Összegzés tételre és számlálás tételre (Későbbiekben lehet beágyazással is) Összegzés: Számlálás: Algoritmus: Jelenleg használt 15
16 Beágyazásos módszerrel: Feladat: Milyen programozási tételre vezetnéd vissza az alábbi feladatokat? 1. feladat: Adott egymás utáni nap átlaghőmérséklete. Hányszor csökkent több mint 5 - kal az átlaghőmérséklet? 2. feladat: Adott egy természetes szám és egy egész. Van-e az intervallumban prímszám, ha igen mi az? 3. feladat: Adott egy egész szám, prímszám-e? 4. feladat: Adott a síkon pont a koordinátáival, melyik esik a legtávolabb az origótól? 5. feladat: Adott szó, adjuk meg a leghosszabb betűvel kezdődő szót. 6. feladat: Adott két természetes szám, adjuk meg a legnagyobb közös osztójukat. 7. feladat: Adott egy függvény, és egy egész. Tudjuk, hogy az intervallumon monoton növekszik. Felveszi-e az intervallumon a értéket, ha igen hol? Megoldások: 1. feladat: Számlálás; 2. feladat: Lineáris keresés (Pesszimista); 3. feladat: Lineáris keresés (Optimista); 4. feladat: Maximum kiválasztás; 5. feladat: Feltételes maximum keresés; 6. feladat: Kiválasztás; 7. feladat: Logaritmikus keresés (vagy kevésbé hatékony Lineáris ker.) 16
17 Feladatok: 1. feladat: Adott egy természetes szám és egy egész. Van-e az intervallumban prímszám, ha igen mi az? Specifikáció: Részletes utófeltétel: Visszavezetés: Lineáris keresésre (pesszimista eldöntéssel) Algoritmus: 2. Feladat: Adott egy egész szám, prímszám-e? Specifikáció: Utófeltétel másik felírással: Visszavezetés: Lineáris keresés tételre (optimista eldöntéssel) 17
18 Algoritmus: 3. Feladat: Adott a síkon pont a koordinátáival, melyik esik a legtávolabb az origótól? Specifikáció: egyes mezőkre: - Pont record, ha, akkor az alábbi módon tudunk hivatkozni az Visszavezetés: Maximum kiválasztás (Maximum keresés) Algoritmus: 18
19 4. Feladat: Adott szó, adjuk meg a leghosszabb betűvel kezdődő szót. Specifikáció: Feltételben: Másik felírásban a feltétel lehetne: (prefix) Visszavezetés: Feltételes maximum keresés tételére Algoritmus: Feladat: Milyen tételekre vezethetőek vissza az alábbi feladatok? 1.Feladat: Határozzuk meg egy egész számokat tartalmazó tömb azon legkisebb értékét, amely -val osztva egyet ad maradékul. 2.Feladat: Adott nap átlaghőmérséklete és csapadékmennyisége. Mennyi azon napok átlaghőmérsékleteinek átlaga, amelyeken volt csapadék. 3.Feladat: Adottak az és vektorok, ahol y elemei az indexei közül valók. Keressünk az vektornak az -ban megjelölt elemei között páros számot. 4.Feladat: Igaz-e, hogy egy tömbben elhelyezett szöveg odafelé és visszafelé olvasva is ugyanaz? 5.Feladat: Adott a síkon néhány pont a koordinátáival, és egy körlemez a középpont koordinátáival és a kör sugarával. Adjunk meg egy olyan pontot, amely a körlemezre esik. 19
20 6.Feladat: Egymást követő napokon megmértük a déli hőmérsékletet. Hányszor mértünk 0 úgy, hogy közvetlenül utána fagypont alatti hőmérsékletet regisztráltunk? 7.Feladat: A Föld felsznének egy vonala mentén egyenlő távolságonként megmértük a terep tengerszint feletti magasságát (méterben), és a mért értékeket egy tömbben tároljuk. Melyik a legalacsonyabb hegycsúcs a mérési sorozatban. 8.Feladat: Egy hegyoldal hegycsúcs felé vezető ösvénye mentén egyenlő távolságonként megmértük a terep tengerszint feletti magasságát, és a mért értékeket egy vektorban tároljuk. Megfigyeltük, hogy ezek az értékek egyszer sem csökkentek az előző értékekhez képest. Igaz-e, hogy mindig növekedtek? 9. Feladat: Adott két tömb: egy és egy. Fektessük a -t folyamatosan egymás után, és ezt helyezzük az tömb mellé. Hány esetben kerül egymás mellé ugyanaz az érték? 10. Feladat: Állítsuk elő egy természetes szám összes valódi osztóját! Megoldások: 1. Feltételes maximum keresés; 2. Összegzés + Számlálás; 3. Lineáris keresés (pesszimista); 4. Lineáris keresés (Optimista); 5. Lineáris keresés (Pesszimista); 6. Számlálás; 7. Maximum keresés; 8. Lineáris keresés (Optimista); 9. Számlálás; 10. Összegzés ( összefűzés művelettel) 1. Feladat: Határozzuk meg egy egész számokat tartalmazó tömb azon legkisebb értékét, amely -val osztva egyet ad maradékul. Megoldás: Specifikáció: Visszavezetés: Feltételes maximum keresés tételére 20
21 Algoritmus: 2. Feladat: Adottak az és vektorok, ahol y elemei az indexei közül valók. Keressünk az vektornak az -ban megjelölt elemei között páros számot. Specifikáció: Visszavezetés: Lineáris keresés (pesszimista) tételére Algoritmus: 21
22 3. Feladat: Igaz-e, hogy egy tömbben elhelyezett szöveg odafelé és visszafelé olvasva is ugyanaz? Specifikáció: Visszavezetés: Lineáris keresés (optimista) tételre Algoritmus: 22
23 4. Feladat: Adott két tömb: egy és egy. Fektessük a -t folyamatosan egymás után, és ezt helyezzük az tömb mellé. Hány esetben kerül egymás mellé ugyanaz az érték? Specifikáció: Visszavezetés: Számlálás tételére Algoritmus: 23
24 1.4 Összetettebb feladatok intervallumos programozási tételekkel Feladat: Adott egy -es egészeket tartalmazó mátrix. Határozzuk meg a legnagyobb sorösszegű sort. Van-e csupa oszlop? Megoldás: Határozzuk meg a legnagyobb sorösszegű sort. - Képzeljünk el egy -es mátrixot: Az első paraméter (m) jelöli a mátrix sorainak a számát, míg a második paraméter (n) a mátrix oszlopainak a számát jelöli. - A feladatunk szövegéből is látszik, hogy ez már egy olyan feladat, amiben több programozási tétel is szerepel és ezek a tételek egymásba vannak ágyazva. Figyeljük meg a feladat szövegét. Emeljük ki belőle a kulcsszavakat: legnagyobb, sorösszeg. Mivel a legnagyobb esetén nem szeremel egyéb feltétel, ezért a Maximum keresés tételét kell majd alkalmaznunk, míg a sorösszeg kulcs szó, az összegzés tételére hívja fel a figyelmet. - Fontos kiemelni, hogy egymásba ágyazott tétel esetén a belső tételt egy függvénnyel definiáljuk a specifikációban és az algoritmusban is megjelenhet paraméter átadás formályában. Ilyenkor a függvényt külön definiáljuk a specifikáció során, míg a külső tételt tartalmazó algoritmusban felhasználjuk ezt a függvényt egy adott paraméter átadás folyamán vagy akár feltételként is, viszont ekkor oda kell figyelnünk arra, hogy ezt a paraméter átadást vagy feltételt egy külön algoritmusban tisztázni kell. (Olyan, mint ha a programunkban lenne egy belső program.) Ekkor az algoritmust úgy kell látnunk egyben, hogy a Belső tételt tartalmazó algoritmusunk benne szerepel a külső tételt tartalmazó algoritmusunk azon dobozában, ahol az adott paraméter átadás vagy feltétel megtalálható. 24
25 Specifikáció: alapértelmezett Megjegyzés: elhagyható, mivel -ben Most az utófeltételben specifikáltuk a külső tételt tartalmazó algoritmusunk, tehát még specifikálnunk kell a belső tételt tartalmazó bevezetett függvényünket: Visszavezetés: Maximum keresésbe ágyazott összegzés Maximum keresés: Összegzés: Algoritmus: Külső tételt tartalmazó algoritmus: Belső tételt tartalmazó algoritmus: Itt jól látható, hogy a külső algoritmusban az belső algoritmust. dobozka helyére kell betenni, a 25
26 Van-e csupa oszlop? Specifikáció: Megjegyzés: itt most az ind elhagyható Visszavezetés: Lineáris keresésbe ágyazott optimista lineáris keresés Lineáris keresés: Optimista lineáris keresés: Algoritmus: Megjegyzés: Amennyiben kihagyjuk a külső tételből az ind változót, úgy az aloritmusunkban is ki kell törölni azokat a dobozokat, amelyek az ind paramétert tartalmazzák! Külső tételt tartalmazó algoritmus: Belső tételt tartalmazó algoritmus: Itt jól látható, hogy a külső algoritmusban az belső algoritmust. dobozka helyére kell betenni, a 26
27 1. feladat: Adottak téglalapok. Igaz-e, hogy a kerületük növekvő számtani sorozatot alkot? Specifikáció: Visszavezetés: Optimista lineáris keresés tételére Algoritmus: 2. feladat: (Csak specifikáció) Megoldás: Kiválasztással 27
28 2. rész: Logaritmikus keresés sémája és működése Egy tömbre nézve, hogy működik: 1. Keressük a h=19-et: 2. Keressük a h=15-öt (Nincs ilyen elem a tömbbe most) nem teljesül a ciklus feltétel Nincs ilyen elem 28
29 A fenti képből adódóan látszik, hogy a Logaritmikus keresés sokszor hatékonyabb a Lineáris keresésnél. Egy 10 elemű tömb esetén, amennyiben a keresett érték az első helyen áll, úgy a Lineáris kereséssel hamarabb megtaláljuk. Amennyiben a tömbben a 2,3,4-es helyen található, úgy azonos hatékonysággal találja meg a két tétel. Amennyiben 5,6,7,8,9,10. helyen található a keresett elem úgy a Logaritmikus keresés a hatékonyabb. Miért hívják logaritmikus keresésnek? Azért, mert a maximális összehasonlítások száma: A fentebbi céltáblás feladat megoldása Logaritmikus kereséssel: Kihasználjuk, hogy rendezetten vannak megadva a tömb elemei és így visszavezethetjük a logaritmikus keresés tételére a feladatunkat. 29
30 3. rész: Egymásba ágyazott tételes feladatok 1. feladat: Adott egy egészeket tartalmazó tömb. Melyik szám fordul elő a leggyakrabban a tömbben? Specifikáció: Visszavezetés: Maximum keresésbe ágyazott számlálás Maximum keresés: (külső tétel) Számlálás: (belső tétel) 30
31 2. Feladat: Adott s szöveg és m minta. Adjuk meg, mely pozíciókra illesztkedik a minta. Brute force Specifikáció: Visszavezetés: Összegzés tételébe ágyazott Optimista lineáris keresés Összegzés: Optimista lineáris keresés: 31
32 Algoritmus: 1. Feladat: Adott egy koordinátarendszerben m pont. Melyik kettő van egymáshoz legközelebb? Specifikáció: 32
33 Visszavezetés: Minimum keresésbe ágyazott minimum keresés Külső minimum keresés: Belső minimum keresés: Algoritmus: 2. Feladat: Adott egy osztható 3-mal. -es egész mátrix, keressünk egy olyan sort, amelyben a legnagyobb páros szám Specifikáció: 33
34 Uf-et így is fel lehet írni: Visszavezetés: Lineáris keresésbe ágyazott Feltételes maximum keresés Külső tétel: Lineáris keresés Belső tétel: Feltételes maximum keresés Algoritmus: 34
35 3. Feladat: (Csak specifikációk és hatékonyság) Adott egy n hosszú egészekből álló vektor és egy k index. Van-e a vektor indexű elemei között olyan, amelyik nagyobb az összes indexű elemnél? Specifikáció: Kevésbé hatékony algoritmusok: - Lineáris keresésbe ágyazott optimista lineáris keresés - Hatékonysága: - Optimista lineáris keresésésbe ágyazott lineáris keresés - Hatékonysága: Hatékonyabb algoritmusok: - Maximum keresés és maximum keresés (Nem egymásba ágyazott!) - Hatékonysága: - Maximum keresés visszafelé - Hatékonysága: - Maximum keresés és optimista lineáris keresés (Nem egymásba ágyazott!) - Hatékonysága: - Maximum keresés és lineáris keresés (Nem egymásba ágyazott!) - Hatékonysága: 35
36 1.5 Felsorolós programozási tételek Az intervallumos programozási tételek megtalálhatóak Gregorics Tibor weboldalán. Cím: A segédanyagok menüpont Programozási tételek cím alatt (4. link) Továbbá az előadás fóliák között is található egy változat. 36
37 1. Feladat: 1.6 Felsorolós programozási tételekre visszavezethető feladatok Számoljuk meg egy n természetes szám páros valódi osztóinak számát - Fontos változás az intervallumos programozási tételekhez képest, hogy az utófeltételben nem köthetjük ki, hogy az előfeltétel teljesül - További fontos változás, ami főleg az algoritmusban fog látszani, hogy felsorolós tételek esetén nem számlálós ciklusunk van, emiatt nem szabad elfelejtenünk tovább léptetni a felsorolónkat. - Egyedi felsorolót (ami nem nevezetes) a visszavezetésben definiálnunk kell. Egy felsoroló esetén az alábbi funkciókat kell megadnunk: t.first(), t.current(),t.next(), t.end() Jelen esetünkben: t.first() t.next() t.current() t.end() továbbá, mivel megszámlálás tételről van szó, így Algoritmus: - Mindig a sablon tételünkre húzzuk rá az aloritmust 37
38 2. Feladat: - Halmazokra vonatkozó felsorós feladat Adott egy egész számokat tartalmazó halmaz, válogassuk ki a páros számokat egy halmazba, a páratlanokat egy vektorba. Jelölések halmazra: vagy Egészekből álló halmaz felsorolója: t.first() t.next() (mem: member) t.current() - determinisztikus: nem determinisztikus (véletlenszerű) : t.end() Összegzés tétele Algoritmus: 38
39 3. Feladat: - Mátrixos feladatok A felsoroló lehet: - sorfolytonos (1. sor elemei, 2. sor elemei,, m. sor elemei) - oszlopfolytonos (1. oszlop elemei, 2. oszlop elemei,, n. oszlop elemei) Sorfolytonos felsoroló: t.first() t.current() t.next() t.end() Nem sablon szerinti Uf és algoritmus: 39
40 Sablon szerinti Uf és algoritmus: Láthatjuk, hogy ez a megoldás nem annyira hatékony, ezért módosítsuk az algoritmusunk. Az így kapott eredmény egy sablon lesz. Ez egy olyan kivételes eset, ahol két egymásba ágyazott számlálós ciklust használunk. Negatívuma: - 1. elemet kétszer vizsgálja meg az algoritmus Pozitívum: Így is sokkal hatékonyabb, mint a fentebbi 4. Feladat: Egy négyzetes mátrix felső hárömszögében van-e prímszám? (A primszám-ra vonatkozó függvényt nem kell most külön definiálni. Jelölje prim()!) 40
41 Amennyiben ki szeretnénk használni a felsorolóknak azt a tulajdonságát, hogy a még el nem használt elemekre, folytatni szeretnénk tovább a lineáris keresést, akkor az alábbi módosításokat kell végrehajtani a specifikációban és az algoritmusunkban: 41
42 1.7 Típus specifikáció Feladat: Racionális számok típusának leírása lét egész hányadosaként. Absztrakt típus Implementáció - hogyan lesz az adott implementáció kivitelezve - invariáns tulajdonság Típus értékek Típus műveletei Műveletek az implementáció szintjén Absztrakt típus: Típus érték: Típus műveletei: +, -, *, / Implementáció szintje: Típus műveletei: Műveletek specfikálása: Megjegyzés: Amennyiben például a deltoid típust szeretnénk leírni, úgy az Absztrakt típus szinten a típus értékhez Deltoid ot írunk 42
43 A szekvenciális inputfile nevezetes felsorolója: t.first() : sf, df, f:read t.next(): sf, df, f:read t.current(): df t.end(): sd = abnorm 1.8 Szekvenciális inputfile Ahol sf a státusza f-nek (norm, abnorm); df a data-ja f-nek; f file Feladat: Adott egy banki nyilvántartás: - számlaszám - egyenleg egy szekvenciális inputfileban. Írjuk ki egy output fileba azokat, akik tartoznak, és mennyi az összes tartozás összege? - Két összegzés Visszavezetés: - f nevezetes felsorolóját használjuk
44 Algoritmus: Feladat: Adott egy szavakat tartalmazó fájl. Az első a -betűs szó után hány 3 betűs szó van? KERESÉS t.first() SZÁMLÁLÁS t.end() Specifikáció: felsoroló állapota most elhagyható Visszavezetés: Keresés: - f nevezetes felsoroló - Számlálás: - f nevezetes felsoroló - 44
45 Algoritmus: Keresés: - elem nem kell A c:=0 mellől a t.first() kimarad, mert folytatni szeretnénk a felsorolást. Feladat: Banki tranzkciók: - ügyfélkód - időpont - összeg A file rendezett ügyfélkód szerint. Adott ügyfél legkisebb betett összegét szeretnénk megtudni. KERESÉS t.first() FELT.MIN.KER t.end() A feltételes minimum keresés nem megy végig a fileon! Specifikáció: első olyan rec, ahol az ügyfél kódja megjelenik 45
46 Visszavezetés: Keresés: - f nevezetes felsorolója Felt.min.ker: - f nevezetes felsorolója; módosítással Algoritmus: 46
47 1.9 Egyedi felsorolók készítése Feladat: Adottak lakások adatai: - kerület - azonosító - ára - terület - tulajdonos Továbbá tudjuk, hogy a file rendezett kerület, azon belül lakás azonosító szerint. Melyik kerületben legdrágább az átlagos négyzetméter ár? Mivel ezen az állapottéren nem tudjuk megoldani a feladatot, ezért áttérünk egy új állapottére, amire rá tudjuk húzni az egyik programozási tétel sablonunkat. (Állapottér átalakításos feladat) Írjuk fel a feladat megoldásához szükséges Maximum keresés felsorolókra vonatkozó algoritmusát, a sablon alapján. Most bevezetünk egy selem: keratl típusú segédváltozót. Miután felírtuk az algoritmusunk, külön kell specifikálni a t.first(),t.next(),t.end() és t.current() metódusokat. A t.first(),t.next(),t.end() és t.current() metódusok gyakran belső tételek. Mivel sok esetben nehezebb őket specifikálni, ezért először az algoritmusukat rajzoljuk fel, majd csak utána specifikáljuk. t.first( ): Megjegyzés: Maximum keresés tétele miatt f nem üres, ezért sf-et nem fogjuk ellenőrizni. Továbbá legyen : elem keratl típusú változó. 47
48 Specifikáció: ezen belül szig. mon nő azonosító szerint. Megjegyzés: monoton nővekvő ker szerint, t.next( ): algo. első sora nélkül! Specifikáció: t.end( ): Feladat: Karakterekből álló szekvenciális inputfileban hány w betűt tartalmazó szó van? Specifikáció: 48
49 Új állapot tér: Algoritmus: t.first() = t.next( ) Algoritmusa és Specifikációja Specifikáció: 49
50 Feladat: Programozási verseny: Adott a fileban: - csapat azonosító - feladat sorszám - beküldési idő (hány perc telt el a kezdettől) Csapat azonosító szerint rendezett a file. Ki nyerte a versenyt? Nyerés: - Az a csapat, aki a legtöbb feladatot megoldotta - Ha két csapat ugyan annyi feladatot oldott meg, akkor a nyertes aki hamarabb oldotta meg Specifikáció: Eredeti állapot tér: Ezen az állapot téren nem tudjuk megoldani a feladatot, így átalakítjuk: Maximum keresés elem:eredmény típusú változó. 50
51 t. First( ): 1. csapat feldolgozása e: eredmény típusú sf,df a felsoroló folytatása t. Next( ): lásd.. Kevés idő miatt elfogadható ez a felírási mód a ZH-n Itt is lehet ezt a felírást használni! t. End( ): t. Current( ):elem egy példánya Ami még kell: a nagyobb függvény elkészítése!!! 51
52 1.10 Összefuttató felsoroló - Adott két rendezett sorozat, elő kell állítani a kimenetet Az alábbi minta feladatokon keresztül példákat láthatunk a metszet, a szimmetrikus differenciál és a különbség halmazműveletekre vonatkozó feladatokra egy-egy egyszerűbb példát, amilyen a tavalyi zárthelyi dolgozatban is találkozhattunk, továbbá egy nehezebb feladatot (record-os) az unió műveletre. 1. Feladat: Bemenet: két rendezett sorozat - első file tartalmazza az angolul tudó hallgatók neveit - második file tartalmazza a németül tudó hallgatók neveit Kik azok a hallgatók, akik pontosan egy nyelvet beszélnek? (Szimmetrikus differencia) Specifikáció: 52
53 Vagyarázatok a pirossal kiemelt részekről: : Általában vagyot használunk, mert mind a két fileunkat teljesen fel szeretnénk dolgozni. Abban az esetben, ha metszetet vagy különbséget kérdeznek a feladatban, akkor jobb az -t használni, mivel ezekben az esetekben ügyesebb és hatékonyabb nem feldolgozni a két fileunkat. Abban az esetben, ha elfogyott a németesek nevét tartalmazó fileunk vagy van még az angol neveket tartalmazó file-ban valami adatunk és névsor szerint előrébb található az adatban foglalt név, a németeseket tartalmazó file-unkhoz képest, akkor lépünk be ebbe az ágba. Itt da-t dolgozzuk fel és csak az a fileból olvasunk. : Mind két fileból feldolgozunk, ezért szükséges, hogy mind 2 file tartalmazzon adatot és ha olyan állapotba érünk, hogy az angolos és németes fileban is megtaláljuk ugyan annak a tanulónak a nevét, akkor lépünk be ebbe az elágazásba. Ekkor a feladat miatt (szimmetrikus differencia) a metszet nem számít, így nem iratjuk ki a hallgatót, csak mind két fileból beolvassuk a következő nevet. da > dn: (sa = abnorm) V (sn=norm da > dn) Abban az esetben, ha elfogyott az angolosok nevét tartalmazó fileunk vagy van még a német neveket tartalmazó file-ban valami adatunk és névsor szerint előrébb található az adatban foglalt név, az angolosok nevét tartalmazó file-unkhoz képest, akkor lépünk be ebbe az ágba. Itt dn-t dolgozzuk fel és csak az n fileból olvasunk. 53
54 2. Feladat: Bemenet: két rendezett sorozat - első file tartalmazza az angolul tudó hallgatók neveit - második file tartalmazza a németül tudó hallgatók neveit Kik azok, akik két nyelven beszélnek? (Metszet) Specifikáció: Algoritmus: 54
55 3. Feladat: Bemenet: két rendezett sorozat - első file tartalmazza az angolul tudó hallgatók neveit - második file tartalmazza a németül tudó hallgatók neveit Kik azok, akik csak angolul beszélnek? (Különbség) Specifikáció: Algoritmus: 55
56 4. Feladat: (Bonyolultabb) tavalyi zh-ban nem volt ilyen Adott egy zh-kat és egy pót zh-kat tartalmazó file. Az adott fileban: - EHA kód és pont szerepel EHA kód szerint szigorúan monoton növekvő sorrendben Mi lett az adott diák eredménye, ha a jobbik pontszám számít? (Unió) Specifikáció: 1. : A felírás: maximálisra. - vegyük a hallgatót a zh -ből Módosítsuk a pont rekordot, a zh és pót közül a 2.: Algoritmus: 56
57 2. Géptermi gyakorlatok 2.1 Intervallumos programozási tételek megvalóstása A lentebbi tételekben levő m,n bemeneti paraméterek, melyeket be kell olvasni az inputról. Például: int m,n; cout << Adja meg az intervallum also erteket: << endl; cin >> m; cout << Adja meg az intervallum felso erteket: << endl; cin n; Az alábbi kódokat a lefutás érdekében a főprogramba kell írni (main.cpp)- main függvény. Összegzés: #include <iostream> using namespace std; int s = 0; for(int i=0; i<=n;++i) s = s + f(i); // f(i) lehet pl egy tömb (azt is kell deklarálni!) Számlálás: #include <iostream> using namespace std; int c = 0; for(int i=m; i<=n;++i) if (Betha(i)) // Betha(i) egy feltétel (Boolean értéket ad vissza) c = c + 1; // vagy ++c; 57
58 Maximum kiválasztás: #include <iostream> using namespace std; int max = f(m); // Itt f() lehet szintén egy tömb, ekkor dekralárni kell! int ind = m; for(int i=m+1; i<=n;++i) if (f(i) > max) max = f(i); ind = i; Kiválasztás: #include <iostream> using namespace std; int i; for(i=m;!betha(i);++i); // Betha(i) egy feltétel (Boolean értéket ad vissza) Lineáris keresés: #include <iostream> using namespace std; int ind = 0; bool l = false; for(int i=m;!l && i<=n; ++i) l = Betha(i); ind = i; 58
59 Feltételes maximum keresés: #include <iostream> using namespace std; int ind = 0; bool l = false; int max = 0; for (int i=m;i<=n;++i) if(!beta(i)); else if(beta(i) && l) if(max<f(i)) ind=i; max=f(i); else l=true; max=f(i); ind=i; 59
60 2.2 Függvények használata C++ programozási nyelvben Bevezető: Hogyan deklarálhatunk C++ nyelven egy függvényt: [VISSZATÉRÉSI ÉRTÉK] [FÜGGVÉNY NEVE]([PARAMÉTEREK]); Hogyan definiálunk egy függvényt C++ nyelven: [VISSZATÉRÉSI ÉRTÉK] [FÜGGVÉNY NEVE]([PARAMÉTEREK]) [PARANCSOK]; Hogy használhatunk függvényeket a főprogramunkban? (main.cpp) [FÜGGVÉNY DEKLARÁCIÓ] int main() //Ide kerülhet a függvényhívás is : [FÜGGVÉNY NEVE]([SZÜKSÉGES PARAMÉTEREK]); [FÜGGVÉNY DEFINÍCIÓ] Miért jó? Átláthatóbb lesz a program, továbbá a későbbiekben egyszerűbb lesz csomagokra bontani a programunkat. 1. típus: Egyes programozási nyelvekben eljárásként szereplő függvény. Egy olyan függvény, melynek nincsen visszatérési értéke. (void) void Kiír() std::cout << "Hello World!" << std:endl; 60
61 2. típus: Olyan függvények, melyeknek van visszatérési értékük. 1. példa: std::string Kiir() return "Hello World!"; 2. példa: int Szam() int m = 0; return m; Arra kell figyelnünk, hogy ha int visszatérési értéket vár a függvényünk, akkor a return kulcsszó után olyan változót kell írnunk, ami megfelelő típusú. Paraméterátadás A C++-ban két féle paraméterátadási mód van. 1. Érték szerinti, az átadott típusból másolat készül a memóriában, az eredeti értéket nem módosítja a függvény. int Osszeg(int a, int b) return a + b; Itt a és b összegével tér vissza a függvény. 2. Cím szerinti, paraméterként az átadott típus referenciája szerepel, a függvény módosíthatja a paramétereket. void Osszeg(int a, int b, int &c) c = a + b; Itt a harmadik paraméter nem "c" értéke, hanem a memóriában elfoglalt címe. 61
62 Lokális változók A függvények belsejében (illetve a programban lévő blokkokon belül) deklarált változókat lokális változóknak nevezzük. Ez a gyakorlatban azt jelenti, hogy a láthatóságuk és élettartalmuk a függvényen (blokkon) belülre korlátozódik. A lokális változók a függvényhívás végén automatikusan megsemmisülnek és kívülről nem hivatkozhatóak. //Két változó értékének cseréje void swap(int &a, int &b) int tmp = a; //nem dinamikusan (statikusan) lefoglalt változó a = b; b = tmp; tmp = 10; //Hiba, tmp nem hivatkozható a hatókörén (a függvény blokkján) kívül A dinamikus objektumokra mutató pointerek szintén megsemmisülnek a hatókörükből kikerülve, de az objektum maga nem. int * createarray(int n) int * v = new int [n]; return v; //A függvény egy n elemű tömbre mutató pointerrel tér vissza int * t = createarray(10); t[0] = 12; //Működik, most t mutat a tömbre v[1] = 2; //Hiba, v már nem létezik Ha nem gondoskodunk a blokkon belül létrehozott dinamikus objektum külső elérhetőségéről, az érvényes hivatkozás nélkül a memóriában marad, azaz memóriaszivárgás keletkezik. void func() int * v = new int [10]; v[0] = 12; /*Hiba, a tömbre mutató pointer már nem létezik, és más sem mutat rá -> memóriaszivárgás*/ 62
63 2.3 Összetettebb feladat megoldása intervallumos programozási tételek segítségével #include <iostream> #include <vector> #include <fstream> // fstream kell nekünk, hogy fájlt tudjunk kezelni using namespace std; // továbbfejlesztettük a beolvasás műveletet, hogy ne csak sima cin-ről olvasson be hanem bármilyen ios beviteli cuccról void beolvas(vector<int> &myvector, istream &_stream); // az összegzés helyett produktum int szorzat(const vector<int> &myvector); // Ezt a függvényt adjuk majd át a kereséseknek felételként // eldöntjük, hogy a szám páros-e és logikai értékkel térünk vissza (bool) bool parose(int a); //kiválasztás tétele, vektoron végigmegyünk és kiválasztjuk az első béta feltételnek megfelelő paramétert int kivalaszt(const vector<int> &_vektor, bool beta (int)); // keresés - az átadott vektoron végigmegyünk és visszatérünk vele, hogy találtunk-e béta feltételnek megfelelő értéket, ha igen akkor index változóba írjuk a választ // index változót tudjuk módosítani, mivel & jel előtte van bool kereses(const vector<int> &_vektor, bool beta (int), int &index); int main () //létrehozzuk a fájl beolvasására szolgáló változót fstream filestream; filestream.open ("test.txt");// megnyitjuk a fájlt vector<int> myvector; int index; //int myint; beolvas(myvector,filestream); // a módosított beolvas függvénnyel beolvastatjuk a file-ból az adatokat //mivel a keresésnek visszatérési értéke logikai, hogy találtunk-e feltételnek megfelelőt, ezért egy if-be nyugodtan berakhatjuk, mivel az if logikai eredményt vár //a fetltétel függvényt csak egyszerűen átadjuk (zárójel nélkül, mert ha zárójelet írunk akkor az a függvény meghívását jelentené) if ( kereses(myvector,parose,index) ) //hozzáadunk az index-hez egyet, mert a felhasználó számára nem a 0-tól indexelés a logikus 63
64 cout << "elemszam: " << (index+1) << endl; else cout << "nincs talalat" << endl; cout << "sorzat: " << szorzat(myvector) << endl; return 0; void beolvas(vector<int> &myvector, istream &_stream) myvector.clear();//kiürítjük a vektort int myint; do _stream >> myint;// az input stream-ről (fstream vagy cin) beolvasunk egy int-et if(myint!=0)//csak akkor adjuk hozzá a vektorhoz, ha nem 0-t írt be myvector.push_back (myint); while (myint!= 0); int szorzat(const vector<int> &myvector) int ossz; ossz=1;//összegzés műveletéhez képest itt 1 az alap érték, mivel 0*a = 0 és 1*a=a minden a-ra for (int i=0; i<myvector.size(); ++i) ossz=ossz*myvector[i]; return ossz; bool parose(int a) // % a maradékos osztás, és ha elosztunk egy a számot b-vel és a maradék 0 akkor b osztója a-nak return (a%2 == 0); /* if (a%2 == 0) return true; else return false; */ 64
65 int kivalaszt(const vector<int> &_vektor, bool beta (int)) int i = 0; // egy ciklust csinálunk, ami addig megy amíg a feltételnek meg nem felel az aktuális elem while (!beta(_vektor[i])) // a magban csak léptetünk semmi más dolgunk nincs i++; //i=i+1; return i; bool kereses(const vector<int> &_vektor, bool beta (int), int &index) int i = 0; // szintén ciklussal addig megyünk amíg a feltételnek meg nem felel az aktuális elem // csak hozzátesszük, hogy ha a ciklus végére ér akkor álljon le while (!beta(_vektor[i]) && i<_vektor.size()) i++; if (i >= _vektor.size())// ha a ciklus azért állt le, mert a végére értünk akkor nem találtunk feltételnek megfelelő elemet return false;//tehát hasissal térünk vissza és index-et nem módisítjuk else // ha viszont megtaláltuk akkor index = i; // index-ben eltároljuk hogy hol találtuk return true;// igazzal térünk vissza 65
66 2.4 Hibakezelés #include <iostream> #include <vector> using namespace std; enum HibakNEGATIV_REKORD,NEGATIV_ERTEK; void beolvas(vector<int> &pl); int main() vector<int> T; try beolvas(t); catch(hibak e) switch(e) case NEGATIV_REKORD: cout << "A rekordszam negativ!"; break; case NEGATIV_ERTEK: cout << "Az egyik ertek negativ!"; break; return 0; void beolvas(vector<int> &pl) int n; cin >> n; if(n < 0)throw NEGATIV_REKORD; pl.resize(n); for(int a=0;a<pl.size();++a) cin >> pl[a]; if(pl[a] < 0 pl[a] > 50)throw NEGATIV_ERTEK; Megjegyzés: Az enum olyan adattípust jelöl, melynek lehetséges értékei egy konstanshalmazból kerülnek ki. A fordító balról jobbra haladva nullával kezdve egész értékeket feleltet meg a felsorolt konstansoknak. Ha egy konstansnak egész értéket adunk, akkor a következő elemek ettől a kiindulási értéktől kapnak értéket. 66
67 2.5 Csomagokra bontás Többek között a programkód átláthatósága és az újra felhasználhatóság érdekében a programjainkat csomagokra bontjuk. A félév során két féle csomag típust használunk. Az egyik csomagtípus az úgynevezett Header file-ok típusa. Ezekben a fileokban elsősorban függvény és típus deklarációkat tárolunk. Leggyakrabban használt kiterjesztése ezen fileoknak a *.h. A második típusú csomagban pedig a függvény definíciókat tároljuk. Ezen file-ok kiterjesztése pedig *.cpp. Első lépésként térjünk el a fentebb megszokott programozási módszertől és a függvények deklarációját tároljuk egy fuggveny.h fileban, míg a maradék kódot hagyjuk benne a main.cpp ben. Ahhoz, hogy leforduljon a megírt prógramunk figyelmeztetnünk kell a fordításért felelős egységet (linker-t), hogy hol találja meg a deklarációkat. Már korábban is használtunk ilyen figyelmeztetéseket, csak akkor a számítógépre már valahova feltelepített könyvtárakat rendeltük hozzá a programunkhoz. Lásd #include <iostream>. Amennyiben < > között szerepel az elérni kívánt file / könyvtár, úgy a gépen bárhol lehet a könyvtár a linker megkeresi és beteszi. Amennyiben a main.cpp függvénnyel 1 mappába tesszük a header file-ainkat, úgy egy másik módszert használunk az #include fuggvenyek.h kódot. Ekkor a linker a project könyvtárban keresi meg autómatikusan a fileunkat. Visszatérve a feladatunkhoz annyit kell tennünk, hogy a main. cpp be felülre beírjuk az #include fuggvenyek.h kódot. A fuggvenyek.h fileunkban alábbi sorok láthatóak: #ifndef TETEL_H_INCLUDED #define TETEL_H_INCLUDED... #endif // TETEL_H_INCLUDED Ez a kód segít abban, hogy elkerüljük az összeférhetetlenséget. Második lépésben bontsuk még tovább a programunkat. A fuggveny.h Header fileban tároljuk a függvények deklarációját A fuggvenyek.cpp file-ban a Függvények definícióját A main.cpp file-ban pedig a főprogramunkat Innentől kezdve a már megírt fuggveny.h és fuggveny.cpp t egyszerűen fel tudjuk használni későbbi projectekben is. 67
68 2.6 Struktúrák A programozás során gyakran találkozhatunk olyan esetekkel, amikor több különböző adatot egy egységként kell kezelnünk, például egy könyvnek van szerzője, címe, kiadója, stb. A C++ nyelvben a struktúra (struct) több különböző típusú adatok együttese: //a Konyv struktúra definíciója struct Konyv std::string cim; std::string iro; int ev; ; A "string" típus karaktersorozatot jelöl, és a standard névtérben helyezkedik el. A struktúrák adattagjaira a pont operátor (.) segítségével hivatkozhatunk és adhatunk nekik értéket: //Konyv struktúra megadása tagonként Konyv b; //típusként kezelhetjük Létrehozunk egy Konyv típust, b neven b.cim = "A C++ programozási nyelv"; b.iro = "Bjarne Stroustrup"; b.ev = 2005; //Konyv kezdőértékadása Book c = "A C++ programozási nyelv", "Bjarne Stroustrup", 2005; //A c azonos tartalmú b-vel. Amennyiben létrehozunk egy ilyen típust írhatunk olyan függvényeket is, melyeknek visszatérési értéke Konyv lesz. 68
69 2.7 Osztályok A C++ az objektum-orientált programozás megvalósításához egyrészt kibővíti a struktúrákat, másrészt bevezeti a class típust. Mindkettő alkalmas osztály definiálására. Egy osztály (class) adattagjának háromféle elérhetősége lehet: - public, nyilvános mindenki számára elérhető - private, privát csak az osztályon belülről lehet elérni, illetve barát osztályok és függvények - protected, védett a származtatott osztályok számára közvetlen elérhetőséget biztosít. A private tagok a leszármazottakból csak az ősosztály tagfüggvényeiből (metódusok) elérhetőek. A kurzus során csak a public és private elérhetőséget használjuk. //Egy egyszerű osztály class EgyszeruKonyv public: EgyszeruKonyv (std::string param_cim) cim = param_cim; private: std:string cim; ; Konstruktorok: Az objektumok kezdeti értékadásaiért (inicializálás) speciális tagfüggvények a konstruktorok felelnek. A konstruktor olyan tagfüggvény amelynek neve megegyezik az osztályéval és nem rendelkezik típussal. A fordító minden olyan esetben mikor egy objektum létrejön meghívja a konstruktorát. Egy osztálynak bármennyi konstruktora lehet a szignatúrától függően. Alapértelmezés szerint minden osztály két konstruktorral rendelkezik, a paraméter nélküli (default) és a másoló (copy) konstruktorral. Ha saját konstruktort készítünk, attól fogva az alapértelmezett nem lesz elérhető. A konstruktorok egyaránt lehetnek public, private vagy protected elérésűek. A csak private konstruktorokat tartalmazó osztályt rejtett osztálynak nevezzük. Példa default konstruktorra: class Halmaz public: Halmaz ()ms=10; size=0; tomb = new int[ms]; private: ; 69
70 Példa copy konstruktorra: class Halmaz public: Halmaz (const Halmaz& o) private: ; Destruktorok: Az objektumok által felhasznált memória mindaddig lefoglalt marad, míg fel nem szabadítjuk. Erre a célra a C++ biztosít számunkra egy speciális tagfüggvényt, a destruktort. Hasonlóan a konstruktorhoz, a destruktornak sincs visszatérési értéke. A destruktornak nem lehetnek paraméterei. A destruktor nevét az osztály nevéből és a hullám karakterből (tilde: ~) képezzük: class Halmaz public: Halmaz () // Konstruktor ~Halmaz() // Destruktor private: ; Ha nem definiálunk destruktort az osztályunkban, a fordító automatikusan létrehozza. A destruktor minden olyan esetben meghívódik amikor az objektum érvényessége megszűnik. Kivételt képeznek a dinamikusan (a new operátorral) létrehozott példányok, amelyeknek csak a megfelelő delete operátor hívhatja meg a destruktorát. A destruktor közvetlenül is hívható. Dinamikus tömbök esetén a konstruktorok az indexek növekvő sorrendjében hívódnak meg, a destruktorok éppen fordítva, de csak a delete[] operátor alkalmazásával. A statikus tömbök ugyanígy törlődnek, de automatikusan (tehát nem kell delete), amint kikerülnek a hatókörükből. A nem megfelelő delete használatával a legjobb esetben is csak a tömb első eleme semmisül meg. Operátorok: A C++-ban nem vezethetünk be új operátorokat, de majdnem mindegyiket túlterhelhetjük. Általában meghatározott számú operandusuk lehet (egy, kettő vagy három), kivéve a függvényhívás operátor (operator()), amelynek bármennyi operandusa lehet. Példa gyakran használt operátorokra: +,-,*,/,&,= stb. 70
71 class Complex public: private: Complex operator+(const Complex& lhs, const Complex& rhs) return Complex(lhs) += rhs; ; Operátor túlterhelés: A közönséges függvényekhez hasonlóan a legtöbb operátort is túl lehet terhelni, amely a felhasználói típusok kényelmesebb, szabványosabb használatát teszi lehetővé Például a kiíró operátor (<<) túlterhelése: class Complex public: friend std::ostream& operator<<(std::ostream& stream, const Complex& z); private: return Complex(lhs) += rhs; ; //az ostream definíciójához nem férünk hozzá, de //operator<<(ostream&, const complex&)-t definiálhatunk std::ostream& operator<<(std::ostream& stream, const Complex& z) return (stream << '(' << z.re << ", " << z.im << ')'); Ezzel például a közönséges szöveg kiírása mellett egy teljesen megírt Complex class esetén egy komplex számot is rögtön ki tudunk írni: //Ezután az operátort egyszerűen használhatjuk: Complex c(1.0, 4.6); std::cout << c; //A kimeneten megjelenik: (1.0, 4.6) 71
72 Amennyiben csomagokban dolgozunk a classokat egy header file-ban deklaráljuk, míg a classokon belül található metódusokat külön cpp fileban. Ekkor fontos, hogy az adott cpp filehoz hozzá kell rendelnünk a Header filet, továbbá a függvény definíciókban jeleznünk kell, hogy az adott metódusok az osztályhoz tartoznak. Ezt a :: operátorral tudjuk megtenni. Példa: halmaz.h #ifndef HALMAZ_H_INCLUDED #define HALMAZ_H_INCLUDED class Halmaz public: Halmaz();// Konstruktor deklarációja ~Halmaz();// Destruktor deklarációja private: ; #endif // HALMAZ_H_INCLUDED halmaz.cpp #include <iostream> #include halmaz.h Halmaz::Halmaz() // Konstruktor definíciója Halmaz::~Halmaz() // Destruktor definíciója 72
73 2.8 A Deltoid osztály megvalósítása Megjegyzés: Programozás beadandó feladat. Ne másold le, mert sikertelenül teljesíted a kurzust! A kód néhány helyen megtört a dokumentumban. Próba esetén figyelj rá! Feladat 2. beadandó (A szakirány) - 8. feladat Valósítsa meg a deltoidok típusát! egy deltoidnak le lehessen kérdezni az oldalainak hosszát, a szögeit, átlóinak hosszát, a területét, a kerületét. Reprezentálja a deltoidokat az átlójuk hosszával és azzal az aránnyal, ami megmutatja, hogy hol metszi az egyik átló a másikat! A főprogram adjon lehetőséget a típus műveleteinek kipróbálására! Egy menű segítségével lehessenegy deltoidot megadni, majd annak paramétereit megtekinteni. 73
74 Deltoid típus Absztrakt típus: - Típus érték: Deltoid - Típus műveletek: * (nagyítás), / (kicsinyítés), == (egybevágóság vizsgálata) - Műveletek és egyes metódusok specifikálása: *: /: ==: = terület(): kerület(): oldalak() és atlok(): szogek(): oldalak(): Implementációs szint: 74
75 Implementáció Deltoid osztálya: A Deltoid típus megvalósításánál kihasználjuk a C++ nyelv azon lehetőségét, hogy az operátorokat felül lehet definiálni, és ennél fogva lehetőségünk nyílik egy teljes deltoidot kiiratni továbbá egyéb műveleteket végezni egy adott deltoiddal. deltoid.h class Deltoid private: float e; // A deltoid egyik átlója float f; // A deltoid másik átlója float arany; // A két átló metszéspontjának aránya public: enum HibakE_ATLO_ERROR, F_ATLO_ERROR, ARANY_ERROR, REL_EF_ERROR, OP_N_ERROR, OP_K_ERROR; Deltoid(); // Konstruktor Deltoid(float e0, float f0, float arany0); void sete(float tmp); void setf(float tmp); void setarany(float tmp); Oldalak oldalak(); // Meghatározza adott adatokból a deltoid oldalait Atlo atlok(); // Meghatározza adott adatokból a deltoid átlóinak a hosszát Szogek szogek(); // Meghatározza adott adatokból a deltoid szögeit float kerulet(); // Meghatározza adott adatokból a deltoid kerületét float terulet(); // Meghatározza adott adatokból a deltoid Területét friend Deltoid read_from_console(); friend std::istream& operator>> (std::istream& inp, Deltoid& b); // Beolvasó operátor friend std::ostream& operator<< (std::ostream& oup, const Deltoid& b); // Kiíró operátor friend bool operator== (const Deltoid& a, const Deltoid& b); // Egybevágósági vizsgálat Deltoid operator* (float konst); // Egy deltoid nagyítása Deltoid operator/ (float konst); // Egy deltoid kicsinyítése ; ~Deltoid(); // Destruktor 75
76 deltoid.cpp #include <iostream> #include <math.h> #include "deltoid.h" #define PI using namespace std; Deltoid::Deltoid() e = 0; f = 0; arany = 0; Deltoid::Deltoid(float e0, float f0, float arany0) if (e0 <= 0)throw E_ATLO_ERROR; if (f0 <= 0)throw F_ATLO_ERROR; if (arany0 < 0 arany0 > 1)throw ARANY_ERROR; e = e0; f = f0; arany = arany0; void Deltoid::setE(float tmp) if (tmp > 0) e = tmp; void Deltoid::setF(float tmp) if (tmp > 0) f = tmp; void Deltoid::setArany(float tmp) if (tmp >= 0 tmp <= 1) arany = tmp; 76
77 Oldalak Deltoid::oldalak() Oldalak del; float tmp1 = (f*arany); float tmp2 = (f - tmp1); float tmp3 = (e / 2); del.a = sqrt(pow(tmp1, 2) + pow(tmp3, 2)); del.b = sqrt(pow(tmp2, 2) + pow(tmp3, 2)); return del; Atlo Deltoid::atlok() Atlo delto; delto.ee = e; delto.ff = f; return delto; Szogek Deltoid::szogek() Szogek delt; float tmp1 = (f*arany); float tmp2 = (f - tmp1); float tmp3 = (e / 2); float sztmp1 = tmp1/tmp3; delt.alfa = atan(sztmp1) * (360 / PI); delt.gamma = delt.alfa; float sztmp2 = tmp3/tmp1; delt.beta = atan(sztmp2) * (360 / PI); float sztmp3 = tmp3/tmp2; delt.delta = atan(sztmp3) * (360 / PI); return delt; float Deltoid::kerulet() Oldalak del; float tmp1 = (f*arany); float tmp2 = (f - tmp1); float tmp3 = (e / 2); del.a = sqrt(pow(tmp1, 2) + pow(tmp3, 2)); del.b = sqrt(pow(tmp2, 2) + pow(tmp3, 2)); float k = 2 * (del.a + del.b); return k; 77
78 float Deltoid::terulet() return ((e*f)/2); Deltoid Deltoid::operator* (float konst) if (konst < 1)throw Deltoid::OP_N_ERROR; float e2 = e * konst; float f2 = f * konst; float arany2 = arany; Deltoid szr1(e2, f2, arany2); return szr1; Deltoid Deltoid::operator/ (float konst) if(konst <= 0 konst > 1)throw Deltoid::OP_K_ERROR; float e2 = e * konst; float f2 = f * konst; float arany2 = arany; Deltoid szr1(e2, f2, arany2); return szr1; istream& operator>> (istream&inp, Deltoid& b) inp >> b.e; inp >> b.f; inp >> b.arany; return inp; ostream& operator<< (ostream& oup, const Deltoid& b) oup << "("; oup << b.e; oup << ", "; oup << b.f; oup << ", "; oup << b.arany; oup << ")"; return oup; 78
79 bool operator== (const Deltoid& a, const Deltoid& b) if(&a == &b) return true; float x1 = a.arany; float x2 = b.arany; float tmp = x1 + x2; bool egybevago = false; if(a.e==b.e) if(a.f==b.f) egybevago = (tmp == 1); return egybevago; Deltoid::~Deltoid() read.h #ifndef READ_H_INCLUDED #define READ_H_INCLUDED #include <iostream> #include "deltoid.h" Deltoid read_from_console(); // Konzolos beolvasás #endif // READ_H_INCLUDED read.cpp #include <iostream> #include "read.h" #include "deltoid.h" using namespace std; Deltoid read_from_console() cout << "Kérem adja meg a deltoid adatait az alábbi módon: e f arány " << endl; cout << "(e - a deltoid rövidebbik átlója" << endl; cout << "f a deltoid hosszabbik átlója" << endl; cout << "arány - a két átló metszéspontjának az aránya (0-1 közötti érték))" << endl; Deltoid d1; cout << "A deltoid: " << endl; cin >> d1; if (d1.e <= 0)throw Deltoid::E_ATLO_ERROR; if (d1.f <= 0)throw Deltoid::F_ATLO_ERROR; if (d1.f < d1.e)throw Deltoid::REL_EF_ERROR; if (d1.arany < 0 d1.arany > 1)throw Deltoid::ARANY_ERROR; return d1; 79
3. 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
Programozá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
Programozá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,
1. 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
Bánsághi Anna 2014 Bánsághi Anna 1 of 68
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 3. ELŐADÁS - PROGRAMOZÁSI TÉTELEK 2014 Bánsághi Anna 1 of 68 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar
PROGRAMOZÁS tantárgy Gregorics Tibor egyetemi docens ELTE Informatikai Kar Követelmények A,C,E szakirány B szakirány Előfeltétel Prog. alapismeret Prog. alapismeret Diszkrét matematika I. Óraszám 2 ea
Programozá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,
NAGY KRISZTIÁN. Programozás. a Modellező informatikus szakirányon 1. KÖTET. 4. kiadás
NAGY KRISZTIÁN Programozás a Modellező informatikus szakirányon 1. KÖTET 4. kiadás A jegyzet módosítások nélkül szabadon terjeszthető! A jegyzetet értékesíteni szigorúan tilos! Tartalomjegyzék 0.1 Szimbólum
Programozás Minta programterv a 2. házi feladathoz 1.
Programozás Minta programterv a. házi feladathoz 1. Gregorics Tibor. beadandó/0.feladat 01. január 11. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy szöveges állományban bekezdésekre tördelt szöveg
C++ 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
Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 10. gyakorlat C++: alprogramok deklarációja és paraméterátadása 2011.11.22. Giachetta Roberto groberto@inf.elte.hu
A feladat lényege egy felhasználói típusnak a zsák típusnak a megvalósítása.
Feladat Készítsen egy egész számokat tartalmazó zsák típust! A zsákot dinamikusan lefoglalt tömb segítségével ábrázolja! Implementálja a szokásos műveleteket (elem betevése, kivétele, üres-e a halmaz,
Programozá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
Bevezetés a programozásba I.
Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk
Maximum kiválasztás tömbben
ELEMI ALKALMAZÁSOK FEJLESZTÉSE I. Maximum kiválasztás tömbben Készítette: Szabóné Nacsa Rozália Gregorics Tibor tömb létrehozási módozatok maximum kiválasztás kódolása for ciklus adatellenőrzés do-while
500. 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
HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport
10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)
Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek
Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő
Globá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
Felvételi tematika INFORMATIKA
Felvételi tematika INFORMATIKA 2016 FEJEZETEK 1. Természetes számok feldolgozása számjegyenként. 2. Számsorozatok feldolgozása elemenként. Egydimenziós tömbök. 3. Mátrixok feldolgozása elemenként/soronként/oszloponként.
ELEMI PROGRAMOZÁSI TÉTELEK
ELEMI PROGRAMOZÁSI TÉTELEK 1. FELADATMEGOLDÁS PROGRAMOZÁSI TÉTELEKKEL 1.1 A programozási tétel fogalma A programozási tételek típusalgoritmusok, amelyek alkalmazásával garantáltan helyes megoldást adhatunk
Programozás C++ -ban
Programozás C++ -ban 4. Bevezetés az osztályokba 4.1 Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több
Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter
Programozás(A szakirány) II. beadandó feladat 2014.05.05. Farkas András HP6S15 fafee@fafeecorp.com 1. csoport Veszprémi Anna / Hudoba Péter Feladat: Egy szöveges állományban bekezdésekre tördelt szöveg
Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás, rendezések 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok és programozási tételek
Statikus 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
INFORMATIKA javítókulcs 2016
INFORMATIKA javítókulcs 2016 ELMÉLETI TÉTEL: Járd körbe a tömb fogalmát (Pascal vagy C/C++): definíció, egy-, két-, több-dimenziós tömbök, kezdőértékadás definíciókor, tömb típusú paraméterek átadása alprogramoknak.
Visual C++ 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.
Visual C++ 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. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat
Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1
Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1 Készítette: Gipsz Jakab Neptun-azonosító: A1B2C3 E-mail: gipszjakab@vilaghalo.hu Kurzuskód: IP-08PAED Gyakorlatvezető
Programozási Nyelvek: C++
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();
OAF 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
Programozá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
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 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
Bevezetés a programozásba. 8. Előadás: Függvények 2.
Bevezetés a programozásba 8. Előadás: Függvények 2. ISMÉTLÉS Helló #include using namespace std; int main() cout
Bevezetés a programozásba I.
Bevezetés a programozásba I. 3. gyakorlat Tömbök, programozási tételek Surányi Márton PPKE-ITK 2010.09.21. ZH! PlanG-ból papír alapú zárthelyit írunk el reláthatólag október 5-én! Tömbök Tömbök Eddig egy-egy
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
Bánsághi Anna 2014 Bánsághi Anna 1 of 33
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 4. gyakorlat PLanG: 2011.10.04. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Fájlok
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
Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 2. előadás Adattípusok megvalósítása egységbe zárással 2014.02.17. Giachetta Roberto groberto@inf.elte.hu
Felvételi vizsga mintatételsor Informatika írásbeli vizsga
BABEȘ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR A. tételsor (30 pont) Felvételi vizsga mintatételsor Informatika írásbeli vizsga 1. (5p) Egy x biten tárolt egész adattípus (x szigorúan pozitív
10. gyakorlat Struktúrák, uniók, típusdefiníciók
10. gyakorlat Struktúrák, uniók, típusdefiníciók Házi - (f0218) Olvass be 5 darab maximum 99 karakter hosszú szót úgy, hogy mindegyiknek pontosan annyi helyet foglalsz, amennyi kell! A sztringeket írasd
8. gyakorlat Pointerek, dinamikus memóriakezelés
8. gyakorlat Pointerek, dinamikus memóriakezelés Házi ellenőrzés Egy számtani sorozat első két tagja A1 és A2. Számítsa ki a sorozat N- dik tagját! (f0051) Egy mértani sorozat első két tagja A1 és A2.
Szövegek C++ -ban, a string osztály
Szövegek C++ -ban, a string osztály A string osztály a Szabványos C++ könyvtár (Standard Template Library) része és bár az objektum-orientált programozásról, az osztályokról, csak később esik szó, a string
Felhaszná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
Bevezetés a programozásba. 9. Előadás: Rekordok
Bevezetés a programozásba 9. Előadás: Rekordok ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double terulet(double
Osztály és objektum fogalma
Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály
Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 4. gyakorlat PLanG: 2011.10.04. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Fájlok
Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: Név: vp.05@hotmail.com Kurzuskód:
Szerző Név: Varga Péter ETR azonosító: VAPQAAI.ELTE Email cím: vp.05@hotmail.com Kurzuskód: IP-08PAEG/27 Gyakorlatvezető neve: Kőhegyi János Feladatsorszám: 20 1 Tartalom Szerző... 1 Felhasználói dokumentáció...
Algoritmizálás + kódolás C++ nyelven és Pascalban
Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban
STL 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
Gyakorló feladatok az 1. nagy zárthelyire
Gyakorló feladatok az 1. nagy zárthelyire 2012. október 7. 1. Egyszerű, bevezető feladatok 1. Kérjen be a felhasználótól egy sugarat. Írja ki az adott sugarú kör kerületét illetve területét! (Elegendő
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Programozá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
Programozá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
Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás 4. előadás Procedurális programozás: iteratív és rekurzív alprogramok Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto
Programozás Minta programterv a 1. házi feladathoz 1.
Programozás Minta programterv a 1. házi feladathoz 1. Gregorics Tibor 1. beadandó/0.feladat 2008. december 6. EHACODE.ELTE gt@inf.elte.hu 0.csoport Feladat Egy osztályba n diák jár, akik m darab tantárgyat
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
Programozási tételek. Dr. Iványi Péter
Programozási tételek Dr. Iványi Péter 1 Programozási tételek A programozási tételek olyan általános algoritmusok, melyekkel programozás során gyakran találkozunk. Az algoritmusok általában számsorozatokkal,
Bevezeté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)
Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása
Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző
Gregorics Tibor Tanácsok modularizált programok készítéséhez 1
Gregorics Tibor Tanácsok modularizált programok készítéséhez 1 Modularizált programon azt értjük, amely több, jól körülhatárolható részfeladat megoldásaiból épül fel. Egy-egy részfeladat gyakran szabványos
OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1
OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak.
Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:
1. Tétel Az állomány két sort tartalmaz. Az első sorában egy nem nulla természetes szám van, n-el jelöljük (5
6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok
6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok 1. feladat: Az EURO árfolyamát egy negyedéven keresztül hetente nyilvántartjuk (HUF / EUR). Írjon C programokat az alábbi kérdések
Osztá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
Alkalmazott modul: Programozás
Eötvös Loránd Tudományegyetem Informatikai Kar Alkalmazott modul: Programozás Feladatgyűjtemény Összeállította: Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Frissítve: 2015.
5. Gyakorlat. struct diak {
Rövid elméleti összefoglaló 5. Gyakorlat Felhasználó által definiált adattípusok: A typedef egy speciális tárolási osztály, mellyel érvényes típusokhoz szinonim nevet rendelhetünk. typedef létező_típus
Objektumok 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ú
Occam 1. Készítette: Szabó Éva
Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti
Java és web programozás
Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:
Programozás C++ -ban 2007/4
Programozás C++ -ban 2007/4 1. Az adatokhoz való hozzáférés ellenőrzése Egy C programban a struktúrák minden része mindig elérhető. Ugyanakkor ez nem a legkedvezőbb helyzet. Több szempontból is hasznos
Java II. I A Java programozási nyelv alapelemei
Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve
3. ZH-ban a minimum pontszám 15
1. HF 2. HF 3. HF 4. HF 5. HF 1. ZH 2. ZH 3. ZH Osszesen Jegy EHA kod 4 4 4 4 4 4 4 4 18 10 10 30 100 1 ARAPAFP.PTE 3.5 2.5 4 4 2 4 4 2 15 5 6 18 70 3 x 2 BAMPACP.PTE 4 4 4 4 4 4 4 4 18 10 8 26 94 5 x
Objektumorientált Programozás VI.
Objektumorientált Programozás Metódusok Paraméterek átadása Programozási tételek Feladatok VI. ÓE-NIK, 2011 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő
Pelda ö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
Objektum 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
Bevezetés az informatikába
Bevezetés az informatikába 6. előadás Dr. Istenes Zoltán Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék Matematikus BSc - I. félév / 2008 / Budapest Dr.
Bevezetés a programozásba Előadás: A const
Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout
Programozá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
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban
117. 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,
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa
1000.AA Megoldo Alfréd 1000.A
Programozás alapjai 2. (inf.) 2. PZH 2018.05.22. hiányzás:0+3 L4-R4P ZH: 27,5+26 ABCDEF IB.028/100. Sum:0 e:19 Minden beadandó megoldását a feladatlapra, a feladat után írja! Készíthet piszkozatot, de
Programozási alapismeretek 1. előadás
Programozási alapismeretek 1. előadás Tartalom A problémamegoldás lépései programkészítés folyamata A specifikáció Az algoritmus Algoritmikus nyelvek struktogram A kódolás a fejlesztői környezet 2/33 A
Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat
Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot
.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,
Pé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:
OOP #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
Programozási alapismeretek 3. előadás
Programozási alapismeretek 3. előadás Tartalom Ciklusok specifikáció+ algoritmika +kódolás Egy bevezető példa a tömbhöz A tömb Elágazás helyett tömb Konstans tömbök 2/42 Ciklusok Feladat: Határozzuk meg
Egyszerű programozási tételek
Egyszerű programozási tételek 2. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 15. Sergyán (OE NIK) AAO 02 2011. szeptember 15.
Java programozási nyelv 4. rész Osztályok II.
Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék
Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,
Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás OE-NIK, 2013 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk
Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 3. gyakorlat PLanG: 2011.09.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Algoritmusok
1. 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 (
C++ Gyakorlat jegyzet 7. óra
C++ Gyakorlat jegyzet 7. óra A jegyzetet Umann Kristóf készítette Horváth Gábor gyakorlata alapján. (2018. április 30.) 0.1. Header fájlra és fordításra egységre szétbontás Ha egy darab header fájlban
Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása
1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június
7. fejezet: Mutatók és tömbök
7. fejezet: Mutatók és tömbök Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni! //Tömbök használata
Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu
Programozás I. 3. előadás Tömbök a C#-ban Metódusok C#-ban Egyszerű programozási tételek Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar Szoftvertechnológia
Vezérlési szerkezetek
Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását
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?
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"