3. ELTE
2013.09.22.
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…
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 3/52
4. ELTE
2013.09.22.
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
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 4/52
5. ELTE
2013.09.22.
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
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 5/52
6. ELTE
2013.09.22.
1. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 6/52
7. ELTE
2013.09.22.
1. 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
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 7/52
8. ELTE
2013.09.22.
1. Sorozatszámítás
Specifikáció:
Bemenet: NN,
XHN
Kimenet: SH
Előfeltétel: –
Utófeltétel: S=F(X1..N)
F: HN → H,
H: tetszőleges halmaz;
HN ={(h1,…,hN)|hiH}
(X1,…,XN) sorozat
– N tagú összeg;
– N tényezős szorzat;
– N halmaz uniója;
& – N szöveg konkatenációja …
8/52
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
9. ELTE
H* ={(h1,h2,…)|hiH}
2013.09.22.
1. Sorozatszámítás
Probléma:
F: N paraméteres művelet, ahol az N változó.
Megoldás:
Visszavezetjük 2-paraméteres műveletre (pl.
helyett +) és egy null-elemre (+ esetén a 0).
F(X1..N)=f(F(X1..N–1),XN), ha N>0
F(–)=F0 , egyébként
Tehát: F:H*→H, F0H,
Gondolja meg a többi esetén mi az f/F0?
– ?/? – ?/? & – ?/?
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 9/52
11. ELTE
2013.09.22.
1. Sorozatszámítás –
összegzés
Specifikáció (összegzés):
Bemenet: NN,
XHN
Kimenet: SH
Előfeltétel: –
Utófeltétel: S=
N
A definíció nyilvánvalóan teljesül, azaz:
0 , N 0
Σ
X X , N 0
X :
i N
N 1
i 1
i
N
i 1 Σ
H: Z vagy R
11/52
i 1
i X
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
12. ELTE
2013.09.22.
1. Sorozatszámítás
Algoritmus:
Programparaméterek
Változó
N:Egész
Konstans
maxN:Egész(???)
Változó
X:Tömb[1..maxN:TH]
S:TH
Tehát megállapodunk abban, h. a tételek
algoritmusához statikusan deklaráljuk a
sorozathoz tartozó tömböt.
12/52
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
14. ELTE
2013.09.22.
1. Sorozatszámítás
példa
Változó
i:Egész
14/52
Specifikáció:
Bemenet: NN,
Be,KiZN
Kimenet: SZ
Előfeltétel: i (1iN): Bei,Kii0
N
Utófeltétel: S= Be–Kiii
i 1
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
15. ELTE
2013.09.22.
2. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 15/52
16. ELTE
2013.09.22.
2. 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.
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 16/52
17. ELTE
2013.09.22.
2. Megszámolás
Specifikáció:
Bemenet: NN,
XHN,
T:HL
Kimenet: DbN
Előfeltétel: –
Utófeltétel: Db=
N
i 1
1
T(X )
i
H: tetszőleges halmaz
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
T: tetszőleges
tulajdonság-függvény
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
18. ELTE
2013.09.22.
2. Megszámolás
Algoritmus:
Db:=0
i=1..N
T(X[i])
I N
Db:=Db+1
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 18/52
19. ELTE
2013.09.22.
2. Megszámolás
példa
Specifikáció:
Bemenet: NN,
T: tulajdonság-függvény
HóNN,
Téli?:NL,
Téli?(x):=x=1 2 vagy x=12
x<3 vagy x=12
↕
Kimenet: DbN
Előfeltétel: i (1iN): Hói[1..12]
N
Utófeltétel: Db=
i
1
1
Hó 3 vagy Hó
12
i i
19/52
(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
20. ELTE
2013.09.22.
2. Megszámolás
példa
Algoritmus:
Db:=0
I N
Kérdés:
Mi lenne, ha az előfeltétel
(i (1iN): Hói[1..12])
nem teljesülne?
i=1..N
Hó[i]<3 vagy Hó[i]=12
Db:=Db+1
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 20/52
21. ELTE
2013.09.22.
3. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 21/52
22. ELTE
2013.09.22.
3. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 22/52
23. ELTE
Specifikáció:
Bemenet: NN,
XHN
Kimenet: MaxN
Előfeltétel: N>0
Utófeltétel: 1MaxN és
A cél egy szummával
azonos „tömörségű”
operátorral kifejezni.
i (1iN): XMaxXi
másképp: Max=
N
MaxInd Xi
i=1
2013.09.22.
3. Maximum-kiválasztás
23/52
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
24. ELTE
2013.09.22.
3. Maximum-kiválasztás
Megjegyzések:
Léteznie kell a :HHL rendezési relációnak.
A sorszám sorozatok esetén általánosabb, mint az
érték, ezért legtöbbször a sorszámot adjuk meg.
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 24/52
25. ELTE
2013.09.22.
3. Maximum-kiválasztás
Algoritmus:
Max:=1
i=2..N
X[i]>X[Max]
I N
Max:=i
Változó
i:Egész
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?
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 25/52
26. ELTE
2013.09.22.
3. Maximum-kiválasztás
(maximális értékkel)
Specifikáció:
Kimenet: MaxÉrtH
Utófeltétel: MaxÉrti (1iN): X MaxÉrt=és
Xés
i i (1iN): MaxÉrtXi
másképp: MaxÉrt=
N
MaxÉrt Xi
i=1
A két változatot össze is vonhatjuk:
26/52
N
Ind,Ért MaxX
i
i 1
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
27. ELTE
2013.09.22.
3. Maximum-kiválasztás
(maximális értékkel)
Algoritmus:
MaxÉrt:=X[1]
i=2..N
X[i]>MaxÉrt
I N
MaxÉrt:=X[i]
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 27/52
28. ELTE
2013.09.22.
3. Maximum-kiválasztás
példa
Specifikáció:
Bemenet: NN,
Hó,NapNN
Kimenet: ElsőN
Előfeltétel: N>0 és
i(1iN): (Hói[1..12] és
Napi[1..31])
Utófeltétel: 1ElsőN és
i(1iN): (HóElső<Hói vagy
HóElső=Hói és
NapElsőNapi)
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 28/52
29. ELTE
2013.09.22.
3. Maximum-kiválasztás
példa
Specifikáció (másképp):
Bemenet: NN,
Hó,NapNN
Kimenet: ElsőN
Előfeltétel: N>0 és
i(1iN): (Hói[1..12] és
Napi[1..31])
Utófeltétel: Első=
Definíció: (Hói,Napi)(Hój,Napj)
Hói<Hój vagy
Hói=Hój és NapiNapj
29/52
N
MaxInd (Hói,Napi)
i=1
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
30. ELTE
2013.09.22.
3. 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ő]
I N
Első:=i
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 30/52
31. ELTE
2013.09.22.
4. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 31/52
32. ELTE
2013.09.22.
4. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 32/52
38. ELTE
2013.09.22.
5. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 38/52
39. ELTE
2013.09.22.
5. 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.
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 39/52
41. ELTE
2013.09.22.
5. Kiválasztás
Algoritmus:
Ind:=1
nem T(X[Ind])
Ind:=Ind+1
Megjegyzés:
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?
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 41/52
43. ELTE
2013.09.22.
5. Kiválasztás
példa
Algoritmus:
MH:=1
nem magánhangzóE(Szó[MH])
MH:=MH+1
Megjegyzés:
a kódoláskor a nagybetűsítő toupper függvénynél
ügyelni kell az ékezetes betűkre!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 43/52
44. ELTE
2013.09.22.
6. 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!
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 44/52
45. ELTE
2013.09.22.
6. 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.
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 45/52
46. ELTE
2013.09.22.
6. Keresés
Specifikáció:
Bemenet: NN, XHN
Kimenet: VanL, IndN
Előfeltétel: –
Utófeltétel: Van=i (1iN): T(Xi) és
Van1IndN és T(XInd)
másképp:
N
(Van,Ind)= Keres i
i=1
T(Xi)
Tehát a feladat „egyik fele” az eldöntésből, a
„másik fele” a kiválasztásból jön.
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 46/52
47. ELTE
2013.09.22.
6. Keresés
Algoritmus1:
i:=1
iN és nem T(X[i])
i:=i+1
Van:=iN
I N
Megjegyzés:
Többlet tudás: a megoldás az első adott tulajdonsá-gú
elemet adja meg.
Van
Ind:=i
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 47/52
48. ELTE
2013.09.22.
6. Keresés
példa
Specifikáció:
Bemenet: NN, JegyNN
Kimenet: BukottL, TIN
Előfeltétel: i (1iN): Jegyi[1..5]
Utófeltétel: Bukott=i (1iN): Jegyi=1 és
Bukott1TIN és JegyTI=1
azaz
N
(Bukott,TI)=Keres i
i=1
Jegyi=1
48/52
T: tulajdonság-függvény
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás
49. ELTE
2013.09.22.
6. Keresés
példa
Algoritmus:
i:=1
iN és Jegy[i]1
i:=i+1
Bukott:=iN
Bukott
I N
TI:=i
Változó
i:Egész
Horváth - Papné - Szlávi - Zsakó: Programozási alapismeretek 4. előadás 49/52