Algoritmikus gondolkodás

Hasonló dokumentumok
Algoritmusok és a programozás alapjai

Programozás alapjai (ANSI C)

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Webprogramozás szakkör

Java programozási nyelv

Algoritmizálás + kódolás C++ nyelven és Pascalban

Algoritmizálás és adatmodellezés tanítása 1. előadás

Algoritmusok, adatszerkezetek, objektumok

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Algoritmusok. Dr. Iványi Péter

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás I. gyakorlat

Programozási alapismeretek 1. előadás

Objektumorientált Programozás III.

Felvételi tematika INFORMATIKA

Algoritmusok helyességének bizonyítása. A Floyd-módszer

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programok értelmezése

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

értékel függvény: rátermettségi függvény (tness function)

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Vezérlési szerkezetek

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Hardver leíró nyelvek (HDL)

Webprogramozás szakkör

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

Programozási alapismeretek. 1. előadás. A problémamegoldás lépései. A programkészítés folyamata. Az algoritmus fogalma. Nyelvi szintek.

Szoftvertervezés és -fejlesztés I.

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Informatika terméktervezőknek

Java II. I A Java programozási nyelv alapelemei

INFORMATIKA tétel 2019

Programozás II. 2. Dr. Iványi Péter

Mintavételes szabályozás mikrovezérlő segítségével

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

A C programozási nyelv I. Bevezetés

Programtervezés. Dr. Iványi Péter

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

B I T M A N B I v: T M A N

Programozás alapjai. 5. előadás

3 A C programozási nyelv szintaktikai egységei

Egyenletek, egyenlőtlenségek V.

INFORMATIKA javítókulcs 2016

S z á m í t ó g é p e s a l a p i s m e r e t e k

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Informatika E FAKT , = ±

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A C programozási nyelv I. Bevezetés

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

AZ ALGORITMUS. az eredményt szolgáltatja

Programozás alapjai. 2. előadás

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Scratch bevezető foglalkozás Scratch bevezető foglalkozás

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Python bevezető foglalkozás Python bevezető foglalkozás

C programozás. 1 óra Bevezetés

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Információs Technológia

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozási tételek általánosítása 2. Szlávi Péter 2015

Java II. I A Java programozási nyelv alapelemei

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozás alapjai 1.Gy: Algoritmizálás P R O

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

10. gyakorlat Tömb, mint függvény argumentum

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Matematika 11. osztály

Gyakorló feladatok Gyakorló feladatok

Programzás I gyakorlat

Programozási alapismeretek 3. előadás

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

2018, Diszkrét matematika

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Átírás:

Algoritmikus gondolkodás Varga Imre Debreceni Egyetem, Informatikai Kar Kizárólag belső használatra! 2015.12.02

Témák Hogyan írjunk le és oldjunk meg problémákat? Hogyan osszunk fel egy problémát kisebbekre? Mi is az az algoritmus? Milyen tulajdonságai vannak? Hogyan írhatunk le algoritmusokat? Mit jelent a program írás? És még sok minden más 2

Számítógépes probléma megoldás Szorosan kapcsolódva a szoftver életciklushoz

Számítógépes probléma megoldás Probléma definíció Megoldási vázlat Részletes megoldási terv Tesztelési stratégia fejlesztés Program kódolás és tesztelés Dokumentáció befejezés Program karbantartás 4

1: Probléma definíció Mi az ismeretlen (az elvárt eredmény)? Mi az összefüggés a rendelkezésre álló információk és az ismeretlen között? A megadott információk elegendőek egyáltalán a probléma megoldásához? A probléma leírásnak precíznek, pontosnak kell lennie A felhasználónak és a programozónak együtt kell működnie A probléma teljes specifikációjára szükség van, az inputot és a kívánt outputot is beleértve 5

2: Megoldási vázlat A probléma körvonalának definiálása Az eredeti probléma több részproblémára osztása A részproblémák legyenek kisebbek és könnyebben megoldhatóak Ezek megoldásai a végső megoldás komponensei lesznek Oszd meg és uralkodj! 6

3: Részletes megoldási terv Az előző lépésben nincs megmondva hogyan kell a részfeladatokat végrehajtani Finomítás szükséges a részletek megadásával Kerülni a félreérthetőséget A pontos módszer tartalmazza a jól meghatározott lépések sorozatát, amit algoritmusnak hívunk Különböző formalizmusokkal írható le 7

