Tartalom 1. előadás programozás során használt nyelvek A specifikáció Algoritmikus nyelvek A problémamegoldás lépései 3/41 (miből?, mit?) specifikáció (mivel?, hogyan?) adat- + algoritmus-leírás 3. (a gép hogyan?) kód (reprezentáció + implementáció) 4. Tesztelés (hibás-e?) hibalista (diagnózis) 5. Hibakeresés (hol a hiba?) hibahely, -ok 6. Hibajavítás (hogyan jó?) helyes program 7. Minőségvizsgálat, hatékonyság (jobbítható-e?, hogyan?) jó program 8. Dokumentálás (hogyan működik, használható?) használható program 9. Használat, karbantartás (még mindig jó?) évelő (időtálló) program 4/41 Élőnyelv = Magyar Specifikáció Algoritmusleíró Programozási Gépi 2/41 2. Tervezés A nyelvek (magyar gépi) közelítése 1. Specifikálás Nyelvi szintek struktogram kódolás a fejlesztői környezet A programkészítés folyamata Mintapélda: házépítés Mi az, ami látszik? Mi az, ami ténylegesen mögötte van? 1. Igényfelmérés (szempontok: család mérete, elképzelése, pénz) 2. Tervezés (alaprajz, anyagigény / mérnök ) 3. Szervezés (ütemterv / vállalkozó ) 4. Építkezés (anyagbeszerzés, kivitelezés / kivitelező ) 5. Használatba vétel (szemrevételezés szépség, kipróbálás jóság) 6. Beköltözés, bentlakás (módosítgatás, újabb hibák,...) programkészítés folyamata Programozási alapismeretek problémamegoldás lépései 5/41 Italautomata használata: 1. Válassz italt! 2. Dobj be egy 100 Ft-ost! 3. Nyomd meg a megfelelő gombot! 4. Várj amíg folyik az ital! 5. Vedd ki az italt! 6. Idd meg! 6/41
végrehajtható (van hozzá végrehajtó) lépésenként hajtható végre a lépések maguk is algoritmusok pontosan definiált, adott végrehajtási sorrenddel egy folyamat véges hosszúságú, időben esetleg végtelen leírása 7/41 Italautomata használata: 1. Válassz italt! 2. Dobj be egy 100 Ft-ost! 3. Nyomd meg a megfelelő gombot! 4. Ismételd nézd a poharat! amíg folyik az ital! 5. Vedd ki az italt! 6. Idd meg! 9/41 Italautomata használata: 1. Válassz italt! 2. Ha van 100 Ft-osod akkor Dobj be egy 100 Ft-ost! különben Dobj be öt 20 Ft-ost 3. 10/41 10/41 Dobj be öt 20 Ft-ost: 1. Ismételd 5-ször: Dobj be egy 20 Ft-ost! Új algoritmikus elem: ismétlés adott darab-számszor 8/41 Új algoritmikus elem: választás két tevé-kenység közül, esetleg nemdeterminisz-tikus választás Új algoritmikus elem: ismétlés feltételtől függően Az alapalgoritmus elemei: egymásutáni végrehajtás nem-determinisztikusság párhuzamosság 11/41 11/41 ok összeállítási módjai: Szekvencia (egymás utáni végrehaj-tás) Elágazás (választás 2 vagy több tevé-kenységből) Ciklus (ismétlés adott darabszámszor vagy adott feltételtől függően) 12/41 12/41
A specifikáció 1. 2. 3. 4. 5. 6. 7. A specifikáció Bemenő adatok (azonosító, értékhalmaz, mértékegység) Ismeretek a bemenetről (előfeltétel) Eredmények (azonosító, értékhalmaz, ) Az eredmény kiszámítási szabálya (utófeltétel) A megoldással szembeni követelmények Korlátozó tényezők A használt k definíciói 13/41 13/41 Tulajdonságai 1. Egyértelmű, pontos, teljes 2. Rövid, tömör, formalizált 3. Szemléletes, érthető Specifikációs eszközök 1. Szöveges leírás 2. Matematikai megadás Példa: háromszög Példa: háromszög Feladat: 3 szám lehet-e egy derékszögű háromszög 3 oldala? Specifikáció: Bemenet: x,y,z: Kimenet: lehet:logikai Logikai Előfeltétel: x>0 és y>0 és z>0 Utófeltétel: lehet=(x2+y2=z2) Algoritmus: 15/41 15/41 A programunk három fő részből áll: az adatok beolvasása, az eredmény kiszámítása, az eredmény kiírása: Be: x,y,z [x>0 és y>0 és z>0] lehet:=(x2+y2=z2) Ki: lehet Megjegyzés: a 3 szám sorrendjét ezek sze-rint rögzítettük z az átfogó hossza! Megjegyzés: később eltekintünk a beés ki-menet algoritmizálásától! Egy másik algoritmus a lényegi xx:=x2 yy:=y2 zz:=z2 lehet:=(xx+yy=zz ) Feladat: Adjuk meg a másodfokú egy megol-dását! Az : ax2+bx+c=0 Kérdések: Bevezethetők/-endők segéd (belső, saját) változók. Mi a megoldás? kimenet Mit jelent: megoldásnak lenni? utófeltétel 16/41 16/41 Példa: háromszög részre: 14/41 14/41 Biztos van megoldás? előfeltétel Biztos egy megoldás van? kimenet/utófeltétel 17/41 17/41 18/41 18/41
Specifikáció1: Bemenet: a,b,c: Kimenet: x: Előfeltétel: Utófeltétel 1: ax2+bx+c=0 Mi lenne, ha megengednénk? Utófeltétel2x : Megjegyzés: az uf. nem ad algoritmizálható információt. Nem baj, de próbálkozzunk még! Specifikáció2: Bemenet: a,b,c: Kimenet: x: Előfeltétel: a 0 19/41 19/41 Nyitott kérdések: Mindig van megoldás? Egy megoldás van? van x Algoritmus: d:=b2-4*a*c b b 4 a c 2 van:=d 0 van? I Igaz-ág x : Nyitott kérdés: 21/41 21/41 Szöveges Program MásodfokúEgyenlet: d:=b2-4*a*c van:=d 0 b d Ha van akkor x : Program vége. 22/41 22/41 Algoritmusleíró nyelvek Algoritmus másképpen: b d N Hamis-ág Egy megoldás van? hf. 20/41 20/41 Kimenet bővítés: Kimenet: x:,, van:logikai Logikai 2 Utófeltétel: van=(b 4*a*c) és b b2 4 a c Mondatokkal leírás Mondatszerű elemekkel pszeudokód Rajzos 23/41 23/41 leírás leírás Folyamatábra Struktogram 24/41 24/41
Struktogram Struktogram (és pszeudokód) (és pszeudokód) Ciklusok: Szekvencia: Utasítás1 Utasítás2 Ciklus amíg Feltétel ciklusmag utasításai Ciklus vége Elágazások: Ciklus ciklusmag utasításai amíg Feltétel Ciklus vége Ha Feltétel akkor Igaz-ág utasításai különben Hamis-ág utasításai Elágazás vége Elágazás Feltétel1 esetén Feltétel2 esetén egyéb esetekben Elágazás vége Struktogramszerkesztés: Utasítások1 Utasítások2 Utasítások Ciklus cv=tól ig ciklusmag utasításai Ciklus vége 25/41 25/41 Táblázatkezelővel/szövegszerkesztővel Célprogramokkal (pl. NSD) Keretrendszer: Első Code::Blocks 26/41 26/41 elindításkor: a fordítóprogram kiválasztása Letöltés: www.codeblocks.org Telepítés: értelemszerűen 2. 1. 27/41 27/41 lépései: projekt létrehozása, azaz milyen plat-formra készül a majdani alkalmazás: Create a new project sablon (template) választása: Console application 28/41 28/41 további lépései: a projekt munkakörnyezete a diszken projektnév projekt szülőkönyvtár 29/41 29/41 30/41 30/41
a projekt munkakörnyezete a diszken további lépései: fordítóválasztás a munkakörnyezet kialakítás befejezése fordító projektnév projekt szülőkönyvtár projektfájlnév fejlesztendő? projektfájlnév útvonallal végleges? további lépései: a fejlesztendő környezete a végleges környezete 31/41 31/41 32/41 32/41 a keretrendszerben: a keretrendszerben: a program kibontása 33/41 33/41 keletkezett 0. program fordítása 34/41 34/41 35/41 35/41 36/41 36/41
a main.cpp tartalma: #include <iostream > <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; 0; } (meglepő módon?) 37/41 37/41 a elsőprog.cbp tartalma (xml): futó konzolalkalmazás: a futás eredmény e (mily meglepő!) visszaado tt érték Programozási alapismeretek 1. előadás vége 39/41 39/41 38/41 38/41 fordítás (az utolsó lefordított) futtatás(a) futási idő fordítás+futtatás és a konzolablak tartalma: Érdemes elindítani az exet! Mit tapasztalt? Magyarázat? 40/41 40/41