Programozási alapismeretek 4. előadás
ELTE Programozási tételek – a lényeglényeg Sorozatszámítás – összegzés… Sorozatszámítás Megszámolás Megszámolás Maximum-kiválasztás Maximum-kiválasztás Eldöntés Eldöntés Kiválasztás Kiválasztás Keresés Keresés Programozás tételek – visszatekintésvisszatekintés Tartalom 2/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Programozási tételek (PrT) lényege Célja: Bizonyíthatóan helyes sablon, amelyre magasabb szinten lehet építeni a megol- dást. (A fejlesztés gyorsabb és biztonsá- gosabb.) Szerkezete: 1. absztrakt feladat specifikáció 2. absztrakt algoritmus Egy fontos előzetes megjegyzés: A bemenet legalább egy sorozat… 3/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Programozási tételek (PrT) lényege Felhasználásának menete: 1. a konkrét feladat specifikálása 2. a specifikációban a PrT-ek megsejtése 3. a konkrét feladat és az absztrakt feladat paramétereinek egymáshoz rendelése 4. a konkrét algoritmus „generálása” a megsejtett PrT-ek absztrakt algoritmu- sok alapján, 3. szerint átparaméterezve 5. hatékonyítás programtranszformációk- kal 4/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Programozási tételek Mi az, hogy programozási tétel? Típusfeladat általános megoldása. Sorozat érték Sorozat sorozat Sorozat sorozatok Sorozatok sorozat Sorozat érték 5/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Feladatok: 1. Ismerjük egy ember havi bevételeit és kiadá- sait. Adjuk meg, hogy év végére mennyivel nőtt a vagyona! 2. Ismerjük egy autóversenyző körönkénti ide- jét. Adjuk meg az átlagkörének idejét! 3. Adjuk meg az N számhoz az N faktoriális ér- tékét! 4. Ismerjük egy iskola szakköreire járó tanulóit, szakkörönként. Adjuk meg, kik járnak szak- körre! 5. Ismerünk N szót. Adjuk meg a belőlük össze - állított mondatot! 6/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Csoportosítsunk: Számok összege: „vagyon”, „köridők” Számok szorzata: „faktoriális” Halmazok uniója: „szakkörök” Szavak egymásutánja: „szavak” Mi bennük a közös? N „valamiből” kell kiszámolni „kumuláltan” egy „valamit”! Pl. – vagyon/köridők; – faktoriális; – szakkörök; & – szavak 7/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Specifikáció: Bemenet: N N, X H N Kimenet: S H Előfeltétel: – Utófeltétel: S=F(X 1..N ) F: H N → H, – N tagú összeg; – N tényezős szorzat; – N halmaz uniója; & – N szöveg konkatenációja … 8/52 H: tetszőleges halmaz; H N ={(h 1,…,h N )|h i H } (X 1,…,X N ) sorozat Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE H * ={(h 1,h 2,…)|h i H } Sorozatszámítás változó Probléma: F: N paraméteres művelet, ahol az N változó. 2-paraméteres művelet null-elem Megoldás: Visszavezetjük 2-paraméteres műveletre (pl. helyett +) és egy null-elemre (+ esetén a 0). F(X 1..N )=f(F(X 1..N–1 ),X N ), ha N>0 F(–)=F 0, egyébként Tehát: F: H * → H, F 0 H, Gondolja meg a többi esetén mi az f/F 0 ? – ?/? – ?/? & – ?/? 9/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Specifikáció (a végleges) : Bemenet: N N, X H N Kimenet: S H Előfeltétel: – Utófeltétel: S=F(X 1..N ) Definíció: F: H * H 10/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás H * ={(h 1,h 2,…)|h i H }
ELTE Sorozatszámítás – összegzés Specifikáció (összegzés) : Bemenet: N N, X H N Kimenet: S H Előfeltétel: – Utófeltétel: S= A definíció nyilvánvalóan teljesül, azaz: H : Z vagy R 11/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Algoritmus: Változó N:Egész Konstans maxN:Egész(???) Változó X:Tömb[1..maxN:TH] S:TH statikusan Tehát megállapodunk abban, h. a tételek algoritmusához statikusan deklaráljuk a sorozathoz tartozó tömböt. 12/52 Programparaméterek deklarálása TH: a H halmaznak megfelelő típus – maxN: a tömb maximális mérete Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás Algoritmus ( általánosan ): (összegzés) esetén: S:=F 0 i=1..N S:=f(S,X[i]) S:=0 i=1..N S:=S+X[i] Változó i:Egész 13/52 – Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Sorozatszámítás példa Változó i:Egész 14/52 Specifikáció: Bemenet: N N, Be,Ki Z N Kimenet: S Z Előfeltétel: i (1 i N): Be i,Ki i 0 Utófeltétel: S= Be i –Ki i Algoritmus: S:=0 i=1..N S:=S+Be[i] – Ki[i] Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Megszámolás Feladatok: 1. Ismerjük egy ember havi bevételeit és kiadá- sait. Adjunk meg, hogy hány hónapban nőtt a vagyona! 2. Adjuk meg egy természetes szám osztói szá- mát! 3. Adjuk meg egy ember nevében levő „a” be- tűk számát! 4. Adjunk meg az éves statisztika alapján, hogy hány napon fagyott! 5. Adjuk meg N születési hónap alapján, hogy közöttük hányan születtek télen! 15/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Megszámolás Mi bennük a közös? N darab „valamire” kell megadni, hogy hány adott tulajdonságú van közöttük. 16/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Megszámolás Specifikáció: Bemenet: N N, X H N, T: H L Kimenet: Db N Előfeltétel: – Utófeltétel: Db= T tulajdonság logikai függvény Megjegyzés: A T tulajdonság egy logikai függvényként adható meg. X minden elemről megvizsgálható, hogy ren- delkezik-e az adott tulajdonsággal vagy sem. 17/52 H: tetszőleges halmaz T: tetszőleges tulajdonság-függvény Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Megszámolás Algoritmus: Db:=0 i=1..N T(X[i]) Db:=Db+1 I N Változó i:Egész 18/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Megszámolás példa Specifikáció: Bemenet: N N, Hó N N, Téli?: N L, Téli?(x):=x=1 vagy x=2 vagy x=12 Kimenet: Db N Előfeltétel: i (1 i N): Hó i [1..12] Utófeltétel: Db= 19/52 T: tulajdonság-függvény (Téli?) törzsének behelyettesítése Téli?(Hó i ) Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás x<3 vagy x=12 ↕
ELTE Megszámolás példa Algoritmus: Kérdés: Mi lenne, ha az előfeltétel ( i (1 i N): Hó i [1..12]) nem teljesülne? Db:=0 i=1..N Hó[i]<3 vagy Hó[i]=12 Db:=Db+1 I N Változó i:Egész 20/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás Feladatok: 1. Ismerjük egy ember havi bevételeit és kiadá- sait. Adjunk meg, hogy melyik hónapban nőtt legjobban a vagyona! 2. Adjuk meg N ember közül az ábécében utol- sót! 3. Adjuk meg N ember közül azt, aki a legtöbb ételt szereti! 4. Adjunk meg az éves statisztika alapján a leg- melegebb napot! 5. Adjuk meg N születésnap alapján azt, akinek idén először van születésnapja! 21/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás Mi bennük a közös? N darab „valami” közül kell megadni a legnagyobbat (vagy a legkisebbet). Fontos: Ha legalább 1 elemünk van, akkor legna- gyobb (legkisebb) is biztosan van közöttük! 22/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Specifikáció: Bemenet: N N, X H N Kimenet: Max N Előfeltétel: N>0 Utófeltétel: 1 Max N és i (1 i N): X Max X i másképp: Max= N MaxInd X i i= Maximum-kiválasztás 23/52 A cél egy szummával azonos „tömörségű” operátorral kifejezni. Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás Megjegyzések: Léteznie kell Léteznie kell a : H H L rendezési relációnak. sorszámáltalánosabb A sorszám sorozatok esetén általánosabb, mint az érték, ezért legtöbbször a sorszámot adjuk meg. 24/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás Algoritmus: Megjegyzés: első Többlet tudás: ha több maximális érték is van, akkor közülük az elsőt kapjuk meg. utolsó minimális Kérdések: Hogyan lesz belőle utolsó maximális? Hogyan lesz belőle (első) minimális? Max:=1 i=2..N X[i]>X[Max] Max:=i I N Változó i:Egész 25/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 26/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 27/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 28/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 29/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 30/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 31/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 32/
ELTE Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 33/
ELTE Maximum-kiválasztás (maximális értékkel) Specifikáció: Kimenet: MaxÉrt H Utófeltétel: i (1 i N): MaxÉrt=X i és i (1 i N): MaxÉrt X i másképp:MaxÉrt= A két változatot össze is vonhatjuk: N MaxÉrt X i i=1 34/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás MaxÉrt X és
ELTE Maximum-kiválasztás (maximális értékkel) MaxÉrt:=X[1] i=2..N X[i]>MaxÉrt MaxÉrt:=X[i] Algoritmus: IN Változó i:Egész 35/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás példa Specifikáció: Bemenet: N N, Hó,Nap N N Kimenet: Első N Előfeltétel: N>0 és i(1 i N): (Hó i [1..12] és Nap i [1..31]) Utófeltétel: 1 Első N és i(1 i N): (Hó Első <Hó i vagy Hó Első =Hó i és Nap Első Nap i ) 36/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás példa Specifikáció (másképp) : Bemenet: N N, Hó,Nap N N Kimenet: Első N Előfeltétel: N>0 és i(1 i N): (Hó i [1..12] és Nap i [1..31]) Utófeltétel: Első= Definíció: (Hó i,Nap i ) (Hó j,Nap j ) Hó i <Hó j vagy Hó i =Hó j és Nap i Nap j 37/52 N MaxInd (Hó i,Nap i ) i=1 Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Maximum-kiválasztás példa Algoritmus: Első:=1 i=2..N Hó[i]<Hó[Első] vagy Hó[i]=Hó[Első] és Nap[i]<Nap[Első] Első:=i I N Változó i:Egész 38/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Feladatok: 1. Egy természetes számról döntsük el, hogy prímszám-e! 2. Egy szóról mondjuk meg, hogy egy hónap- nak a neve-e! 3. Egy tanuló év végi osztályzatai alapján álla- pítsuk meg, hogy bukott-e! 4. Egy szóról adjuk meg, hogy van-e benne ma- gánhangzó! 5. Egy számsorozatról döntsük el, hogy mono- ton növekvő-e! 6. Egy tanuló év végi jegyei alapján adjuk meg, hogy kitűnő-e! 39/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Mi bennük a közös? Döntsük el, hogy N „valami” között van-e adott tulajdonsággal rendelkező elem! 40/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Specifikáció: Bemenet: N N, X H N, T: H L Kimenet: Van L Előfeltétel: – Utófeltétel: Van= i(1 i N): T(X i ) másképp: N Van= T(X i ) i=1 41/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Algoritmus: i:=1 i N és nem T(X[i]) i:=i+1 Van:=i N Változó i:Egész 42/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Feladatvariáns: … az összes elem olyan-e … Specifikáció (csak a különbség) : Kimenet: Mind L Utófeltétel : Mind= i(1 i N): T(X i ) másképp: N Mind= T(X i ) i=1 43/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés Feladatvariáns: … az összes elem olyan-e … Algoritmus: i:=1 i N és nem T(X[i]) i:=i+1 Mind:=i>N Változó i:Egész 44/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Eldöntés példa Specifikáció: Bemenet: N N, Jegy N N Kimenet: Bukott L Előfeltétel: i (1 i N): Jegy i [1..5] Utófeltétel: Bukott= i (1 i N): Jegy i =1 Algoritmus: i:=1 i N és Jegy[i] 1 i:=i+1 Bukott:=i N Változó i:Egész 45/52 T: tulajdonság- függvény Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás Feladatok: 1. Ismerjük egy ember havi bevételeit és kiadá- sait. Év végére nőtt a vagyona. Adjunk meg egy hónapot, amikor nőtt a vagyona! 2. Adjuk meg egy természetes szám egytől kü- lönböző legkisebb osztóját! 3. Adjuk meg egy magyar szó egy magánhang- zóját! 4. Adjuk meg egy hónapnévről a sorszámát! 46/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás Mi bennük a közös? N „valami” közül kell megadni egy adott tulajdonságút, ha tudjuk, hogy ilyen elem biztosan van. 47/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás Specifikáció: Bemenet: N N, X H N, T: H L Kimenet: Ind N Előfeltétel: N>0 és i (1 i N): T(X i ) Utófeltétel: 1 Ind N és T(X Ind ) másképp: N Ind=Kiválaszt i i=1 T(X i ) 48/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás Algoritmus: Megjegyzés: első utolsót Többlet tudás: a megoldás az első adott tulajdonságú elemet adja meg – a program tudhat többet annál, mint amit várunk tőle. Hogy kellene az utolsót megadni? Ind:=1 nem T(X[Ind]) Ind:=Ind+1 49/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás példa Specifikáció: Bemenet: Szó S Kimenet: MH N Előfeltétel: hossz(Szó)>0 és i (1 i hossz(Szó)): magánhangzóE(Szó i ) Utófeltétel: 1 MH hossz(Szó) és magánhangzóE(Szó MH ) Definíció: magánhangzóE: K L magánhangzóE(c):= nagybetű(c) {'A',…,'Ű'} 50/52 T: tulajdonság- függvény Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Kiválasztás példa Algoritmus: Megjegyzés: a kódoláskor a nagybetűsítő toupper függvénynél ügyelni kell az ékezetes betűkre! MH:=1 nem magánhangzóE(Szó[MH]) MH:=MH+1 51/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés Feladatok: 1. Ismerjük egy ember havi bevételeit és kiadá- sait. Év végére nőtt a vagyona. Adjunk meg egy hónapot, amikor nem nőtt a vagyona! 2. Adjuk meg egy természetes szám egy 1-től és önmagától különböző osztóját! 3. Adjuk meg egy ember nevében egy „ a ” be - tű helyét! 4. Adjunk meg egy tanulóra egy tárgyat, ami- ből megbukott! 5. Adjuk meg egy számsorozat olyan elemét, amely nagyobb az előzőnél! 52/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés Mi bennük a közös? N darab „valami” közül kell megadni egy adott tulajdonságút, ha nem tudjuk, hogy ilyen elem van-e. 53/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés Specifikáció: Bemenet: N N, X H N Kimenet: Van L, Ind N Előfeltétel: – Utófeltétel: Van= i (1 i N): T(X i ) és Van 1 Ind N és T(X Ind ) másképp: eldöntés kiválasztás Tehát a feladat „egyik fele” az eldöntésből, a „másik fele” a kiválasztásból jön. N (Van,Ind)= Keres i i=1 T(X i ) 54/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés Algoritmus 1 : Megjegyzés: első Többlet tudás: a megoldás az első adott tulajdonsá- gú elemet adja meg. i:=1 i N és nem T(X[i]) i:=i+1 Van:=i N Van Ind:=i I N Változó i:Egész 55/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés példa Specifikáció: Bemenet: N N, Jegy N N Kimenet: Bukott L, TI N Előfeltétel: i (1 i N): Jegy i [1..5] Utófeltétel: Bukott= i (1 i N): Jegy i =1 és Bukott 1 TI N és Jegy TI =1 azaz N (Bukott,TI)=Keres i i=1 Jegy i =1 56/52 T: tulajdonság- függvény Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Keresés példa Algoritmus: i:=1 i N és Jegy[i] 1 i:=i+1 Bukott:=i N Bukott TI:=i I N Változó i:Egész 57/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Programozási tételek – visszatekintés 1. Sorozatszámítás (összegzés) Sorozatszámítás 2. Megszámolás Megszámolás 3. Maximum-kiválasztás Maximum-kiválasztás 4. Eldöntés Eldöntés 5. Kiválasztás Kiválasztás 6. Keresés Keresés szummás feladat számlálós ciklus kvantoros feladat feltételes ciklus 58/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
ELTE Programozási tételek – visszatekintés 1. Sorozatszámítás (összegzés) Sorozatszámítás 2. Megszámolás Megszámolás 3. Maximum-kiválasztás Maximum-kiválasztás 4. Eldöntés Eldöntés 5. Kiválasztás Kiválasztás 6. Keresés Keresés +1. Madártávlatból újra… Madártávlatból N0N0 N>0N>0 N0N0 N>0N>0 N0N0 59/52Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
Programozási alapismeretek 4. előadás vége