4: Tesztelési stratégia fejlesztés Ki kell próbálni az algoritmust több különböző input kombinációval hogy biztosak legyünk, hogy jó eredményt ad minden esetben Ezeket a különböző bemeneti adat kombinációkat teszt eseteknek nevezzük Ez nemcsak normál adatokat foglal magába, hanem extrém bemeneteket is, hogy teszteljük a határokat Komplett teszt esetekkel ellenőrizhetjük magát az algoritmust 8

5: Program kódolás és tesztelés Az előző szinteken leírt algoritmus nem hajtható végre közvetlenül a számítógép által Át kell alakítani egy konkrét programnyelvre A kódolás közben/után tesztelni kell a programot a kidolgozott tesztelési stratégia szerint Ha hibára derül fény, akkor megfelelő átdolgozásra és újratesztelésre van szükség, amíg a program minden körülmények között jó eredményt nem ad A kódolás és tesztelés folyamatát implementációnak hívjuk 9

6: Dokumentáció befejezése A dokumentáció már az első lépésnél elkezdődik és a program egész élettartamán át tart Tartalmazza: Az összes lépés magyarázatát A meghozott strukturális döntéseket A felmerült problémákat A program szövegét és annak magyarázatát Felhasználói utasításokat stb. 10

7: Program karbantartás A program nem megy tönkre Néha viszont hibázhat, összeomolhat, elbukhat A programhibák oka, hogy sosem volt tesztelve az adott körülmények között Az újonnan felfedezett hibákat ki kell küszöbölni (átadás után is) Néha a felhasználóknak új igényei, elvárásai vannak a programmal szemben Ennek megfelelően át átalakítás, bővítés lehet szükséges Ezek után frissíteni kell a dokumentációt is 11

Részletes megoldási terv Algoritmus

Algoritmus Terv jól ismert tevékenységek sorozatának végrehajtására, amivel elérhetjük a kívánt célt. Precíz definíciója tevékenységeknek, amelyeknek a végrehajtása megadja a megoldási vázlat minden egyes részfeladatának a megoldását. Néhány tulajdonsága: Pontos, félreérthetetlen Minden eshetőségre felkészített Tevékenységek véges sorozata Elérhető vele a cél, megadja a megoldást Hatékony, elegáns, egyszerű, 13

Algoritmusok leírása Verbális Folyamatábra Pszeudokód Struktogram Grafikus Algebra-szerű Adat-folyam diagram Hierarchikus Táblázatos 14

Példa y=sign(x) függvény Mi az? Mit jelent? Mi az eredmény? Hogyan működik? Hogyan tudjuk meghatározni az értékét? Ha x egyenlő -4, mi az y értéke? 15

y=sign(x) Verbális reprezentáció: 1. Ha x egyenlő 0, y értéke legyen 0! 2. Különben ha x nagyobb, mint 0, y értéke legyen +1! 3. Egyébként ha x kisebb, mint 0, akkor a függvény adjon -1 értéket! 16

y=sign(x) Grafikus reprezentáció: y +1 0 x -1 17

y=sign(x) Algebra-szerű reprezentáció: x R y {-1, 0, +1} x, x>0 y=+1 x, x<0 y=-1 x=0 y=0 18

y=sign(x) Struktogramos reprezentáció: igen y=0 x=0 nem x>0 igen nem y=+1 y=-1 19

y=sign(x) Folyamatábrás reprezentáció: Start igaz x=0 hamis y=0 igaz x>0 hamis y=+1 y=-1 Vége 20

y=sign(x) Pszeudokódos reprezentáció: if x=0 then y=0 else if y>0 then y=+1 else y=-1 endif endif 21

Folyamatábra Kiindulópont Start Elemi utasítás X=1 Input/output Be: y Feltétel igen x<y nem Végállapot Vége Csak a nyilak mentén haladhatunk. 22

Az algoritmus alap struktúrái folyamatábrával Szekvencia Elágazás Ismétlés Start Start Start Feladat 1 igaz feltétel hamis feltétel hamis Feladat 2 Feladat A Feladat B igaz Feladat 3 Vége Vége Feladat Vége 23

Algoritmusok módosítása Az algoritmusokat gyakran módosítani kell, hogy jobbak legyenek. Általánosítás: több esetre is alkalmazható legyen Kiterjesztés: esetek újfajta körére is alkalmazható legyen Beágyazás: egy algoritmus újrahasznosítása egy másikon belül Bolondbiztossá tétel: megbízhatóvá, robosztussá, hibaelkerülővé tétel 24

Algoritmus általánosítása Eredeti: Start Általánosított: Start Be: nettó Be: nettó, ÁFA bruttó=nettó*(100%+25%) bruttó=nettó*(100%+áfa) Ki: bruttó Ki: bruttó Vége Vége 25

