Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Programozási alapismeretek 2. előadás
Programozási alapismeretek 2. előadás Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 1
2
Programozási alapismeretek
Tartalom Adatokkal kapcsolatos fogalmak A típus – általában Elemi típusok – egész, valós, logikai, karakter Kódolás – adminisztráció Kódolás – C++ alapok Hibakeresés – C++ alapok Elágazások – C++ Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 2
3
Adatokkal kapcsolatos fogalmak
Programozási alapismeretek Adatokkal kapcsolatos fogalmak Konstans az az adat, amely a műveletvégzés során nem változtat(hat)ja meg értékét, mindvégig ugyanab-ban az „állapotban” marad. Változó az ilyen adatféleségnek lényegéhez tartozik a „változékonyság”, más szóval: vonatkozhatnak rá olyan műveletek is, ame-lyek új értékkel látják el. Tudományosabban fogalmazva nem egyelemű az állapothalmaza. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 3 3
4
Adatokkal kapcsolatos fogalmak
Programozási alapismeretek Adatokkal kapcsolatos fogalmak Értékadás az az utasítás, ami révén a pillanatnyi állapot-ból egy másikba (a meghatározottba) kerül át a változó. (Nyilvánvaló, hogy konstans adat-ra nem vonatkozhat értékadás, az egy, kez-dőértéket meghatározón kívül.) Típus olyan „megállapodás” (absztrakt kategória), amely adatok egy lehetséges körét jelöli ki az által, hogy rögzíti azok állapothalmazát és az elvégezhető műveletek arzenálját. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 4 4
5
Az adatjellemzők összefoglalása
Programozási alapismeretek Az adatjellemzők összefoglalása Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartal-mára, amely által módosíthatjuk tartalmát. Kezdőérték A születéskor hozzárendelt érték. Konstansoknál nyilvánvaló; változóknál dek-larációban kap-e, adható-e, vagy futáskor szerez értéket magának. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 5 5
6
Az adatjellemzők összefoglalása
Programozási alapismeretek Az adatjellemzők összefoglalása Hozzáférési jog Adatokat módosítani, illetve értéküket lekérdez-ni, használni lehet; egy adat hozzáférés szem-pontjából háromféle lehet: lekérdezhető és módosítható; lekérdezhető és nem módosítható; nem lekérdezhető, de módosítható. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 6 6
7
Az adatjellemzők összefoglalása
Programozási alapismeretek Az adatjellemzők összefoglalása Hatáskör A programszöveg azon tartománya, amelyben az adathoz hozzáférés megengedett. Élettartam A futási időnek az az intervalluma, amelyben az adat azonosítója végig ugyanazt az objektumot jelö-li. Megjegyzés: a fenti kissé talányos megfogalma-zás az alprogramok bevezetésével világossá válik. (Lokális vs. globális adatok.) Figyelem: az alprogramok bevezetésével a hatáskör „kilukadhat”. (Luk a hatáskörben: egy lokális adat elfedi az ugyanolyan nevű globálisat.) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 7 7
8
Programozási alapismeretek
A típus Értéktípus (röviden: típus) Az adatoknak az a tulajdonsága, hogy értékei mely halmazból származnak és tevékenysé-geknek (függvények, operátorok, utasítások) mely „készlete, amely létrehozza, felépíti, lerom-bolja és részekre bontja” alkalmazható rá. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 8 8
9
Programozási alapismeretek
A típus Összetettség (strukturáltság) szempontjá-ból beszélhetünk strukturálatlan (vagy skalár, elemi) típusról, ha (az adott szinten) szerkezetet nem tulaj-donítunk neki; vagy strukturált (más szóval: összetett) típusról, ha (elemibb) összetevőkre bontjuk. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 9 9
10
Programozási alapismeretek
A típus Műveletek, operátorok Értékadás = azonos típusúak közötti adat-mozgatás, másolatkészítés. Típusátviteli függvények = valamely típus érté-keit egy másik típus értékeire képezik le. A típusátviteli függvényeknek nevezetes faj-tái vannak, ezek: konstrukciós, szelekciós, illetve speciális (de nélkülözhetetlen) egyéb függvé-nyek. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 10 10
11
Programozási alapismeretek
A típus Beolvasás = adott típusú érték bejuttatása a program számára (karakteres formáról belső ábrázolásra alakítása). Kiírás = adott típusú érték kijuttatása a fel-használó számára (belső ábrázolásról karak-teres formára váltása). Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 11 11
12
Programozási alapismeretek
A típus Azonosság = két, azonos típusú adat érték-egyezőségét vizsgáló logikai értékű operátor. Rendezések = rendezett típus esetén, két, azo-nos típusú adat sorrendjét vizsgáló logikai értékű operátorok. Számosság-függvény = megadja (ha megadha-tó), hogy mennyi az adott típus „számossá-ga”, azaz az értékhalmazát alkotó konstan-sok száma. A függvény egy típushoz nem pedig valamely adat-hoz tartozik. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 12 12
13
Programozási alapismeretek
A típus A függvény egy típushoz nem pedig valamely adat-hoz tartozik. Min/Max-függvény = az értékhalmaz legkisebb, illetve legnagyobb eleme (feltéve, hogy ren-dezett típusról van szó. Transzformációs függvények = az adott típuson (esetleg direktszorzatán) értelmezett, az adott típusra képező függvények, operátorok. Ezek –értelemszerűen– típustól függően mások és mások lehetnek. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 13 13
14
Programozási alapismeretek
Elemi típusok 2-bájtos ábrázolást feltételezve. Egész típus Értékhalmaz: – (Min'Egész..Max'Egész) Műveletek: +, – , *, Div (egészosztás), ^ (pozitív egészkitevős hatványozás), Mod (osztási maradék), – (unáris mínusz) Relációk: =, <, , , , > Ábrázolás: kettes komplemens kódú Változatai: méret és előjel szerint sokfélék A beolvasáson, a kiíráson és értékadáson túliakkal foglalkozunk csak. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 14 14
15
Programozási alapismeretek
Elemi típusok Valós típus Értékhalmaz: ????..???? (Min'Valós..Max'Valós nem definiáltak, vagy imple-mentációfüggőek) Műveletek: +, –, *, /, ^, – (unáris mínusz) Relációk: =, <, , , , > Ábrázolás: lebegőpontos ábrázolás (pontosabb lenne, ha e típust racionálisnak neveznénk, mert csak racionális számot képes ábrázolni) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 15 15
16
Programozási alapismeretek
Elemi típusok Logikai típus Értékhalmaz: Hamis..Igaz (Min'Logikai..Max'Logikai: Hamis, illetve Igaz) Műveletek: nem, és, vagy (a szokásos logi-kai műveletek) Relációk: =, <, , , , > Ábrázolás: 0 = Hamis, –1 = Igaz (esetleg: 1 = Igaz) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 16 16
17
Programozási alapismeretek
Elemi típusok Karakter típus Értékhalmaz: kódú jelek – ASCII (Min'Karakter..Max'Karakter: a 0, illetve a 255 kódú karakter) Műveletek: karakter-specifikus nincs (esetleg a Kód:KarakterEgész függvény, és inverze a Karakter:EgészKarakter függvény, amelyek a belső ábrázolással hozza kapcsolatba) Relációk: =, <, , , , > (a belső ábrázolásuk alapján – nem ABC-sorrend!) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 17 17
18
Programozási alapismeretek
Kódolás (adminisztráció) Célszerűen a forrás(ok) tartalmazzák a szerző adatait, a feladat szövegét és a feladat specifikációját; valamint használható algoritmus-magyarázatokat; a fejlesztés még hátralévő teendőit. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 18
19
Programozási alapismeretek
Kódolás (adminisztráció) Az 1. a sablonba (a template-be) fixen be-építhető. a szerző adatai (pl.): Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk. //Szlávi Péter //SZPKAFT.ELTE … #include <iostream> Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 19
20
Programozási alapismeretek
Kódolás (adminisztráció) A továbbiak elkezdhetők (pl.): Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk. //Szlávi Péter //SZPKAFT.ELTE // //Feladat: // … itt a szöveg … //Specifikáció: //… itt a specifikáció … //Teendők: //TODO a feladatszöveg kitöltése //TODO a specifikáció megalkotása //TODO … #include <iostream> … A „teendők” („TO-DO”-k) elemei bárhova elhelyezhetők. Szintaxisa: //TODO a teendő szövege Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 20
21
Programozási alapismeretek
Kódolás (adminisztráció) A sablon mentése: Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 21
22
Programozási alapismeretek
Kódolás (adminisztráció) A sablon alapján egy új projekt létrehozása: … és a helye: Ez leginkább csak otthon megy –mint látszik–, hiszen a számítógép „munkakönyvtárába” lesz található a sablon… Ebből következik, h. csak az általam „mindig” használt gépen használható szolgáltatás. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 22
23
Programozási alapismeretek
Kódolás (adminisztráció) A tennivalók „kikeresése”: A kérdéses teendőre kattintva a kurzor a forráskód megfelelő sorának az elejére kerül. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 23
24
Programozási alapismeretek
Kódolás (C++ alapok) Programszerkezet – main függvény int main() { lokális adatdeklarációk … a függvénytörzs végrehajtható utasításai … return fvÉrték } Alaptípusok: int – egész float – valós double – valós char – karakter string – szöveg bool – logikai Deklaráció: típus adatazonosító,… A kulcs-szavakat vastagon szedem. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 24
25
Programozási alapismeretek
Kódolás (C++ alapok) megjegyzés Értékadás: változó=kifejezés; //típusegyezés!!! Értékazonosság (pl. logikai kifejezésben): kifejezés==kifejezés /* típusegyezés */ Egyéb relációk (pl. logikai kifejezésben): kifejezés!=kifejezés /* nem azonos? */ kifejezés<=kifejezés /* kisebb-egyenlő? */ kifejezés<kifejezés /* kisebb? */ … Logikai operátorok: kifejezés1 && kifejezés2 /* és */ kifejezés1 || kifejezés2 /* vagy */ megjegyzés Figyelem! Nem: << A kulcs-szavakat vastagon szedem. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 25
26
Kódolás (beolvasás és kiírás kérdése)
Programozási alapismeretek Kódolás (beolvasás és kiírás kérdése) Beolvasás és kiírás (valamint fájlkezelés) szempontjából a nyelvek kétfélék le-hetnek: A nyelv (eleve) tartalmaz beolvasó és kiíró utasításokat. (Pl. Pascal.) A nyelv szabványos eljáráskönyvtár-ban tartalmaz beolvasó és kiíró eljá-rásokat (függvényeket). (Pl. C és C++) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 26 26
27
Programozási alapismeretek
Ezek leírása található a iostream fájlban. Kódolás (C++ alapok) „Olvasd be” operátor Konzol input: cin >> változó; //változókonzol Konzol output: cout << kifejezés; //konzolkifejezés-érték cout << … << '\n'; //konzol… +sorvég alternatív megoldás: cout << … << endl; //konzol… +sorvég Bementi adatfolyam „Tedd bele” operátor Kimenti adatfolyam A kulcs-szavakat vastagon szedem. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 27
28
Programozási alapismeretek
Kódolás (C++ alapok) String (=karakterlánc) konstans: "karakterlánc" Karakter konstans: 'karakter' Könyvtárfájlok (header fájlok): #include <…> – a rendszeré #include "…" – saját Névtér using namespace … Ad #include: A header fájlok konstansokat és a függvények, eljárások fejsorait tartalmazzák. A standard függvények forráskódja nem áll rendelkezésünkre, azt nem mellékelték a fordítóprogramhoz. Ezek kódja .lib fájlokban található, melyet a linker szerkeszt a programhoz (de csak azokat, melyeket használunk is). Ad Névtér: Név deklarációkat és definíciókat csoportosítani lehet az ún. névterekben. Mi az std-ben összeszedetteket használjuk, arra építünk. Próbálja ki elhagyni a using sort, és a hibát javítani. L. ansi_cpp.pdf / 93. o. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 28
29
Programozási alapismeretek
Hibakeresés – hibák Fordítás során kiírt hibák Hibaüzenet értelmezése A hiba okának kiderítése A hiba keletkezési helyének keresése A hiba kijavítása Futtatás során fellépő hibák javítása Tesztelés Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 29 29
30
Hibakeresés (C++ alapok)
Programozási alapismeretek Hibakeresés (C++ alapok) Code::Blocks szerkezet és szintaktika… Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 30 30
31
Hibakeresés (C++ alapok)
Programozási alapismeretek Hibakeresés (C++ alapok) A szintaktikus hiba javítása után… Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 31 31
32
Hibakeresés (C++ alapok)
Programozási alapismeretek Hibakeresés (C++ alapok) A futás után… warning: character constant too long for its type Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 32 32
33
Hibakeresés (C++ alapok)
Programozási alapismeretek Hibakeresés (C++ alapok) Nyomkövetés debugger nélkül – nyomkö-vetést támogató saját kiírások: Feltételes fordítás Csak akkor fordul be a kódba, ha DEBUG definiált Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 33 33
34
Hibakeresés (C++ alapok)
Programozási alapismeretek Hibakeresés (C++ alapok) Nyomkövetés debugger nélkül – nyomkö-vetést támogató saját kiírások (folytatás): Feltételes fordítás Most a DEBUG nem definiált. Most a DEBUG nem definiált. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 34 34
35
Feladatok elágazásra: vércsoport - 1
Programozási alapismeretek Feladatok elágazásra: vércsoport - 1 Feladat: Egy ember vércsoportját (Rh negatív vagy pozitív) egy génpár határozza meg. Mindkét gén lehet „+” vagy „–” típusú. A „++” és a „+–” típusúak az „Rh pozitívok”, a „– –” típusúak pedig „Rh nega-tívok”. Írj programot, amely megadja egy ember vércsoportját a génpárja ismeretében! Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 35 35
36
Feladatok elágazásra: vércsoport - 1
Programozási alapismeretek Feladatok elágazásra: vércsoport - 1 Specifikáció: Bemenet: x,y:Karakter Kimenet: v:Szöveg Előfeltétel: x,y{”+”, ”–”} Utófeltétel: (x=”+” vagy y=”+”) és v=”Rh+” vagy (x=”–” és y=”–”) és v=”Rh–” Algoritmus: x=”+” vagy y=”+” v:=”Rh+” v:=”Rh–” I N Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 36 36
37
Feladatok elágazásra: vércsoport - 2
Programozási alapismeretek Feladatok elágazásra: vércsoport - 2 Feladat: Egy ember vércsoportját (A, B, AB vagy 0) egy gén-pár határozza meg. Mindkét gén lehet a, b vagy 0 típusú. A vércsoport meghatározása: A={aa, a0}; B={bb,b0}; AB={ab}; 0={00}. Írj programot, amely megadja egy ember vércsoportját a génpárja ismeretében! Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 37 37
38
Feladatok elágazásra: vércsoport - 2
Programozási alapismeretek Feladatok elágazásra: vércsoport - 2 Specifikáció: Bemenet: x,y:Karakter Kimenet: v:Szöveg Előfeltétel: x,y{”a”, ”b”, ”0”} Utófeltétel: (x=”a” és y≠”b” vagy x≠”b” és y=”a”) és v=”A” vagy (x=”b” és y≠”a” vagy x≠”a” és y=”b”) és v=”B” vagy (x=”a” és y=”b” vagy x=”b” és y=”a”) és v=”AB” vagy x=”0” és y=”0” és v=”0” Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 38 38
39
Feladatok elágazásra: vércsoport - 2
Programozási alapismeretek Feladatok elágazásra: vércsoport - 2 Algoritmus1: Kétirányú elágazások egymásba ágyazásával. x=”a” és y≠”b” vagy x≠”b” és y=”a” v:=”A” x=”b” és y≠”a” vagy x≠”a” és y=”b” v:=”B” x=”a” és y=”b” vagy x=”b” és y=”a” v:=”AB” v:=”0” I N I N I N Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 39 39
40
Feladatok elágazásra: vércsoport - 2
Programozási alapismeretek Feladatok elágazásra: vércsoport - 2 Algoritmus2: Sokirányú elágazással. x=”a” és y≠”b” vagy x≠”b” és y=”a” x=”b” és y≠”a” vagy x≠”a” és y=”b” x=”a” és y=”b” vagy x=”b” és y=”a” x=”0” és y=”0” v:=”A” v:=”B” v:=”AB” v:=”0” Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 40 40
41
Feladatok elágazásra: vércsoport - 2
Programozási alapismeretek Feladatok elágazásra: vércsoport - 2 Algoritmus3: Segédváltozók bevezetésével. vana:= x=”a” vagy y=”a” vanb:= x=”b” vagy y=”b” vana vanb v:=”AB” v:=”A” v:=”B” v:=”0” I N I N I N Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 41 41
42
Programozási alapismeretek
Kódolás (C++) Kód: kétirányú többirányú elágazás (általános) if (Felt) { UtI } else { UtH } if (Felt1) { Ut1 } else if (…) { … } else if (FeltN) { UtN } else { Ut } elhagyható elhagyható Kódolási stílus-változatok (ANSI/K&R) Kódolási stílus-változatok (/) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 42 42
43
Programozási alapismeretek
Kódolás (C++) Kód: kétirányú többirányú elágazás (speciális) if (Felt) { UtI } else { UtH } switch (kif) { case érték1: Ut1; break; case … : … ; break; case értékN: UtN; break; default : Ut ; } elhagyható elhagyható Mi lenne, ha a break-eket elhagynánk? Kísérletezzen! Milyen mechanizmust sejt mögötte, azaz milyen kódra fordulhat le egy switch kapcsoló? Kódolási stílus-változatok (K&R/ANSI) Kódolási stílus-változatok (K&R/ANSI) Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 43 43
44
Programozási alapismeretek
Kódolás (C++) Kód1: Figyeljünk föl egy tipikus kódolási hibára: a bemenet önhatalmú nagybetűssé tételére! Ciklus (!), amelyből a kilépés az Ef. teljesülésekor. A do-while-os ciklus a beolvasás kódolási szabályához tartozik! Lehetne persze máshogy is. Pl. megállás, ha az Ef. nem teljesül. Nem algoritmizálandó! L. még korábban is! Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 45 45
45
Programozási alapismeretek
Kódolás (C++) Kód1: //név: Szabó Emerencia //ETR-azonosító: SZEKAAT.ELTE //drótposta-cím: //Feladat: Vércsoport meghatározás II. - A,B,O #include <iostream> using namespace std; int main() { char x,y; string v; cout<<"Vercsoport meghatarozasa"<<endl<<endl; do { cout<<"Kerem a vercsoportot meghatarozo egyik gent (A/B/0):"; cin>>x; }while ((x!='A') && (x!='B') && (x!='0')); //az előfeltétel szerint csak A,B vagy 0 lehet cout<<"Kerem a vercsoportot meghatarozo masik gent (A/B/0):"; cin>>y; }while ((y!='A') && (y!='B') && (y!='0')); //az előfeltétel szerint csak A,B vagy 0 if (((x=='A')&&(y!='B'))||((x!='B')&&(y=='A'))){ //az A és B domináns gén v="A"; } else{ if ((((x=='B')&&(y!='A'))||((x!='A')&&(y=='B')))){ //az A és B domináns gén v="B"; if ((((x=='B')&&(y=='A'))||((x=='A')&&(y=='B')))){ v="AB"; v="0"; cout<<v<<" a vercsoportja!"<<endl; return 0; Kód jegyzet- ként Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 46 46
46
Programozási alapismeretek
Kódolás (C++) Kód3: Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 47 47
47
Programozási alapismeretek
Kódolás (C++) Kód3: //név: Szabó Emerencia //ETR-azonosító: SZEKAAT.ELTE //drótposta-cím: //Feladat: Vércsoport meghatározás II. - A,B,O #include <iostream> using namespace std; int main() { char x,y; string v; cout<<"Vercsoport meghatarozasa"<<endl<<endl; do { cout<<"Kerem a vercsoportot meghatarozo egyik gent (A/B/0):"; cin>>x; }while ((x!='A') && (x!='B')&& (x!='0')); //az előfeltétel szerint csak A,B vagy 0 lehet cout<<"Kerem a vercsoportot meghatarozo masik gent (A/B/0):"; cin>>y; }while ((y!='A') && (y!='B')&& (y!='0')); //az előfeltétel szerint csak A,B vagy 0 if (((x=='A')&&(y!='B'))||((x!='B')&&(y=='A'))){ //az A és B domináns gén v="A"; } else{ if ((((x=='B')&&(y!='A'))||((x!='A')&&(y=='B')))){ //az A és B domináns gén v="B"; if ((((x=='B')&&(y=='A'))||((x=='A')&&(y=='B')))){ v="AB"; v="0"; cout<<v<<" a vercsoportja!"<<endl; return 0; Kód jegyzet- ként Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 48 48
48
Programozási alapismeretek
Kódolás (C++) A konzol input kódolása az előfelté-tel alapján (skalár változóba): Előfeltétel: Helyes(x) ahol a Helyes(x) egy x-től függő logikai kifeje-zést rövidít most do{ cout << "kérdés:"; cin >> x; if (!Helyes(x)) { cout << "hibaüzenet" << endl; }; }while (!Helyes(x)); Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 49 49
49
Programozási alapismeretek
Kódolás (C++) Ugyanez egyszerűbben: cout << "kérdés"; cin >> x; if (!Helyes(x)) { cout << "\nhibaüzenet" << endl; exit(hibakód); } Az exit-hez: L. „ANSI C++ összefoglaló” 85. o. A tetszőleges helyen elhelyezett exit hatására kilép a programból, a megadott kóddal. Célszerűen: EXIT_FAILURE (a cstdlib-ben előredefiniált konstans, akárcsak az EXIT-SUCCESS). '\n' = sorvégjel Jó szokás a hibátlansághoz rendelni a 0 megállási kódot, s ettől eltérőt a különleges hibaesetekhez. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 50 50
50
Programozási alapismeretek
Kódolás (C++) Szintaktikus (és szemantikus) ellenőrzéssel: Értelemszerűen csak bizonyos típusú változóba történő olvasásnál alkalmazható (pl. valamely szám típusúba). A beolvasáshoz szükséges lokális változók. bool hiba; string tmp; … Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 51
51
Programozási alapismeretek
Kódolás (C++) Szintaktikus (és szemantikus) ellenőrzéssel: Értelemszerűen csak bizonyos típusú változóba történő olvasásnál alkalmazható (pl. valamely szám típusúba). cin-nek – mint objektumnak (bemeneti folyamnak) vannak metódusai/tagfüggvényei. Pl. a fail(). bool hiba; string tmp; … do{ cout << "kérdés:"; cin >> x; hiba=cin.fail(); if (hiba || !Helyes(x)) { cout << "hibaüzenet" << endl; cin.clear(); getline(cin,tmp,’\n’) }; }while (hiba || !Helyes(x)); Az újdonságokat (a szintaktikus ellenőrzést végző részeket) pirossal emeltem ki. Figyelem: amíg a string konstanst "-k veszi körül, addig a karakter konstanst '-ok. Érdemes kikísérletezni, hogy milyen „szintaktikus” hibákra válik érzékennyé ezáltal a program! (Mo.: csak a számok beolvasásakor, és hibás „kezdetűek” esetén.) Az input-puffer törlése. Kell: #include <string> '\n' = sorvégjel; olvasás sorvégjelig Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 52
52
Programozási alapismeretek
Kódolás (C++) Ugyanez egyszerűbben: Pl. ha fájlból történik a beolvasás: Olvas(fájl,x) [Helyes(x)] cout << "kérdés:"; cin >> x; if (cin.fail() || !Helyes(x)) { cout << "hibaüzenet" << endl; exit(hibakód); }; Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 53
53
Programozási alapismeretek
Programozási alapismeretek 2. előadás vége Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 54 54
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.