Programozási alapismeretek 2. előadás

Slides:



Advertisements
Hasonló előadás
Hatékonyságvizsgálat, dokumentálás
Advertisements

Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
3. előadás (2005. március 1.) Utasítások, tömbök
JavaScript.
Programozási alapismeretek 4. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 4.2/  A szöveg A szöveg.
Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/  Adatokkal kapcsolatos.
Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/  Sorozatszámítás.
Programozási alapismeretek 3. előadás
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
Programozási alapismeretek 9. előadás. ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás2/
Bevezetés a Java programozásba
Bevezetés a Java programozásba
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
Programozás II. 3. Gyakorlat C++ alapok.
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
2012. március 7. Paulik Áron Prog szakkör.
PHP Webprogramozás alapjai
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Sorozatszámítás Specifikáció (a végleges) :  Bemenet:
ELTE Szlávi-Zsakó: Programozási alapismeretek Szlávi-Zsakó: Programozási alapismeretek 3. 1/
C++ alapok, harmadik óra
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás Az adatokról C# -ban.
C nyelv utasításai.
ELTE 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 ugyanabban az „állapotban”
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Operátorok Értékadások
Programozási nyelvek.
Készítette: Csíki Gyula
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Java programozási nyelv Vezérlési szerkezetek
Algoritmusok.
Objektum orientált programozás
Objektum orientált programozás
A Visual Basic nyelvi elemei
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Programozás, programtervezés
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Programozási alapismeretek * A Zh-írás módszertana.
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Algoritmizálás, adatmodellezés
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/  Adatokkal kapcsolatos.
Excel programozás (makró)
Fájlkezelés Programozási tételek
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
1 BME VBK KROMATOGRÁFIÁS SZAKANALITIKUS KÉPZÉS INFORMATIKA (SZÁMÍTÁSTECHNIKA) dec. 2. Access „elmaradás” - a Beszall_forg lekédezés elkészítése:
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Script nyelvek előadás
Script nyelvek előadás
a programegységek között
Kifejezések C#-ban.
Programozási alapismeretek
Gépészeti informatika (BMEGEMIBXGI)
Programozási nyelvek típusossága.
Script nyelvek előadás
Excel programozás (makró)
Programozás C# -ban Elágazások.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Bevezetés a programozásba Algoritmikus gondolkodás
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
A „Programozási alapismeretek” 2. gyakorlat
Informatikai gyakorlatok 11. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Informatikai gyakorlatok 11. évfolyam
Informatikai gyakorlatok 11. évfolyam
Algoritmus készítés.
Előadás másolata:

Programozási alapismeretek 2. előadás 2018.09.04. 2018.09.04. Programozási alapismeretek 2. előadás Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 1

Programozási alapismeretek 2018.09.04. 2018.09.04. 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++ 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 2

Adatokkal kapcsolatos fogalmak Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 3 3

Adatokkal kapcsolatos fogalmak Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 4 4

Az adatjellemzők összefoglalása Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 5 5

Az adatjellemzők összefoglalása Programozási alapismeretek 2018.09.04. 2018.09.04. 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ó. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 6 6

Az adatjellemzők összefoglalása Programozási alapismeretek 2018.09.04. 2018.09.04. 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.) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 7 7

Programozási alapismeretek 2018.09.04. 2018.09.04. 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á. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 8 8

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 9 9

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 10 10

Programozási alapismeretek 2018.09.04. 2018.09.04. 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). 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 11 11

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 12 12

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 13 13

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 14 14

Programozási alapismeretek 2018.09.04. 2018.09.04. 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) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 15 15

Programozási alapismeretek 2018.09.04. 2018.09.04. 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) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 16 16

Programozási alapismeretek 2018.09.04. 2018.09.04. 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:KarakterEgész függvény, és inverze a Karakter:EgészKarakter függvény, amelyek a belső ábrázolással hozza kapcsolatba) Relációk: =, <, , , , > (a belső ábrázolásuk alapján – nem ABC-sorrend!) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 17 17

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 18