Algoritmus kiterjesztése Eredeti: Start Kiterjesztett: Start Be: óraszám, óradíj igen Főnök? nem fizetés=óraszám*óradíj Be: profit Be: óraszám, óradíj Ki: fizetés fizetés=profit/2 fizetés=óraszám*óradíj Vége Ki: fizetés Vége 26

Algoritmus beágyazása Eredeti: y=abs(x) Start Beágyazott: y=sign(x) Start x=0 hiba! igaz x<0 hamis Be: x y=-x y=+x igaz x<0 hamis Vége y=-x y=+x Ki: x/y Vége 27

Algoritmus bolondbiztossá tétele Eredeti: Start Be: kor Bolondbiztos: Start Be: kor igen kor<18 nem igen kor<0 nem Ki: gyerek Ki: felnőtt Ki: hiba igen kor<18 nem Vége Ki: gyerek Ki: felnőtt Vége 28

Alternatív algoritmus Gyakran többféleképpen is elérhetjük ugyanazt a célt. Az algoritmusoknak különböző lehet a szerkezete, de azonos lehet a viselkedése. Ez azt jelenti, hogy azonos bemeneti adatokra azonos eredményeket adnak, de ezt máshogy érik el. Néha hasznos az egyik algoritmust előnyben részesíteni, néha viszont mindegy melyiket használjuk. Olykor az egyik algoritmus határozottan egyszerűbb, kisebb, gyorsabb, megbízhatóbb lehet mint a többi. 29

Alternatív algoritmus Start y=sign(x) Start igaz y=0 Be: x x=0 igaz y=+1 hamis x>0 hamis y=-1 hamis Be: x y=x x 0 igaz y=-x igaz x<0 hamis Ki: y Ki: x Ki: x/y Vége Vége 30

Az algoritmusok tulajdonságai Teljes: Minden lehetséges esetre/részletre tekintettel pontosan megadott Félreérthetetlen: csak egyféleképpen értelmezhető tevékenységek Determinisztikus: az utasításokat követve mindig biztosan elérhető a cél, a megoldás Véges: korlátozott számú lépés után véget ér az utasítássorozat 31

Rossz algoritmus Hogyan jussunk el a 2.-ról az 5. emeletre lifttel? 1. Nyomd meg a lift hívógombját! 2. Szállj be! 3. Nyomd meg az 5 gombot! 4. Várj! 5. Ha az ajtó kinyílik, szállj ki! Probléma (nem teljes): Mi van, ha az érkező lift lefelé megy? Mi van, ha valaki miatt megáll a lift a 3. emeleten is? 32

Rossz algoritmus Hogyan készítsünk sült csirkét? 1. Tedd be a csirkét a sütőbe! 2. Állítsd be a hőmérsékletet! 3. Várj amíg kész lesz! 4. Szolgáld fel! Problémák (félreérthetőség): Mi a megfelelő hőmérséklet (50 C vagy 200 C)? Fagyasztott vagy élő csirke? Honnan tudjuk, hogy kész van? 33

Rossz algoritmus Hogyan legyünk milliomosok? 1. Vegyél egy lottót! 2. Húzd le a kívánt számokat! 3. Várj a nyereményre (vagy szomorkodj)! Problémák (véletlenszerű, not determinisztikus): Az esetek többségében nem leszünk milliomosok. Csak néha működik, pedig mindig ugyanazt csináljuk. 34

Rossz algoritmus Hogyan buszozzunk? 1. Várj a buszra! 2. Szállj fel! 3. Vegyél jegyet! 4. Ülj le! 5. Ha megérkeztél, szállj le! Problémák (végtelen): Ha nem megállóban vársz a busz sosem áll meg. Ha rossz buszra szálltunk sosem szállhatunk le róla. 35

Nyilvános érmés telefon használata Start Kagyló fel Érme bedob Tárcsáz Beszél Kagyló le Vége Problémák: Nem teljes Félreérthető Módosítás: Általánosítás Kiterjesztés Bolondbiztosá tétel Teljessé tétel Félreértések elkerülése 36

Nyilvános érmés telefon használata Várj Start Kagyló fel Érme bedob igen Vonal van? nem igen Helyi hívás? nem körzetszám nem Beszélj Folytatod? igaz Lokális szám nem A pénz elég? igen igen Foglalt? nem Várj nem Van még pénz? igen igen Kagyló le Érme vissza Van válasz? nem Kagyló le Pénz bedob igen Újra? nem Vége 37

