Programozási alapismeretek 1. előadás
Tartalom A problémamegoldás lépései programkészítés folyamata A specifikáció Az algoritmus Algoritmikus nyelvek struktogram A kódolás a fejlesztői környezet 2/33
A programkészítés folyamata 1. Specifikálás (miből?, mit?) specifikáció 2. Tervezés (mivel?, hogyan?) adat- + algoritmusleírás 3. Kódolás (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 3/33
A specifikáció 1. Bemenő adatok (azonosító, értékhalmaz [mértékegység]) 2. Ismeretek a bemenetről (előfeltétel) 3. Eredmények (azonosító, értékhalmaz ) 4. Az eredmény kiszámítási szabálya (utófeltétel) 5. A megoldással szembeni követelmények 6. Korlátozó tényezők 7. A használt fogalmak definíciói 4/33
A specifikáció 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 5/33
Az algoritmus fogalma Az algoritmusok összeállítási módjai: Szekvencia (egymás utáni végrehajtá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) Alprogram (egy összetett tevékenység, egyedi néven absztrakció) 6/33
Példa: háromszög (specifikáció) Feladat: 3 szám lehet-e egy derékszögű háromszög 3 oldala? Specifikáció: Bemenet: x,y,z Valós Kimenet: lehet Logikai Előfeltétel: x>0 és y>0 és z>0 Utófeltétel: lehet=(x 2 +y 2 =z 2 ) Megjegyzés: a 3 szám sorrendjét ezek szerint rögzítettük z az átfogó hossza! 7/33
Példa: háromszög (algoritmus) Algoritmus: 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:=(x 2 +y 2 =z 2 ) Ki: lehet Az elemi utasításokat egy-egy dobozba írjuk. Később a be- és kimenetet nem algoritmizáljuk! 8/33
Példa: háromszög (algoritmus) Egy másik algoritmus a lényegi részre: xx:=x 2 Segéd változók deklarálása széljegyzetként Változó xx,yy,zz:valós yy:=y 2 zz:=z 2 lehet:=(xx+yy=zz) Bevezethetők/-endők segéd (belső, saját) változók. 9/33
Példa: másodfokú egyenlet (specifikáció) Feladat: Adjuk meg a másodfokú egyenlet egy megoldását! Az egyenlet: ax 2 +bx+c=0 Kérdések: Mi a megoldás? kimenet Mit jelent: megoldásnak lenni? utófeltétel Biztos van megoldás? előfeltétel Biztos egy megoldás van? kimenet/utófeltétel 10/33
Példa: másodfokú egyenlet (specifikáció) Specifikáció 1 : Bemenet: a,b,c Valós Kimenet: x Valós Előfeltétel: Utófeltétel 1 : ax 2 +bx+c=0 Megjegyzés: az uf. nem ad algoritmizálható információt. Nem baj, de próbálkozzunk még! 2 b b 4 a c Megoldóképlet: x1,2 2 a 11/33
Példa: másodfokú egyenlet (specifikáció) Specifikáció 2 : Bemenet: a,b,c Valós Kimenet: x Valós Előfeltétel: a 0 Mi lenne, ha megengednénk? Utófeltétel 2 : x b b 2 2 4 a a c Nyitott kérdések: Mindig van megoldás? Egy megoldás van? 12/33
Példa: másodfokú egyenlet (specifikáció) Kimenet bővítés: Kimenet: x Valós, van Logikai Utófeltétel: van=(b 2-4*a*c 0) és van x b b 2 2 4 a a c Nyitott kérdés: Egy megoldás van? hf. 13/33
Példa: másodfokú egyenlet (algoritmus) Algoritmus: d:=b 2-4*a*c Változó d:valós van:=d 0 I van? N Igaz-ág x : b 2 a d Hamis-ág A feltételes utasítás 3-dobozos struktúra. 14/33
Példa: másodfokú egyenlet (algoritmus) Algoritmus másképpen: Program MásodfokúEgyenlet: Változó x,y,z, d:valós van:logikai d:=b 2-4*a*c van:=d 0 Ha van akkor Program vége. x: b 2 a d 15/33
Algoritmusleíró nyelvek Szöveges leírás Mondatokkal leírás Mondatszerű elemekkel pszeudokód Rajzos leírás Folyamatábra Struktogram 16/33
Struktogram (és pszeudokód) Szekvencia: Utasítás1 Utasítás2 Elágazások: 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 Utasítások1 Feltétel2 esetén Utasítások2 egyéb esetekben Utasítások Elágazás vége 17/33
Ciklusok: Struktogram (és pszeudokód) Ciklus amíg Feltétel ciklusmag utasításai Ciklus vége Ciklus ciklusmag utasításai amíg Feltétel Ciklus vége Ciklus cv=tól ig ciklusmag utasításai Ciklus vége Struktogramszerkesztés: Táblázatkezelővel/szövegszerkesztővel Célprogramokkal (pl. NSD) 18/33
Kódolás (fejlesztői környezet) Keretrendszer: Code::Blocks Letöltés: www.codeblocks.org Telepítés: értelemszerűen 19/33
Kódolás (fejlesztői környezet) Első elindításkor: a fordítóprogram kiválasztása 20/33
Kódolás (fejlesztői környezet) Használat lépései: 1. projekt létrehozása, azaz milyen platformra készül a majdani alkalmazás: Create a new project 2. sablon (template) választása: Console application 21/33
Kódolás (fejlesztői környezet) Használat további lépései: a projekt munkakörnyezete a diszken projektnév projekt szülőkönyvtár 22/33
Kódolás (fejlesztői környezet) Használat további lépései: a projekt munkakörnyezete a diszken projektnév projekt szülőkönyvtár projektfájlnév projektfájlnév útvonallal 23/33
Kódolás (fejlesztői környezet) Használat további lépései: fordítóválasztás a munkakörnyezet kialakítás befejezése fordító fejlesztendő? a fejlesztendő környezete végleges? a végleges környezete 24/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a diszken: a keretrendszerben: a program kibontása 25/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a diszken: a keretrendszerben: 26/33
Kódolás (fejlesztői környezet) A keletkezett 0. program fordítása 27/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a diszken: 28/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a diszken: 29/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a main.cpp tartalma: #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } (meglepő módon?) 30/33
Kódolás (fejlesztői környezet) A kialakult munkakörnyezet: a elsőprog.cbp tartalma (xml): (mily meglepő!) 31/33
Kódolás (fejlesztői környezet) A futó konzolalkalmazás: fordítás (az utolsó lefordított) futtatás(a) fordítás+futtatás és a konzolablak tartalma: futási idő a futás eredménye visszaadott érték Érdemes elindítani az exe-t! Mit tapasztalt? Magyarázat? 32/33
Programozási alapismeretek 1. előadás vége