Programozási alapismeretek 2018.09.04. 2018.09.04. 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 //szlavip@elte.hu … #include <iostream> 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 19

Programozási alapismeretek 2018.09.04. 2018.09.04. 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 //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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 20

Programozási alapismeretek 2018.09.04. 2018.09.04. Kódolás (adminisztráció) A sablon mentése: 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 21

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 22

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 23

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 24

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 25

Kódolás (beolvasás és kiírás kérdése) Programozási alapismeretek 2018.09.04. 2018.09.04. 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++) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 26 26

Programozási alapismeretek Ezek leírása található a iostream fájlban. 2018.09.04. 2018.09.04. Kódolás (C++ alapok) „Olvasd be” operátor Konzol input: cin >> változó; //változókonzol Konzol output: cout << kifejezés; //konzolkifejezé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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 27

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 28

Programozási alapismeretek Hibakeresés – hibák 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 29 29

Hibakeresés (C++ alapok) Programozási alapismeretek 2018.09.04. 2018.09.04. Hibakeresés (C++ alapok) Code::Blocks szerkezet és szintaktika… 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 30 30

Hibakeresés (C++ alapok) Programozási alapismeretek 2018.09.04. 2018.09.04. Hibakeresés (C++ alapok) A szintaktikus hiba javítása után… 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 31 31

Hibakeresés (C++ alapok) Programozási alapismeretek 2018.09.04. 2018.09.04. Hibakeresés (C++ alapok) A futás után… warning: character constant too long for its type 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 32 32

Hibakeresés (C++ alapok) Programozási alapismeretek 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 33 33

Hibakeresés (C++ alapok) Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 34 34

Feladatok elágazásra: vércsoport - 1 Programozási alapismeretek 2018.09.04. 2018.09.04. 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! 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 35 35

Feladatok elágazásra: vércsoport - 1 Programozási alapismeretek 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 36 36

Feladatok elágazásra: vércsoport - 2 Programozási alapismeretek 2018.09.04. 2018.09.04. 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! 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 37 37

Feladatok elágazásra: vércsoport - 2 Programozási alapismeretek 2018.09.04. 2018.09.04. 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” 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 38 38

Feladatok elágazásra: vércsoport - 2 Programozási alapismeretek 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 39 39

Feladatok elágazásra: vércsoport - 2 Programozási alapismeretek 2018.09.04. 2018.09.04. 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” 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 40 40

Feladatok elágazásra: vércsoport - 2 Programozási alapismeretek 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 41 41

Programozási alapismeretek 2018.09.04. 2018.09.04. 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 (/) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 42 42

Programozási alapismeretek 2018.09.04. 2018.09.04. 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) 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 43 43

Programozási alapismeretek 2018.09.04. 2018.09.04. 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! 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 45 45

Programozási alapismeretek 2018.09.04. 2018.09.04. Kódolás (C++) Kód1: //név: Szabó Emerencia //ETR-azonosító: SZEKAAT.ELTE //drótposta-cím: sze@elte.hu //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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 46 46

Programozási alapismeretek 2018.09.04. 2018.09.04. Kódolás (C++) Kód3: 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 47 47

Programozási alapismeretek 2018.09.04. 2018.09.04. Kódolás (C++) Kód3: //név: Szabó Emerencia //ETR-azonosító: SZEKAAT.ELTE //drótposta-cím: sze@elte.hu //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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 48 48

Programozási alapismeretek 2018.09.04. 2018.09.04. 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)); 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 49 49

Programozási alapismeretek 2018.09.04. 2018.09.04. 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. 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 50 50

Programozási alapismeretek 2018.09.04. 2018.09.04. 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; … 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 51

Programozási alapismeretek 2018.09.04. 2018.09.04. 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 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 52

Programozási alapismeretek 2018.09.04. 2018.09.04. 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); }; 2018.09.04. Szlávi - Zsakó: Programozási alapismeretek 2. Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 53

Programozási alapismeretek 2018.09.04. 2018.09.04. 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