Programozási alapismeretek 1. előadás
ELTEELTE
Tartalom
A problémamegoldás lépései –programkészítés folyamata
A programozás során használt nyelvekAz algoritmusA specifikációAlgoritmikus nyelvek –
struktogram A kódolás –
a fejlesztői környezet
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 22/41/41
ELTEELTE
A problémamegoldás lépései
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, ...)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 33/41/41
ELTEELTE
A programkészítés folyamata
1. Specifikálás (miből?, mit?) → specifikáció2. Tervezés (mivel?, hogyan?) → adat- + algoritmus-
leírás3. 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, -ok6. Hibajavítás (hogyan jó?) → helyes program7. Minőségvizsgálat, hatékonyság (jobbítható-e?,
hogyan?) → jó program8. Dokumentálás (hogyan működik, használható?) →
használható program9. Használat, karbantartás (még mindig jó?) → évelő
(időtálló) program
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 44/41/41
ELTEELTE
Nyelvi szintek
Élőnyelv = pl. magyar ⇓
Specifikációs⇓
Algoritmusleíró⇓
Programozási⇑
Gépi
A nyelvek (élő ⇔ gépi) közelítése
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 55/41/41
ELTEELTE
Az algoritmus fogalma
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!
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 66/41/41
ELTEELTE
Az algoritmus fogalma
végrehajtható (van hozzá végrehajtó)lépésenként hajtható végrea lépések maguk is algoritmusokpontosan definiált, adott végrehajtási
sorrenddelegy folyamat véges hosszúságú, időben
esetleg végtelen leírása
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 77/41/41
ELTEELTE
Az algoritmus fogalma
Az (alap)algoritmus elemeinek végre-hajtási „stratégiái”:
egymásutáni végrehajtásnem-determinisztikusságpárhuzamosság
Gondoljuk meg a példa elemeit ebből a szempontból!
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 88/41/41
ELTEELTE
Az algoritmus fogalma
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!
Új algoritmikus elem: ismétlés feltételtől függően
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 99/41/41
ELTEELTE
Az algoritmus fogalma
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 5 20 Ft-ost
3. …
Új algoritmikus elem: választás két tevé-kenység közül, esetleg nem-determinisz-tikus választás
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1010/41/41
ELTEELTE
Az algoritmus fogalma
Dobj be 5 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
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1111/41/41
ELTEELTE
Az algoritmus fogalma
Az algoritmusok ö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)Alprogram (egy összetett tevékenység,
egyedi néven – absztrakció)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1212/41/41
ELTEELTE
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ények6. Korlátozó tényezők7. A használt fogalmak definíciói
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1313/41/41
ELTEELTE
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
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1414/41/41
ELTEELTE
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ósValósKimenet: lehet:LogikaiLogikaiElőfeltétel: x>0 és y>0 és z>0Utófeltétel: lehet=(x2+y2=z2)
Megjegyzés: a 3 szám sorrendjét ezek sze-rint rögzítettük – z az átfogó hossza!
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1515/41/41
ELTEELTE
Példa: háromszög(algoritmus)
Algoritmus:A programunk három fő rész-
ből áll: az adatok beolvasása, az eredmény kiszámítása, azeredmény kiírása:
Az „elemi” utasításokat egy-egy „dobozba” írjuk. Később a be- és kimenetet nem algoritmizáljuk!
Be: x,y,z [x>0 és y>0 és z>0]
lehet:=(x2+y2=z2)
Ki: lehet
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1616/41/41
ELTEELTE
Példa: háromszög(algoritmus)
Egy másik algoritmus a lényegi részre:
Bevezethetők/-endők segéd (belső, saját) változók.
xx:=x2
yy:=y2
zz:=z2
lehet:=(xx+yy=zz)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1717/41/41
ELTEELTE
Példa: másodfokú egyenlet(specifikáció)
Feladat:
Adjuk meg a másodfokú egyenlet egy megol-dását! Az egyenlet: ax2+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
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1818/41/41
ELTEELTE
Példa: másodfokú egyenlet(specifikáció)
Specifikáció1:
Bemenet: a,b,c:ValósValósKimenet: x:ValósValósElőfeltétel: – Utófeltétel1: ax2+bx+c=0
Megjegyzés: az uf. nem ad algoritmizálható információt. Nem baj, de … próbálkozzunk még!
Megoldóképlet:
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 1919/41/41
a2ca4bb
x2
1,2 ∗∗∗−±−=
ELTEELTE
Példa: másodfokú egyenlet(specifikáció)
Specifikáció2:Bemenet: a,b,c:ValósValósKimenet: x:ValósValósElőfeltétel: a≠0
Mi lenne, ha megengednénk?
Utófeltétel2:
Nyitott kérdések: Mindig van megoldás? Egy megoldás van?
a2
ca4bbx
2
∗∗∗−+−=
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2020/41/41
ELTEELTE
Példa: másodfokú egyenlet(specifikáció)
Kimenet bővítés:Kimenet: x:ValósValós,, van:LogikaiLogikaiUtófeltétel: van=(b2≥4*a*c) és
van →
Nyitott kérdés: Egy megoldás van? – hf .
a2
ca4bbx
2
∗∗∗−+−=
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2121/41/41
ELTEELTE
Példa: másodfokú egyenlet(algoritmus)
d:=b2-4*a*c
van:=d≥0van?
a2
db:x
∗+−=
Igaz-ág Igaz-ág
Hamis-ág Hamis-ág
II NN
Algoritmus:
A feltételes utasítás „3-dobozos” struktúra.
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2222/41/41
ELTEELTE
Példa: másodfokú egyenlet (algoritmus)
Algoritmus másképpen:
Program MásodfokúEgyenlet:
d:=b2-4*a*c
van:=d≥0
Ha van akkor
Program vége.a2
db:x
∗+−=
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2323/41/41
ELTEELTE
Algoritmusleíró nyelvek
Szöveges leírás Mondatokkal leírás Mondatszerű elemekkel – pszeudokód
Rajzos leírás Folyamatábra Struktogram
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2424/41/41
ELTEELTE
Struktogram(és pszeudokód)
Szekvencia:
Elágazások:
Utasítás1Utasítás1Utasítás2Utasítás2
HaHa Feltétel Feltétel akkorakkor Igaz-ág utasításai Igaz-ág utasításaikülönbenkülönben Hamis-ág utasításaiHamis-ág utasításaiElágazás végeElágazás vége
ElágazásElágazás Feltétel1 Feltétel1 eseténesetén Utasítások1 Utasítások1 Feltétel2 Feltétel2 eseténesetén Utasítások2 Utasítások2 … … … … egyéb esetekbenegyéb esetekben Utasítások UtasításokElágazás végeElágazás vége
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2525/41/41
ELTEELTE
Struktogram(és pszeudokód)
Ciklusok:
Struktogramszerkesztés: Táblázatkezelővel/szövegszerkesztővel Célprogramokkal (pl. NSD)
Ciklus amígCiklus amíg Feltétel Feltétel ciklusmag utasításai ciklusmag utasításaiCiklus végeCiklus vége
Ciklus Ciklus ciklusmag utasításaiciklusmag utasításaiamígamíg Feltétel FeltételCiklus végeCiklus vége
Ciklus Ciklus cv=tól ig …cv=tól ig … ciklusmag utasításai ciklusmag utasításaiCiklus végeCiklus vége
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2626/41/41
ELTEELTE
Kódolás(fejlesztői környezet)
Keretrendszer:Code::Blocks
Letöltés:www.codeblocks.org
Telepítés:értelemszerűen
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2727/41/41
ELTEELTE
Első elindításkor:a fordítóprogram kiválasztása
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2828/41/41
ELTEELTE
Használat lépései:1. projekt létrehozása, azaz milyen plat-
formra készül a majdani alkalmazás:Create a new project
2. sablon (template) választása: Console application
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 2929/41/41
ELTEELTE
Használat további lépései: a projekt munkakörnyezete a diszken
projektnév
projekt szü-lőkönyvtár
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3030/41/41
ELTEELTE
Használat további lépései: a projekt munkakörnyezete a diszken
projektnév
projekt szü-lőkönyvtár
projektfájl-név
projektfájl-név útvonallal
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3131/41/41
ELTEELTE
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
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3232/41/41
ELTEELTE
A kialakult munkakörnyezet: a diszken:
a keretrendszerben:
a program „kibontása”
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3333/41/41
ELTEELTE
A kialakult munkakörnyezet: a diszken:
a keretrendszerben:
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3434/41/41
ELTEELTE
A „keletkezett 0. program” fordítása
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3535/41/41
ELTEELTE
A kialakult munkakörnyezet: a diszken:
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3636/41/41
ELTEELTE
A kialakult munkakörnyezet: a diszken:
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3737/41/41
ELTEELTE
A kialakult munkakörnyezet: a main.cpp tartalma:
(meglepő módon?)
#include <#include <iostreamiostream>>
usingusing namespacenamespace std; std;
intint main()main(){{ cout <<cout << "Hello world!" "Hello world!" << endl;<< endl; returnreturn 0 0;;}}
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3838/41/41
ELTEELTE
A kialakult munkakörnyezet: a elsőProg.cbp tartalma (xml):
(mily meglepő!)(mily meglepő!)
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 3939/41/41
ELTEELTE
A futó konzolalkalmazás: „fordítás” – (az utolsó lefordított) futtatás(a) – fordítás+futtatás – és a konzolablak tartalma:
Érdemes elindítani az exe-t! Érdemes elindítani az exe-t! Mit tapasztalt? Magyarázat?Mit tapasztalt? Magyarázat?
visszaadott érték
futási idő
a futás eredménye
Kódolás(fejlesztői környezet)
Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.Horváth-Szlávi-Zsakó: Programozási alapismeretek 1.14-10-0614-10-06 4040/41/41
Programozási alapismeretek1. előadás vége