1 Információk 2 A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin Elérhetőség mesko.katalin@tfk.kefo.hu Fogadóóra: szerda 9:50-10:35 Számonkérés időpontok Április 25. 9 00 Május 17. 9 00 Június 7. 9 00 írásban elégségeshez: 50% Segédanyag www.ketif.hu oldalon A félév célja algoritmikus gondolkodás kifejlesztése Ismétlés Ismétlés II. 3 4 Algoritmus Pontos előírás, amely megmondja, hogy egy adott típushoz tartozó összes feladat megoldásakor a kezdeti adatokon milyen műveleteket milyen meghatározott sorrendben kell elvégezni. Tulajdonságai meghatározott széleskörű véges megvalósítható Algoritmus ábrázolása szerkezeti diagram pszeudo kód Programozás fázisai Problémafelvetés () Specifikáció a további lépések a kódoláshoz kapcsolódnak Ismétlés III. Két egész szám viszonya 5 Határozzuk meg, hogy hogyan viszonyul egymáshoz két egész szám (kisebb, nagyobb egyenlő)! (a, b) a és b vizsgálata Egész a Egész b Be: a Be: b Ha a < b akkor Kiír: a kisebb b-nél // változók definiálása //változók bekérése //1. feltétel //ha az 1. feltétel teljesül : a kisebb b-nél a < b a > b //ha az 1. feltétel nem teljesül Ha a > b akkor //2. feltétel Kiír: a nagyobb b-nél //ha a 2. feltétel teljesül //ha a 2. feltétel nem teljesül : a nagyobb b-nél : a egyenlő b-vel Kiír: a egyenlő b-vel 6
Ismétlés IV. Melyik szám nagyobb? Határozzuk meg, hogy két egész szám közül melyik a nagyobb! (a, b) a és b vizsgálata Egész a Egész b Be: a Be: b Ha a > b akkor Kiír: a nagyobb b-nél // változók definiálása //változók bekérése //1. feltétel //ha az 1. feltétel teljesül //ha az 1. feltétel nem teljesül : a nagyobb b-nél a > b b > a Ha b > a akkor //2. feltétel Kiír: b nagyobb a-nál //ha a 2. feltétel teljesül //ha a 2. feltétel nem teljesül : b nagyobb a-nál : a egyenlő b-vel Kiír: a egyenlő b-vel 7 8 Ismétlés V. Melyik szám kisebb? Határozzuk meg, hogy két egész szám közül melyik a kisebb! (a, b) a és b vizsgálata Egész a Egész b Be: a Be: b Ha a < b akkor Kiír: a kisebb b-nél // változók definiálása //változók bekérése //1. feltétel //ha az 1. feltétel teljesül //ha az 1. feltétel nem teljesül : a kisebb b-nél a < b b < a Ha b < a akkor //2. feltétel Kiír: b kisebb a-nál //ha a 2. feltétel teljesül //ha a 2. feltétel nem teljesül : b kisebb a-nál : a egyenlő b-vel Kiír: a egyenlő b-vel 9 10 Algoritmusok Algoritmusok II. 11 12 Számítsuk ki, hogy a nap két időpontja között mennyi idő telt el! Specifikáció Input két időpont (óra, perc formában) O1, P1, O2, P2 Bemeneti feltétel az óra és perc értékek a valóságnak megfeleljenek Output O és P az eltelt idő Az eltelt idő percben kifejezve (O2 * 60 + P2) (O1 * 60 + P1) = K, ahol K az eltelt idő percben Egész o1, o2, p1, p2 Egész o, p Egész k Be: o1, p1 Be: o2, p2 Vizsgáld meg, hogy helyesek-e az adatok! k = (o2 * 60 + p2) (o1 * 60 + p1) o = k / 60 egészrésze p = k / 60 maradéka Ki: Az eltelt idő:, o, óra és, p, perc.
Eltelt idő Algoritmusok III. 14 K = a különbség percben K = (o2 * 60 + p2) - (o1 * 60 + p1) Számítás o és p kiszámítása O = K / 60 egészrésze P = K / 60 maradéka Határozzuk meg, hogy milyen háromszöget határoz meg három egész szám, mint a háromszög három oldalhosszúsága! Specifikáció Input a, b, c pozitív egész számok Bemeneti feltétel adatok átrendezése szükséges, hogy a b c teljesüljön. Hogyan lehet átrendezni/cserélni az értékeket? Átrendezés után Nem háromszög, ha a b + c Szabályos háromszög, ha a = b és b = c Egyenlőszárú háromszög, ha a = b vagy b = c vagy a = c Derékszögű háromszög, ha a 2 = b 2 + c 2 13 Output A háromszög típusa Algoritmusok IV. Algoritmusok V. 15 16 Egész a, b, c Be: a, b, c Cseréld ki a változók értékét, hogy a b c teljesüljön Ha a b + c akkor Ki: Ez nem háromszög. Ha a = b és b = c akkor Ki: Szabályos háromszög. Ha a = b vagy b = c vagy a = c akkor Ha a 2 = b 2 + c 2 akkor Ki: Egyenlőszárú derékszögű háromszög. Ki: Egyenlőszárú háromszög. Ha a 2 = b 2 + c 2 akkor Ki: Derékszögű háromszög. Ki: Egyéb háromszög. Háromszög Osztályozás a, b, c átrendezése Osztályozás a és b átrendezése a és c átrendezése b és c átrendezése N Sz E D i a < b n i a < c n i b < c n Nem háromszög Szabályos háromszög Egyenlőszárú háromszög Derékszögű háromszög Egyéb D a és b cseréje a és c cseréje b és c cseréje i n m = a 17 a = b b = m m = a a = c c = m m = b b = c c = m 18 Egyenlőszárú derékszögű háromszög Egyenlőszárú háromszög
Sorok, sorozatok Sorok, sorozatok II. 19 20 Dolgok egy listája pl. számok, függvények, betűk, stb. A lista tagjainak sorrendje jól meghatározott Y, C, R nem ugyanaz mint R, Y, C Egy elem többször is előfordulhat Megnevezések Sorozat tagjai elemek Elemek száma sorozat hosszúsága Elemek számától függően Véges sorozat A, B, C, D Végtelen sorozatok pl. a pozitív páros számokból (2, 4, 6 ) képzett sorozat Részsorozat az eredeti sorozat néhány elemének elhagyásával kapjuk az elemek egymáshoz viszonyított sorrendjét nem változtatjuk meg Sorok, sorozatok: Számtani sorozat Sorok, sorozatok: Számtani sorozat II. 21 22 Aritmetikai sorozat Legalább három számból álló (véges, végtelen) sorozat A szomszédos elemek különbsége állandó különbség differencia (d) Példák csupa azonos elemből álló konstans sorozat: 1, 1, 1, 1,... (d = 0) természetes számok sorozata: 0, 1, 2, 3, 4,... (d = 1) páros számok sorozata: 0, 2, 4, 6, 8,... (d = 2) 101, 81, 61, 41, 21, 1, -19,... (d = -20) A számtani sorozat n. eleme a n = d * n + (a 1 d) vagy a n = a 1 + (n - 1) * d; Írjuk ki a számtani sorozat első n db elemét! Egész a1, d Egész ai, i Be: a1 Be: d i vegye fel 1-től db-ig az értékeket és hajtsd végre ai = d * i + (a1 d) Sorok, sorozatok: Számtani sorozat III. 23 Számtani sorozat A ciklus másképpen ai = a1 i vegye fel 1-től db-ig az értékeket és hajtsd végre ai = ai + d; i = 1 db ai = d * i + (a1 d) 24
Sorok, sorozatok: Mértani sorozat Sorok, sorozatok: Mértani sorozat II. 25 26 Legalább három számból álló (véges, végtelen) sorozat A szomszédos elemek (bármelyik tag és az azt megelőző tag) hányadosa állandó hányados kvóciens (q) Példa: csupa azonos elemből álló konstans sorozat: 2, 2, 2, 2,... (q = 1) 2, 6, 18, 54, (q = 3) 90, 30, 10, (q = 1/3) A mértani sorozat n. eleme a n = a 1 *q n-1 : Írjuk ki a mértani sorozat első n db elemét! : Egész a1, q Egész ai, i Be: a1 Be: q i vegye fel 1-től db-ig az értékeket és hajtsd végre ai = a1 * q i-1 Sorok, sorozatok: Mértani sorozat III. 27 A ciklus másképpen Mértani sorozat ai = a1 i vegye fel 1-től db-ig az értékeket és hajtsd végre i = 1 db ai = ai * q; ai = a1 * q i-1 28 Sorok, sorozatok: Fibonacci sorozat Sorok, sorozatok: Fibonacci sorozat II. 29 30 Az első két elem 0 és 1 A további elemeket az előző kettő összegeként kapjuk Fibonacci-sorozat első néhány eleme: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, A Fibonacci sorozat n. eleme a n = a n 1 + a n 2 Természetben megfigyelt Fibonacci-számok Írjuk ki a Fibonacci sorozat első n db elemét! Egész a1, a2 Egész ai, i a1 = 0 a2 = 1 Ki: A sorozat 1. eleme, a1 Ki: A sorozat 2. eleme, a2 i vegye fel 3-tól db-ig az értékeket és hajtsd végre ai = a i-1 + a i-2
Sorozatok összegzése Fibonacci sorozat i = 3 db 32 Nevezetes sorozatok összegzése az első n elem összege Számtani sorozat első n elemének összege ((a 1 + a n ) * n) / 2 a i = a i-1 + a i-2 Mértani sorozat első n elemének összege (a 1 * (q n 1)) / (q 1) 31 Sorozatok összegzése II. Számtani sorozat összegzése 33 Határozzuk meg egy számtani sorozat első n db elemének összegét! Egész a1, an Egész d Egész összeg Be: a1 Be: d an = d * db + (a1 d) összeg = ((a1 + an) * db) / 2 Ki: A mértani sorozat első n elemének összege:, összeg an kiszámítása an = d * n + (a1 d) Számítás Összeg kiszámítása összeg = ((a1 + an) * n) / 2 34 Sorozatok összegzése III. 35 Határozzuk meg egy mértani sorozat első n db elemének összegét! Mértani sorozat összegzése Egész a1 Egész q Egész összeg Be: a1 Be: q összeg = (a1 * (q db 1)) / (q 1) Ki: A számtani sorozat első n elemének összege:, összeg Számítás Összeg kiszámítása összeg = (a1 * (q db 1)) / (q 1) 36
Sorozatok összegzése IV. Sorozatok összegzése V. 37 38 Határozzuk meg egy egész számsorozat legkisebb és legnagyobb elemét, valamint a sorozat átlagát! Specifikáció Input számsorozat, melyet egy végjel zár le, amit a felhasználó ad meg a számsorozat előtt Egész szám, végjel Egész min, max, átlag, db, összeg Be: végjel, szám összeg = 0 db = 0 max = szám min = szám Amíg a szám <> végjel addig hajtsd végre összeg = összeg + szám db = db + 1 Ha a szám < min akkor min = szám egyébként Ha szám > max akkor max = szám Be: szám Ha db = 0 akkor Ki: Üres sorozat. egyébként átlag = összeg / db Ki: A megadott számsorozat minimuma, maximuma és átlaga:, min, max, átlag Min-max-átlag Prímszámkeresés Erathosztenész szitájával 40 Inicializálás szám <> végjel Szám feldolgozása (szám) szám < min Összeg és db feldolgozása szám > max min = szám max = szám 39 Ezzel a módszerrel meghatározhatjuk az n-nél nem nagyobb prímszámokat 1. lépés Írjuk fel egy tetszőlegesen nagy n-ig az 1-nél nagyobb természetes számokat 2. lépés A 2 kivételével töröljük közülük a 2-vel oszthatóakat 3. lépés A megmaradó számok közül a legkisebbel, a 3-al megismételjük az előző eljárást 4. lépés Folytatjuk a fenti módszert, amíg van nem törölt szám 5. lépés A megmaradó számok az n-nél nem nagyobb prímszámok lesznek Faktoriális számítása 41 Faktoriális n! n faktoriális, ahol n 0 egész szám n! = 1 * 2 * 3 * 4 * * n Faktoriális kiszámítása Határozzuk meg n! értékét! Egész n, fakt Egész i Be: n fakt = 1 i vegye fel 1-től n-ig az értékeket és hajtsd végre fakt = fakt * i Ki: A faktoriális értéke:, fakt i = 1 n fakt = fakt * i 42
Faktoriális alkalmazása n alatt k Faktoriális alkalmazása n alatt k II. 43 44 Határozzuk meg n alatt k értékét! n alatt k = n! / (k! * (n k)!) nem célszerű a faktoriálisokat egyenként kiszámolni, mert ezek nagy értékek lennének a nevező egyik tényezőjével tudunk egyszerűsíteni Egész n, k Egész nak Egész i Be: n, k Ha n k és k 1 akkor nak = 1 i vegye fel 1-től k-ig az értékeket és hajtsd végre nak = nak * (n i + 1) / i Ki: n alatt k értéke:, nak Ki: Nem megfelelő értékeket adott meg. További algoritmusok n alatt k 46 Matematikai algoritmusok n k és k 0 Másodfokú egyenlet gyökeinek meghatározása A legnagyobb közös osztó meghatározása Számrendszerek közötti átváltások (2-16) Különböző számrendszereken (2-10) belül végzett műveletek nak = 1 i = 1 k Rendezések Nem matematikai algoritmusok nak = nak * (n i + 1) / i Szöveges (string) típusú változók alkalmazása és ezekkel kapcsolatos műveletek problémái 45 Köszönöm a figyelmet!