Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/552015. 04. 19.2015. 04. 19.2015. 04. 19.  Adatokkal kapcsolatos.

Hasonló előadás


Az előadások a következő témára: "Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/552015. 04. 19.2015. 04. 19.2015. 04. 19.  Adatokkal kapcsolatos."— Előadás másolata:

1 Programozási alapismeretek 2. előadás

2 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/  Adatokkal kapcsolatos fogalmak Adatokkal kapcsolatos fogalmak  A típus – általában A típus  Elemi típusok – egész, valós, logikai, karakter Elemi típusok  Kódolás – adminisztráció Kódolás  Kódolás – C++ alapok Kódolás  Hibakeresés – C++ alapok Hibakeresés  Elágazások – C++ Elágazások Tartalom

3 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.3/ Adatokkal kapcsolatos fogalmak  Konstans az az adat, amely a műveletvégzés során nem változtathatja 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.

4 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.4/ 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 készletét.

5 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.5/ 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.

6 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.6/ 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ó.

7 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.7/ 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.)

8 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.8/ 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á.

9 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.9/ 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.

10 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.10/ 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: o konstrukciós, o szelekciós, illetve o speciális függvények.

11 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.11/ 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). Megjegyzés: akár a típusátviteli függvények közé is sorolhatnánk, hiszen a karakter-soro- zat mint típus és egy másik típus között végez átalakítás.

12 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.12/ 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.

13 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.13/ A típus  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. A függvény egy típushoz nem pedig valamely adat- hoz tartozik.

14 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.14/ Elemi típusok 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. Példaként: 2-bájtos ábrázolást feltételezve.

15 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.15/ 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)

16 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.16/ 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: 0B = Hamis, –1B = Igaz (esetleg: 1B = Igaz)… ahol xB=x érték „bináris egészként” ábrázolva

17 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.17/ 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: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!)

18 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.18/  Célszerűen a forrás(ok) tartalmazzák 1. a szerző adatait, 2. a feladat szövegét és 3. a feladat specifikációját; valamint 4. használható algoritmus-magyarázatokat; 5. a fejlesztés még hátralévő teendőit. Kódolás (adminisztráció)

19 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.19/ Az 1. a sablonba ( a template-be ) fixen be - építhető. 1. a szerző adatai (pl.): //Szlávi Péter #include #include … Kódolás (adminisztráció) Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk.

20 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.20/ A továbbiak elkezdhetők (pl.): //Szlávi Péter // … 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 #include … Kódolás (adminisztráció) Ezek a programomnak „csak” a megjegyzései lesznek. A fordító számára érdektelen információk. A „teendők” („TO-DO”-k) elemei bárhova elhelyezhetők. Szintaxisa: //TODO a teendő szövege

21 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.21/  A sablon mentése: Kódolás (adminisztráció)

22 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.22/  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.

23 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.23/  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.

24 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.24/ 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észfloat – valós double – valóschar – karakter string – szövegbool – logikai  Deklaráció: típus adatazonosító, …

25 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.25/  É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és 1 && kifejezés 2 /* és */ kifejezés 1 || kifejezés 2 /* vagy */ megjegyzés megjegyzés Kódolás (C++ alapok) Figyelem! Nem: <<

26 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.26/ 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++)

27 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.27/  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 Kimenti adatfolyam „Olvasd be” operátor „Tedd bele” operátor Kódolás (C++ alapok) Ezek leírása található a iostream fájlban.

28 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.28/  String (=karakterlánc) konstans: " karakterlánc "  Karakter konstans: ' karakter '  Könyvtárfájlok (header fájlok): o #include – a rendszeré o #include "…" – saját  Névtér o using namespace … Kódolás (C++ alapok)

29 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.29/ Hibakeresés – hibák  Fordítás során kiírt hibák o Hibaüzenet értelmezése o A hiba okának kiderítése o A hiba keletkezési helyének keresése o A hiba kijavítása  Futtatás során fellépő hibák javítása o Tesztelés o A hiba keletkezési helyének keresése o A hiba kijavítása

30 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.30/ Hibakeresés (C++ alapok) Code::Blocks szerkezet és szintaktika…

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

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

33 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.33/ Hibakeresés (C++ alapok) Nyomkövetés debugger nélkül – nyomkö- vetést támogató saját kiírások (folytatás) : Most a DEBUG nem definiált. Feltételes fordítás Most a DEBUG nem definiált.

34 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.34/ Hibakeresés (C++ alapok) Nyomkövetés debugger nélkül – nyomkö- vetést támogató saját kiírások: Csak akkor fordul be a kódba, ha DEBUG definiált Feltételes fordítás

35 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.35/ 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!

36 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.36/ 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=”+”)  v=”Rh+” és (x=”–” és y=”–”)  v=”Rh–” Algoritmus: x=”+” vagy y=”+” v:=”Rh+”v:=”Rh–” I N

37 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.37/ 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,0a}; B={bb,b0,0b}; AB={ab,ba}; 0={00}. Írj programot, amely megadja egy ember vércsoportját a génpárja ismeretében!