Feladatok és példák E-mail írás Cipővásárlás TV nézés Tárgyteljesítés Mikrohullámú sütő használat Fizetés a kasszánál Telefonálás mobillal Gyalogosként átkelni az úttesten Járművel áthajtani a kereszteződésen 38

Feladatok és példák Hogyan változik az x, y és s értéke a folyamat során, ha kezdetben x=5 és y=4? Mi a kimenet ebben az esetben? Hányszor lett kiértékelve a feltétel? Mit csinál az algoritmus? Hogyan változtatnád meg az algoritmust, hogy x és y szorzatát határozza meg? hamis ki: s Vége Start be: x, y s=x y>0 igaz s=s+1 y=y-1 39

Feladatok és példák Hogyan változik az x, y és s értéke a folyamat során, ha a bemenet 10? Mi a kimenet, ha a bemenet 60? Mit ír le az algoritmus? Működik, ha x=1? Ha az input 24, hányszor ismétlődik a ciklus? Hogy lehetne gyorsabbá tenni? igaz ki: y x=x/y x%y=0 igaz Start be: x y=2 y<=x hamis y=y+1 hamis Vége 40

Feladatok és példák Ez a folyamatábra a maradékos osztás műveletét írja le. Helyettesítsd be a kifejezéseket. Start a<=b a<0 b<=0 a=a-b hamis be: a, b ki: error ki: a Vége hamis hamis igaz igaz igaz 41

Feladatok és példák Szökőév meghatározása Hatványozás Faktoriális kiszámítása Elsőfokú egyenlet megoldása Az év hányadik napja Decimális szám konvertálása binárissá Bináris számok inkrementálása Bináris számok összeadása Keresés rendezett bináris fában Fibonacchi sorozat 42

Pszeudokód Szekvencia: Elágazás: Ismétlés: utasítás1 utasítás2 utasítás3 iffeltétel then utasítás1 else utasítás2 endif while feltétel do utasítás enddo 43

Feladatok és példák input a if a<0 then b=-1*a else b=a endif output b Mi a kimenet, haa=10? Mi a kimenet, haa=-4? Mit csinál az algoritmus? Mit csinál ez az algoritmus? input a if a<0 then a=-1*a endif output a 44

Feladatok és példák input a A folyamatábra és a pszeudokód input b ugyanazt az algoritmust írják le? c=a if b>0 then Start b=b-1 c=c-1 be: a, b else c=a output c endif hamis b>0 igaz ki: c b=b-1 Vége c=c-1 45

Feladatok és példák input a input b c=a while b>0 do b=b-1 c=c-1 enddo output c Hogyan változik a, b és c értéke a folyamat során, ha a=7 és b=3? Mi a kimenet ebben az esetben? Hányszor kell kiértékelni a feltételt? Mit csinál az algoritmus? 46

Feladatok és példák Írd le azt a folyamatábrát pszeudokóddal! Start be: x igaz x=0 hamis y=0 igaz y=+1 x>0 hamis y=-1 ki: y Vége 47

Feladatok és példák Írd le azt a folyamatábrát pszeudokóddal! Start be: x s=0 hamis ki: s Vége x>0 igaz s=s+x x=x-1 48

Feladatok és példák Írd le azt a folyamatábrát pszeudokóddal! Start be: x igaz x=0 hamis ki: x igaz x>0 hamis Vége x=x-1 x=x+1 49

Feladatok és példák Algoritmus verbális leírása: 1. Mondj egy számot! 2. Ellenőrizd, hogy nagyobb mint egy vagy nem! 3. Ha nagyobb, vonj ki belőle kettőt és menj a 2. lépéshez! 4. Különben ellenőrizd, hogy 0-e az érték! 5. Ha 0, akkor írd ki, hogy páros! 6. Különben írd ki, hogy páratlan! Írd le az algoritmust pszeudokóddal! 50

Feladatok és példák Írd le az alábbi algoritmusokat pszeudokóddal! Abszolút érték meghatározás Számok összege 10-től 20-ig Hatványozás Elsőfokú egyenlet megoldása Faktoriális kiszámítása Eldönteni egy számról, hogy prím-e Prím tényezőkre bontás Fibonacchi sorozat 51

Feladatok és példák Tömb elemeinek átlaga Megkeresni egy elemet egy (rendezett) tömbben Minimum/maximum keresése Szélsőérték helyének megkeresése Két változó értékének felcserélése Közvetlen kiválasztásos rendezés Közvetlen beszúrásos rendezés Buborék rendezés Keresés rendezett bináris fában 52

Tesztelési stratégia fejlesztés

