Download presentation
Презентация загружается. Пожалуйста, подождите
PublishMariska Nagyné Modified több, mint 10 éve
1
Programozási alapismeretek 5. előadás
2
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.2/482014. 07. 12.2014. 07. 12.2014. 07. 12. Programozási tételek – a lényeglényeg Sorozatszámítás Sorozatszámítás Eldöntés Eldöntés Kiválasztás Kiválasztás Keresés Keresés Megszámolás Megszámolás Maximumkiválasztás Maximumkiválasztás Programozás tételek – visszatekintésvisszatekintés Programozási tételek felhasználásafelhasználása Tartalom
3
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.3/482014. 07. 12.2014. 07. 12.2014. 07. 12. 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ó [+program- specifikáció] 2. absztrakt algoritmus Egy fontos előzetes megjegyzés: A bemenet legalább egy sorozat…
4
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.4/482014. 07. 12.2014. 07. 12.2014. 07. 12. 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
5
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.5/482014. 07. 12.2014. 07. 12.2014. 07. 12. 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
6
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.6/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Feladatok: Ismerjük egy ember havi bevételeit és kiadá- sait. Adjuk meg, hogy év végére mennyivel nőtt a vagyona! Ismerjük egy autóversenyző körönkénti ide- jét. Adjuk meg az átlagkörének idejét! Adjuk meg az N számhoz az N faktoriális ér- tékét! Ismerjük egy iskola szakköreire járó tanulóit, szakkörönként. Adjuk meg, kik járnak szak- körre! Ismerünk N szót. Adjuk meg a belőlük össze - állított mondatot!
7
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.7/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Mi bennük a közös? N „valamiből” kell kiszámolni „kumuláltan” egy „valamit”! Pl. – bevétel/köridő; – faktoriális; – szakkörös; & – szó
8
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.8/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: S:Valami Előfeltétel: N 0 Utófeltétel: S=F(X[1..N]) F: – N tagú összeg; – N tényezős szorzat; – N halmaz uniója; & – N szöveg konkatenációja …
9
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.9/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Probléma: F: N paraméteres művelet, ahol az N válto- zó. 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 … és a többi esetén mi az f/F 0 ? – ?/? – ?/? & – ?/?
10
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.10/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Specifikáció (a végleges) : Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: S:Valami Előfeltétel: N 0 Utófeltétel: S=F(X[1..N]) Definíció:
11
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.11/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Algoritmus: esetén: S:=F 0 i=1..N S:=f(S,X[i]) S:=0 i=1..N S:=S+X[i] Szum(X[1..N]):=
12
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.12/482014. 07. 12.2014. 07. 12.2014. 07. 12. 1. Sorozatszámítás Specifikáció: Bemenet: N:Egész, Be,Ki:Tömb[1..N:Egész] Kimenet: S:Egész Előfeltétel: N 0 és 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]
13
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.13/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. 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!
14
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.14/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. 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!
15
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.15/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. Eldöntés Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Van:Logikai Előfeltétel: N 0 Utófeltétel: Van= i(1 i N): T(X[i]) Megjegyzés: A T tulajdonság egy logikai függvényként adható meg. Minden elemről megvizsgálható, hogy ren- delkezik-e az adott tulajdonsággal.
16
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.16/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. Eldöntés Algoritmus 1 : Algoritmus 2 : i:=1 i N és nem T(X[i]) i:=i+1 Van:=i N i:=0 Van:=Hamis i<N és nem Van i:=i+1 Van:=T(X[i])
17
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.17/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. Eldöntés Feladatvariáns: … az összes elem olyan-e … Specifikáció (csak a különbség) : Kimenet: Mind:Logikai Utófeltétel : Mind= i(1 i N): T(X[i]) Algoritmus: i:=1 i N és nem T(X[i]) i:=i+1 Mind:=i>N
18
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.18/482014. 07. 12.2014. 07. 12.2014. 07. 12. 2. Eldöntés Specifikáció: Bemenet: N:Egész, Jegy:Tömb[1..N:Egész] Kimenet: Bukott:Logikai Előfeltétel: N 0 és 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
19
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.19/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. 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!
20
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.20/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. 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.
21
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.21/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. Kiválasztás Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: S:Egész Előfeltétel: N>0 és i (1 i N): T(X[i]) Utófeltétel: 1 S N és T(X[S]) Megjegyzés: A T tulajdonság egy logikai függvényként adható meg, minden elemről megtudható, hogy rendelke- zik-e az adott tulajdonsággal.
22
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.22/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. Kiválasztás Algoritmus: Megjegyzés: Többlet tudás: a megoldás az első adott tulajdon- ságú elemet adja meg – a program tudhat többet annál, mint amit várunk tőle. Hogy kellene az utolsót megadni? i:=1 nem T(X[i]) i:=i+1 S:=i
23
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.23/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. Kiválasztás Specifikáció: Bemenet: Szó:Szöveg Kimenet: MH:Egész 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: Karakter Logikai magánhangzóE(c):= nagybetű(c) {'A'..'Ű'}
24
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.24/482014. 07. 12.2014. 07. 12.2014. 07. 12. 3. Kiválasztás Algoritmus: Megjegyzés: a kódoláskor a nagybetűsítő toupper függvénynél ügyelni kell az ékezetes betűkre! (L. 4. előadásban.)4. előadás i:=1 nem magánhangzóE(Szó[i]) i:=i+1 MH:=i
25
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.25/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. 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!
26
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.26/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. 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.
27
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.27/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. Keresés Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Van:Logikai, S:Egész Előfeltétel: N 0 Utófeltétel: Van= i (1 i N): T(X[i]) és Van 1 S N és T(X[S]) Tehát a feladat „egyik fele” az eldöntésből, a „másik fele” a kiválasztásból jön.
28
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.28/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. Keresés Algoritmus 1 : Megjegyzés: 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 S:=i I N
29
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.29/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. Keresés Algoritmus 2 : Megjegyzés: Többlet tudás: a megoldás az első adott tulajdonsá- gú elemet adja meg. i:=0 Van:=Hamis i<N és nem Van i:=i+1 Van:=T(X[i]) Van S:=i I N
30
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.30/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. Keresés Specifikáció: Bemenet: N:Egész, Jegy:Tömb[1..N:Egész] Kimenet: Bukott:Logikai, T:Egész Előfeltétel: N 0 és i (1 i N): Jegy[i] [1..5] Utófeltétel: Bukott= i (1 i N): Jegy[i]=1 és Bukott 1 T N és Jegy[T]=1
31
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.31/482014. 07. 12.2014. 07. 12.2014. 07. 12. 4. Keresés Algoritmus: i:=1 i N és Jegy[i] 1 i:=i+1 Bukott:=i N Bukott T:=i I N
32
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.32/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. 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!
33
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.33/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. 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.
34
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.34/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. Megszámolás Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész Előfeltétel: N 0 Utófeltétel: Db=
35
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.35/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. Megszámolás Algoritmus: Db:=0 i=1..N T(X[i]) Db:=Db+1 I N
36
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.36/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. Megszámolás Specifikáció: Bemenet: N:Egész, Hó:Tömb[1..N:Egész] Kimenet: Db:Egész (télen születettek) Előfeltétel: N 0 és i (1 i N): Hó[i] [1..12] Utófeltétel: Db=
37
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.37/482014. 07. 12.2014. 07. 12.2014. 07. 12. 5. Megszámolás Algoritmus: Db:=0 i=1..N Hó[i]<3 vagy Hó[i]=12 Db:=Db+1 I N
38
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.38/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkivá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!
39
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.39/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkivá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!
40
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.40/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkiválasztás Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Max:Egész Előfeltétel: N>0 Utófeltétel: 1 Max N és i (1 i N): X[Max] X[i] Megjegyzések: Léteznie kell a :Valami Valami Logikai rende- zési relációnak; a sorszám általánosabb, mint az érték, ezért legtöbb- ször a sorszámot adjuk meg.
41
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.41/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkiválasztás Algoritmus: Megjegyzés: Többlet tudás: ha több maximális érték is van, akkor közülük az elsőt kapjuk meg. 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
42
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.42/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkiválasztás (maximális értékkel) MaxÉrt:=X[1] i=2..N X[i]>MaxÉrt MaxÉrt:=X[i] Specifikáció: Kimenet: MaxÉrt:Valami Utófeltétel: i (1 i N): MaxÉrt=X[i] és i (1 i N): MaxÉrt X[i] Algoritmus: I N
43
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.43/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkiválasztás Specifikáció: Bemenet: N:Egész, Hó,Nap:Tömb[1..N:Egész], Kimenet: Első:Egész 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])
44
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.44/482014. 07. 12.2014. 07. 12.2014. 07. 12. 6. Maximumkiválasztás Algoritmus: Első:=1 i=2..N Hó[i]<Hó[Első] vagy Hó[i]=Hó[Első] és Nap[i]<Nap[Első] Első:=i I N
45
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.45/482014. 07. 12.2014. 07. 12.2014. 07. 12. Programozási tételek – visszatekintés 1. Sorozatszámítás (összegzés) Sorozatszámítás 2. Eldöntés Eldöntés 3. Kiválasztás Kiválasztás 4. Keresés Keresés 5. Megszámolás Megszámolás 6. Maximumkiválasztás Maximumkiválasztás +1. Madártávlatból újra… Madártávlatból
46
ELTE Szlávi - Zsakó: Programozási alapismeretek 5. 46/48 2014. 07. 12.2014. 07. 12.2014. 07. 12. PrTek felhasználása Árulkodó jelek (tételek madártávlatból) : a PrT-felismeréshez – a specifikáció kimenete: egy logikai érték eldöntéseldöntés egy sorozat, amelynek azonos a hossza a bementi sorozatéval másolás… ... az utófeltételben szerepel: egy sorozatművelet (Σ, Π …) sorozatszámítás sorozatszámítás …
47
ELTE Szlávi - Zsakó: Programozási alapismeretek 5. 47/48 2014. 07. 12.2014. 07. 12.2014. 07. 12. Programozási tételek felhasználása Árulkodó jelek (tételek madártávlatból) : PrT-kombináláshoz: a kimenet egy logikai érték eldöntés tétel egy másik tétel tulajdonságának meg- valósítójaeldöntés a kimenet egy sorozat kombinálható, mint előfeldolgozó, bármely másik PrT-lel …
48
Programozási alapismeretek 5. előadás vége
Similar presentations
© 2024 SlidePlayer.hu Inc.
All rights reserved.