38 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.38/ 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”

39 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.39/ Algoritmus 1 : Kétirányú elágazások egymásba ágyazásával. Feladatok elágazásra: vércsoport - 2 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

40 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.40/ Algoritmus 2 : Sokirányú elágazással. Feladatok elágazásra: vércsoport - 2 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”

41 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.41/ Algoritmus 3 : Segédváltozók bevezetésével. Feladatok elágazásra: vércsoport - 2 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

42 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.42/ Kód: kétirányúsokirányú elágazás (általános) if (Felt) { Ut I } else { Ut H } if (Felt 1 ) { Ut 1 } else if (…) { … } else if (Felt N ) { Ut N } else { Ut } elhagyható elhagyható Kódolási stílus- változatok (/) Kódolási stílus- változatok (ANSI/K&R) Kódolási stílus- változatok (ANSI/K&R) Kódolás (C++)

43 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.43/ Kód: kétirányúsokirányú elágazás (speciális) if (Felt) { Ut I } else { Ut H } elhagyható switch (kif) { case érték 1 : Ut 1 ; break; case … : … ; break; case érték N : Ut N ; break; default : Ut ; } elhagyható Kódolási stílus- változatok (K&R/ANSI) Kódolási stílus- változatok (K&R/ANSI) Kódolási stílus- változatok (K&R/ANSI) Kódolási stílus- változatok (K&R/ANSI) Kódolás (C++)

44 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.44/  „Stílusbeállítás” Code::Blocks-ban Kódolás (C++)

45 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.45/  „Stílusbeállítás érvényesítése” Code::Blocks-ban Kódolás (C++)

46 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.46/ Kód 1 : Ciklus (!), amelyből a kilépés az Ef. teljesülésekor. Ciklus (!), amelyből a kilépés az Ef. teljesülésekor. L. még korábban is!korábban Kódolás (C++) Figyeljünk föl egy tipikus kódolási hibára: a bemenet önhatalmú nagybetűssé tételére!

47 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.47/ Kódolás (C++) Kód 1 : Kód jegyzet- ként

48 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.48/ Kódolás (C++) Kód 3 :

49 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.49/ Kódolás (C++) Kód 3 : Kód jegyzet- ként

50 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.50/ 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 > x; cout > x; if (!Helyes(x)) { if (!Helyes(x)) { cout << "hibaüzenet" << endl; cout << "hibaüzenet" << endl; }; }; }while (!Helyes(x)); }while (!Helyes(x)); do{ cout > x; cout > x; if (!Helyes(x)) { if (!Helyes(x)) { cout << "hibaüzenet" << endl; cout << "hibaüzenet" << endl; }; }; }while (!Helyes(x)); }while (!Helyes(x));

51 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.51/ Kódolás (C++) Ugyanez egyszerűbben: cout << "kérdés"; cin >> x; if (!Helyes(x)) { cout << "\nhibaüzenet" << endl; exit(hibakód); } cout << "kérdés"; cin >> x; if (!Helyes(x)) { cout << "\nhibaüzenet" << endl; exit(hibakód); } cout << "kérdés"; cin >> x; if (!Helyes(x)) { cout << "\nhibaüzenet" << endl; exit(hibakód); } cout << "kérdés"; cin >> x; if (!Helyes(x)) { cout << "\nhibaüzenet" << endl; exit(hibakód); } 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. '\n' = sorvégjel

52 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.52/ bool hiba; string tmp; … bool hiba; string tmp; … A beolvasáshoz szükséges lokális változók. 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).

53 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.53/ 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). bool hiba; string tmp; … bool hiba; string tmp; … do{ cout > x; hiba=cin.fail(); if (hiba || !Helyes(x)) { cout > x; hiba=cin.fail(); if (hiba || !Helyes(x)) { cout << "hibaüzenet" << endl; cin.clear(); getline(cin,tmp,’\n’) }; }while (hiba || !Helyes(x)); cin -nek – mint objektumnak (bemeneti folyamnak) vannak metódusai/tagfüggvényei. Pl. a fail(). Az input-puffer törlése. Kell: #include Kell: #include '\n' = sorvégjel; olvasás sorvégjelig Kódolás (C++)

54 ELTE Szlávi - Zsakó: Programozási alapismeretek 2.54/ Például ha majd fájlból történik a beolvasás: Olvas(fájl,x) [Helyes(x)] cout > x; if (cin.fail() || !Helyes(x)) { cout > x; if (cin.fail() || !Helyes(x)) { cout << "hibaüzenet" << endl; exit(hibakód); }; Kódolás (C++) Ugyanez egyszerűbben:

55 Programozási alapismeretek 2. előadás vége


Letölteni ppt "Programozási alapismeretek 2. előadás. ELTE Szlávi - Zsakó: Programozási alapismeretek 2.2/552015. 04. 19.2015. 04. 19.2015. 04. 19.  Adatokkal kapcsolatos."

Hasonló előadás


Google Hirdetések