Tesztelési stratégia példa Másodfokú egyenlet megoldása Általános alak: ax 2 + bx + c = 0 Bemeneti paraméterek: a, b, c Megoldás: Start be: a, b, c d = b 2-4ac x 1 = (-b+d 1/2 )/2a Minden esetre működik? x 2 = (-b-d 1/2 )/2a Mi a kimenet ha a=1, b=2 és c=1? ki: x 1, x 2 Mi a kimenet ha a=1, b=2 és c=2? Vége 54

Tesztelési stratégia példa Start be: a, b, c d = b 2-4ac Minden esetre működik? Mi a kimenet, ha a=0, b=2 és c=6? igaz x 1 = (-b-d 1/2 )/2a d>0 hamis igaz d=0 hamis x 1 = (-b+d 1/2 )/2a x= -b/2a ki: x 1, x 2 ki: x ki: nincs megoldás Vége 55

Tesztelési stratégia példa d = b 2-4ac Start be: a, b, c hamis a=0 igaz Minden esetre működik? Mi a kimenet, ha a=0, b=0 és c=1? igaz x 1 = (-b-d 1/2 )/2a d>0 hamis igaz d=0 hamis x 1 = (-b+d 1/2 )/2a x= -b/2a x= -c/b ki: x 1, x 2 ki: x ki: nincs megoldás ki: x Vége 56

Tesztelési stratégia példa Start be: a, b, c Minden esetre működik. x 1 = (-b-d 1/2 )/2a d = b 2-4ac hamis a=0 igaz d>0 hamis igaz igaz d=0 hamis igaz b=0 hamis x 1 = (-b+d 1/2 )/2a x= -b/2a x= -c/b ki: x 1, x 2 ki: x ki: nincs megoldás ki: x Vége 57

Tesztelési stratégia példa A jó megoldás pszeudokóddal: Minden esetre működik. Hogy elérjük ezt az állapotot tesztelnünk kellett az algoritmust különböző input kombinációkra és folyamatosan módosítanunk kellett azt. Tesztelési stratégiát alakítottunk ki. input a, b, c if a=0 then if b=0 then output error else x=-c/b output x endif else d=b*b-4*a*c if d>0 then x1=(-b+sqrt(d))/(2*a) x2=(-b-sqrt(d))/(2*a) output x1, x2 else if d=0 then x=-b/(2*a) output x else output error endif endif endif 58

A használt tesztelési stratégia a b c Magyarázat OK 3 7 2 Általános eset (nem 0, d>0) 0 2 6 a nulla (első fokú) 2 0 5 b nulla ( x 2 =-c/a ) 1 2 0 c nulla ( x[ax+b]=0 ) 0 0 1 Több nulla (nem egyenlet) 1 2 2 d<0 (nincs megoldás) 1 2 1 d=0 (csak egy megoldás) -2-3 -9 negatív bemenetek 2.3 4.2 0.83 nem egész bemenetek 0.00001 1000000 1 extrém kicsi/nagy értékek 59

Program kódolás és tesztelés Forráskód létrehozása egy valós programnyelven

Szintaxis és szemantika Szintaxis: A program szövegének formai szabályai. Szemantika: A kívánt algoritmust írja le? Példa (abszolút érték): input a if a>0 then a=-1*a enidf output a Szemantikai hiba Szintaktikai hiba 61

Programozási nyelvek szintaxisa Fortran: REAL FUNCTION FAKT(I) FAKT=1 IF (I.EQ. 0.OR. I.EQ. 1) RETURN DO 20 K=2,I 20 FAKT=FAKT*K C: RETURN END long fakt(long n){ if (n<=1) return 1; else return n*fakt(n-1); } Pascal: FUNCTION FAKT(I:INTEGER):REAL; BEGIN IF I=0 THEN FAKT:=1 ELSE FAKT:=FAKT(I-1)*I; END; 62

A forráskód egységei és elemei Karakter készlet Lexikai egység Szintaktikai egység Utasítás Program egység Fordítási egység Program Komplexitás nő Minden nyelvben különböző karaktereket, szimbólumokat, speciális kulcsszavakat, kifejezéseket és szabályokat használunk. 63

C programozási nyelv A nyelv néhány főbb eleme ( erősen lebutítva ): Adattípusok: int, float, char, Konstansok: 21, 34.5, A, alma, Operátorok: +, -, *, /, %, =, ==, >=, <=,!=, &&,, Elágaztatás: if-else, switch-case Ciklusszervezés: while, for, do-while Input/output: printf(), scanf() (beépített alprogramok) Megjegyzés: /* komment */, //komment Stb. 64

C programozási nyelv 65