530 likes | 632 Views
Programozási alapismeretek 2. előadás. 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++. Tartalom. Adatokkal kapcsolatos fogalmak.
E N D
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++ Tartalom Szlávi - Zsakó: Programozási alapismeretek 2.
Adatokkal kapcsolatos fogalmak • Konstansaz 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.
Adatokkal kapcsolatos fogalmak • Értékadásaz 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ípusolyan „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.
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.
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.
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.) Szlávi - Zsakó: Programozási alapismeretek 2.
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.
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.
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.
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.
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.
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.
Elemi típusok 2-bájtos ábrázolást feltételezve. Egész típus • Értékhalmaz: –32768..+32767(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.
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.
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.
Elemi típusok Karakter típus • Értékhalmaz: 0..255 - 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.
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. Kódolás(adminisztráció) Szlávi - Zsakó: Programozási alapismeretek 2.
Az 1. a sablonba (a template-be) fixenbe-építhető. a szerző adatai (pl.): Kódolás(adminisztráció) Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk. //Szlávi Péter //SZPKAFT.ELTE //szlavip@elte.hu … #include <iostream> … Szlávi - Zsakó: Programozási alapismeretek 2.
A továbbiak elkezdhetők (pl.): Kódolás(adminisztráció) Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk. //Szlávi Péter //SZPKAFT.ELTE //szlavip@elte.hu // //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.
A sablon mentése: Kódolás(adminisztráció) Szlávi - Zsakó: Programozási alapismeretek 2.
A sablon alapján egy új projekt létrehozása: … és a helye: Kódolás(adminisztráció) 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.
A tennivalók „kikeresése”: Kódolás(adminisztráció) 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.
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ósdouble – valós char – karakter string – szöveg bool – logikai Deklaráció:típus adatazonosító,… Szlávi - Zsakó: Programozási alapismeretek 2.
É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*/ Kódolás(C++alapok) megjegyzés megjegyzés Figyelem! Nem: << Szlávi - Zsakó: Programozási alapismeretek 2.
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.
Konzol input:cin >> változó; //változókonzol Konzol output:cout <<kifejezés; //konzolkifejezés-értékcout <<…<< '\n';//konzol…+sorvégalternatív megoldás:cout <<…<< endl;//konzol…+sorvég Kódolás(C++alapok) Ezek leírása található a iostream fájlban. „Olvasd be” operátor Bementi adatfolyam „Tedd bele” operátor Kimenti adatfolyam Szlávi - Zsakó: Programozási alapismeretek 2.
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 … Kódolás(C++alapok) Szlávi - Zsakó: Programozási alapismeretek 2.
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 • A hiba keletkezési helyének keresése • A hiba kijavítása Szlávi - Zsakó: Programozási alapismeretek 2.
Hibakeresés(C++alapok) Szlávi - Zsakó: Programozási alapismeretek 2. Code::Blocks szerkezet és szintaktika…
Hibakeresés(C++ alapok) Szlávi - Zsakó: Programozási alapismeretek 2. A szintaktikus hiba javítása után…
Hibakeresés(C++ alapok) warning: character constant too long for its type Szlávi - Zsakó: Programozási alapismeretek 2. A futás után…
Hibakeresés(C++ alapok) Feltételes fordítás Csak akkor fordul be a kódba, ha DEBUG definiált Szlávi - Zsakó: Programozási alapismeretek 2. Nyomkövetés debugger nélkül – nyomkö-vetést támogató saját kiírások:
Hibakeresés(C++ alapok) Feltételes fordítás Most a DEBUG nem definiált. Most a DEBUG nem definiált. Szlávi - Zsakó: Programozási alapismeretek 2. Nyomkövetés debugger nélkül – nyomkö-vetést támogató saját kiírások (folytatás):
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”. Írjon programot, amely megadja egy ember vércso-portját a génpárja ismeretében! Szlávi - Zsakó: Programozási alapismeretek 2.
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: N I Szlávi - Zsakó: Programozási alapismeretek 2.
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}. Írjon programot, amely megadja egy ember vércso-portját a génpárja ismeretében! Szlávi - Zsakó: Programozási alapismeretek 2.
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.
Feladatok elágazásra: vércsoport - 2 Algoritmus1: Kétirányú elágazások egymásba ágyazásával. I N I N I N Szlávi - Zsakó: Programozási alapismeretek 2.
Feladatok elágazásra: vércsoport - 2 Algoritmus2: Sokirányú elágazással. Szlávi - Zsakó: Programozási alapismeretek 2.
Feladatok elágazásra: vércsoport - 2 Algoritmus3: Segédváltozók bevezetésével. I N I N N I Szlávi - Zsakó: Programozási alapismeretek 2.
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(/) Kódolási stílus-változatok(ANSI/K&R) Szlávi - Zsakó: Programozási alapismeretek 2.
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ó 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.
Ciklus (!), amelyből a kilépés az Ef. teljesülésekor. 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! L. még korábban is! Szlávi - Zsakó: Programozási alapismeretek 2.
Kódolás(C++) Kód1: Kód jegyzet-ként Szlávi - Zsakó: Programozási alapismeretek 2.
Kódolás(C++) Kód3: Szlávi - Zsakó: Programozási alapismeretek 2.
Kódolás(C++) Kód3: Kód jegyzet-ként Szlávi - Zsakó: Programozási alapismeretek 2.
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.
Kódolás(C++) Ugyanez egyszerűbben: cout << "kérdés"; cin >> x;if (!Helyes(x)){ cout << "\nhibaüzenet" << endl; exit(hibakód); } '\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.
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.