Tartalom A
ELTE
1. előadás
programozás során használt nyelvek Az algoritmus A specifikáció Algoritmikus nyelvek – A
11-11-16
A problémamegoldás lépései
11-11-16
3/41
(miből?, mit?) specifikáció (mivel?, hogyan?) adat- + algoritmus-leí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
ELTE
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
4/41
Az algoritmus fogalma
Élőnyelv = Magyar Specifikáció Algoritmusleíró Programozási Gépi
Szlávi-Zsakó: Programozási alapismeretek 1.
2/41
2. Tervezés
ELTE
A nyelvek (magyar gépi) közelítése 11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
1. Specifikálás
Nyelvi szintek
ELTE
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, ...)
Szlávi-Zsakó: Programozási alapismeretek 1.
programkészítés folyamata
A
Programozási alapismeretek
ELTE
problémamegoldás lépései –
5/41
11-11-16
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! Szlávi-Zsakó: Programozási alapismeretek 1.
6/41
Az algoritmus fogalma végrehajtható
ELTE
11-11-16
Az algoritmus fogalma
(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 Szlávi-Zsakó: Programozási alapismeretek 1.
7/41
ELTE
11-11-16
Az algoritmus fogalma
ELTE
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!
ELTE
Szlávi-Zsakó: Programozási alapismeretek 1.
9/41
11-11-16
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. …
Szlávi-Zsakó: Programozási alapismeretek 1.
10/41 10/41
Az algoritmus fogalma
Dobj be öt 20 Ft-ost: 1. Ismételd 5-ször: Dobj be egy 20 Ft-ost! ELTE
ELTE
Új algoritmikus elem: ismétlés adott darab-számszor
Szlávi-Zsakó: Programozási alapismeretek 1.
8/41
Új algoritmikus elem: választás két tevé-kenység közül, esetleg nemdeterminisz-tikus választás
Az algoritmus fogalma
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
Az algoritmus fogalma
Új algoritmikus elem: ismétlés feltételtől függően 11-11-16
Az alapalgoritmus elemei: egymásutáni végrehajtás nem-determinisztikusság párhuzamosság
11/41 11/41
11-11-16
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) Szlávi-Zsakó: Programozási alapismeretek 1.
12/41 12/41
A specifikáció 1. 2. 3. ELTE
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 fogalmak definíciói Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
13/41 13/41
ELTE
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
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Példa: háromszög
Példa: háromszög
(algoritmus)
(specifikáció)
ELTE
Feladat: 3 szám lehet-e egy derékszögű háromszög 3 oldala? Specifikáció: Bemenet: x,y,z:Valós Valós Kimenet: lehet:Logikai Logikai Előfeltétel: x>0 és y>0 és z>0 Utófeltétel: lehet=(x2+y2=z2)
Algoritmus:
ELTE
Szlávi-Zsakó: Programozási alapismeretek 1.
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! 11-11-16
Megjegyzés: később eltekintünk a beés ki-menet algoritmizálásától! 11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
egyenlet
(algoritmus)
(specifikáció)
Egy másik algoritmus a lényegi
ELTE
xx:=x2 yy:=y2 zz:=z2 lehet:=(xx+yy=zz )
ELTE
Feladat: Adjuk meg a másodfokú egyenlet egy megol-dását! Az egyenlet: ax2+bx+c=0 Kérdések:
Bevezethetők/-endők segéd (belső, saját) változók. Szlávi-Zsakó: Programozási alapismeretek 1.
Mi a megoldás? – kimenet Mit jelent: „megoldásnak lenni”? – utófeltétel
11-11-16
16/41 16/41
Példa: másodfokú
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
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
18/41 18/41
Példa: másodfokú
Példa: másodfokú
egyenlet
egyenlet
(specifikáció)
(specifikáció)
Specifikáció1: Bemenet: ELTE
a,b,c:Valós Valós Kimenet: x:Valós Valós Előfeltétel: – Utófeltétel 1: ax2+bx+c=0
ELTE
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! Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Specifikáció2: Bemenet: a,b,c:Valós Valós Kimenet: x:Valós Valós Előfeltétel: a0
19/41 19/41
Nyitott kérdések:
Mindig van megoldás? Egy megoldás van? Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Példa: másodfokú egyenlet
egyenlet
(specifikáció)
(algoritmus)
ELTE
van x
Algoritmus: d:=b2-4*a*c
b b 4 a c 2 a 2
van:=d0
ELTE
van?
I Igaz-ág
x :
Nyitott kérdés:
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
egyenlet
21/41 21/41
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
(algoritmus)
Szöveges
Program MásodfokúEgyenlet: d:=b2-4*a*c van:=d≥0 b d Ha van akkor x : 2 a Program vége.
Szlávi-Zsakó: Programozási alapismeretek 1.
22/41 22/41
Algoritmusleíró nyelvek
Algoritmus másképpen:
11-11-16
b d 2 a
N
Hamis-ág
Egy megoldás van? – hf .
Példa: másodfokú
ELTE
20/41 20/41
Példa: másodfokú
Kimenet bővítés: Kimenet: x:Valós Valós,, van:Logikai Logikai 2 Utófeltétel: van=(b 4*a*c) és
b b2 4 a c 2 a
Mondatokkal leírás Mondatszerű elemekkel – pszeudokód
ELTE
Rajzos
23/41 23/41
11-11-16
leírás
leírás
Folyamatábra Struktogram
Szlávi-Zsakó: Programozási alapismeretek 1.
24/41 24/41
Struktogram
Struktogram
(és pszeudokód)
(és pszeudokód) Ciklusok:
Szekvencia: Utasítás1 Utasítás2
ELTE
Ciklus amíg Feltétel ciklusmag utasításai Ciklus vége ELTE
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
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
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) Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
Keretrendszer:
Első
Code::Blocks
26/41 26/41
elindításkor:
a fordítóprogram kiválasztása
Letöltés: ELTE
www.codeblocks.org
ELTE
Telepítés:
értelemszerűen
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
ELTE
2.
11-11-16
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
Használat 1.
27/41 27/41
lépései:
Használat
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
Szlávi-Zsakó: Programozási alapismeretek 1.
ELTE
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
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
30/41 30/41
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
Használat
Használat
a projekt munkakörnyezete a diszken
ELTE
további lépései:
fordítóválasztás a munkakörnyezet kialakítás befejezése fordító
projektnév
ELTE
projekt szülőkönyvtár projektfájlnév
fejlesztendő?
projektfájlnév útvonallal
végleges?
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
A
további lépései:
a fejlesztendő környezete
a végleges környezete 31/41 31/41
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
kialakult munkakörnyezet:
A
a diszken:
ELTE
32/41 32/41
kialakult munkakörnyezet:
a diszken:
a keretrendszerben:
ELTE
a keretrendszerben: a program „kibontása”
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
33/41 33/41
11-11-16
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
A
„keletkezett 0. program” fordítása
A
34/41 34/41
kialakult munkakörnyezet:
ELTE
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
a diszken:
ELTE
Szlávi-Zsakó: Programozási alapismeretek 1.
35/41 35/41
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
36/41 36/41
A
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
kialakult munkakörnyezet:
A
a diszken:
kialakult munkakörnyezet:
a main.cpp tartalma: #include
ELTE
ELTE
using namespace std; int main() { cout << "Hello world!" << endl; return 0; 0; }
(meglepő módon?)
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
A
37/41 37/41
Szlávi-Zsakó: Programozási alapismeretek 1.
11-11-16
Kódolás
Kódolás
(fejlesztői környezet)
(fejlesztői környezet)
kialakult munkakörnyezet:
A
a elsőProg.cbp tartalma (xml):
futó konzolalkalmazás:
ELTE
ELTE
a futás eredmény e
(mily meglepő!)
visszaado tt érték
11-11-16
Szlávi-Zsakó: Programozási alapismeretek 1.
Programozási alapismeretek 1. előadás vége
39/41 39/41
11-11-16
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? Szlávi-Zsakó: Programozási alapismeretek 1. Magyarázat?
40/41 40/41