Algoritmizálás, adatmodellezés tanítása 2. előadás
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 2010.09.06. 2
7. Másolás - függvényszámítás Feladatok: Egy számsorozat tagjainak adjuk meg az abszolút értékét! Egy szöveget alakítsunk át csupa kisbetűssé! Számoljuk ki két vektor összegét! Készítsünk függvénytáblázatot a sin(x) függvényről! 2010.09.06. 3
7. Másolás - függvényszámítás Feladatok: Ismerjük N hónap sorszámát, adjuk meg a nevét! Mi bennük a közös? N darab valamihez kell hozzárendelni másik N darab valamit, ami akár az előbbitől különböző típusú is lehet. A darabszám marad, a sorrend is marad. 2010.09.06. 4
7. Másolás - függvényszámítás Bemenet: N: Egész, X: Tömb[1..N: Valami1] Kimenet: Y: Tömb[1..N: Valami2] Előfeltétel: Utófeltétel: i (1 i N): Y[i]=f(X[i]) Másolás: Ciklus i=1-től N-ig Y[i]:=f(X[i]) Ciklus vége Eljárás vége. 2010.09.06. 5
7. Másolás - függvényszámítás Vektorok összege: Bemenet: N: Egész, X,Z: Tömb[1..N: Valós] Kimenet: Y: Tömb[1..N: Valós] Előfeltétel: Utófeltétel: i(1 i N): Y[i]=X[i]+Z[i] Másolás: Ciklus i=1-től N-ig Y[i]:=X[i]+Z[i] Ciklus vége Eljárás vége. 2010.09.06. 6
7. Másolás - függvényszámítás Számok abszolút értéke: Bemenet: N: Egész, X: Tömb[1..N: Valós] Kimenet: Y: Tömb[1..N: Valós] Előfeltétel: Utófeltétel: i(1 i N): Y[i]=abs(X[i]) Másolás: Ciklus i=1-től N-ig Ha X[i] 0 akkor Y[i]:=X[i] különben Y[i]:=-X[i] Ciklus vége Eljárás vége. 2010.09.06. 7
8. Kiválogatás Feladatok: Adjuk meg egy osztály kitűnő tanulóit! Adjuk meg egy természetes szám összes osztóját! Adjuk meg egy mondat magas hangrendű szavait! Adjuk meg emberek egy halmazából a 180 cm felettieket! 2010.09.06. 8
8. Kiválogatás Feladatok: Adjuk meg egy év azon napjait, amikor délben nem fagyott! Adjuk meg egy szó magánhangzóit! Mi bennük a közös? N darab valami közül kell megadni az összes, adott T tulajdonsággal rendelkezőt! 2010.09.06. 9
8. Kiválogatás Bemenet: N: Egész, X: Tömb[1..N: Valami] Kimenet: Db: Egész, Y: Tömb[1..N: Egész] Előfeltétel: Utófeltétel: Db T i 1 ( X [ i]) és i(1 i Db): T(X[Y[i]]) és Y (1,2,,N) N 1 2010.09.06. 10
8. Kiválogatás Kiválogatás: Db:=0 Ciklus i=1-től N-ig Ha T(X[i]) akkor Db:=Db+1 Y[Db]:=i Ciklus vége Eljárás vége. A sorszám általánosabb, mint az érték. Ha mégis érték kellene, akkor: Y[Db]:=X[i] szerepelne. 2010.09.06. 11
8. Kiválogatás Adjuk meg egy év azon napjait, amikor délben nem fagyott! Bemenet: N: Egész, X: Tömb[1..N: Valós] Kimenet: Db: Egész, Y: Tömb[1..N: Egész] Előfeltétel: Utófeltétel: Db N i 1 1 X [ i] 0 és i(1 i Db): X[Y[i]] 0 és Y (1,2,,N) 2010.09.06. 12
8. Kiválogatás Kiválogatás: Db:=0 Ciklus i=1-től N-ig Ha X[i] 0 akkor Db:=Db+1 Y[Db]:=i Ciklus vége Eljárás vége. 2010.09.06. 13
10. Szétválogatás Feladatok: Adjuk meg egy osztály kitűnő és nem kitűnő tanulóit! Adjuk meg emberek egy halmazából a 180 cm felettieket és a nem 180 cm felettieket! Adjuk meg egy számsorozatból a páros és a páratlan számokat is! 2010.09.06. 14
10. Szétválogatás Feladatok: Adjuk meg egy év azon napjait, amikor délben fagyott, illetve nem fagyott! Adjuk meg egy angol szó magán- és mássalhangzóit! Mi bennük a közös? N darab valami közül kell megadni az összes, adott T tulajdonsággal rendelkezőt, illetve nem rendelkezőt! 2010.09.06. 15
10. Szétválogatás Bemenet: N: Egész, X: Tömb[1..N: Valami] Kimenet: Db: Egész, Y,Z: Tömb[1..N: Egész] Előfeltétel: Utófeltétel: Db T i 1 ( X [ i]) és i(1 i Db): T(X[Y[i]]) és és i(1 i N-Db): nem T(X[Z[i]]) és Y (1,2,,N) és Z (1,2,,N) N 1 2010.09.06. 16
10. Szétválogatás Szétválogatás: Db:=0; DbZ:=0 Ciklus i=1-től N-ig Ha T(X[i]) akkor Db:=Db+1 Y[Db]:=i különben DbZ:=DbZ+1 Z[DbZ]:=i Ciklus vége Eljárás vége. Itt is szerepelhetne :=i helyett :=X[i], ha csak az értékekre lenne szükségünk. 2010.09.06. 17
10. Szétválogatás Probléma: Y-ban és Z-ben együtt csak N darab elem van, azaz elég lenne az egyik. Bemenet: N: Egész, X: Tömb[1..N: Valami] Kimenet: Db: Egész, Y: Tömb[1..N: Egész] Előfeltétel: Utófeltétel: Db T i 1 ( X [ i]) és i(1 i Db): T(X[Y[i]]) és és i(db+1 i N): nem T(X[Y[i]]) és Y=permutáció(1,2,,N) N 1 2010.09.06. 18
10. Szétválogatás Szétválogatás: Db:=0; DbZ:=N+1 Ciklus i=1-től N-ig Ha T(X[i]) akkor Db:=Db+1 Y[Db]:=i különben DbZ:=DbZ-1 Y[DbZ]:=i Ciklus vége Eljárás vége. A DbZ helyett jobb lenne pl. az IndZ elnevezés. 2010.09.06. 19
11. Metszet Feladatok: Adjuk meg két természetes szám közös osztóit! A télen és a nyáron megfigyelhető madarak alapján adjuk meg a nem költöző madarakat! Két ember szabad órái alapján mondjuk meg, hogy mikor beszélgethetnek egymással! 2010.09.06. 20
11. Metszet Feladatok: Adjuk meg azokat az állatokat, amelyeket a budapesti és a veszprémi állatkertben is megnézhetünk! Mi bennük a közös? Ismerünk két halmazt (tetszőleges típusú elemekkel), meg kell adnunk azokat az elemeket, amelyek mindkét halmazban szerepelnek! 2010.09.06. 21
11. Metszet Mit tehetünk a halmazokkal? Eddig a specifikációban használtunk, az algoritmusban és a kódban nem. A halmaz elemeit egy tömbben felsorolhatjuk, de ekkor ügyelni kell arra, hogy minden elem csak egyszer szerepeljen! Fogalom: halmazf(x,n) = i,j (1 i,j N): i j X[i] X[j] 2010.09.06. 22
11. Metszet Bemenet: N,M: Egész, X: Tömb[1..N: Valami] Y: Tömb[1..M: Valami] Kimenet: Db: Egész, Z: Tömb[1..min(N,M): Valami] Előfeltétel: halmazf(x,n) és halmazf(y,m) Utófeltétel: Db i 1 X [ i] Y és i(1 i Db): Z[i] X és Z[i] Y és halmazf(z,db) N 1 2010.09.06. 23
11. Metszet Metszet: Db:=0 Ciklus i=1-től N-ig j:=1 Ciklus amíg j M és X[i] Y[j] j:=j+1 Ciklus vége Ha j M akkor Db:=Db+1 Z[Db]:=X[i] Ciklus vége Eljárás vége. 2010.09.06. 24
11. Metszet A megoldás egy kiválogatás és egy eldöntés. Feladatvariációk: Ismerünk két halmazt, meg kell adnunk a közös elemek számát! Ismerünk két halmazt, meg kell adnunk, hogy van-e közös elemük! Ismerünk két halmazt, meg kell adnunk egy közös elemüket! 2010.09.06. 25
12. Unió Feladatok: Két szakkör tanulói alapján adjuk meg a szakkörre járókat! A télen és a nyáron megfigyelhető madarak alapján adjuk meg a megfigyelhető madarakat! Két ember szabad órái alapján mondjuk meg, hogy mikor tudjuk elérni valamelyiket! 2010.09.06. 26
12. Unió Feladatok: Adjuk meg azokat az állatokat, amelyeket a budapesti vagy a veszprémi állatkertben megnézhetünk! Mi bennük a közös? Ismerünk két halmazt (tetszőleges típusú elemekkel), meg kell adnunk azokat az elemeket, amelyek legalább az egyik halmazban szerepelnek! 2010.09.06. 27
12. Unió Bemenet: N,M: Egész, X: Tömb[1..N: Valami] Y: Tömb[1..M: Valami] Kimenet: Db: Egész, Z: Tömb[1..N+M: Valami] Előfeltétel: halmazf(x,n) és halmazf(y,m) Utófeltétel: Db N j 1 y[ j] X és i(1 i Db): Z[i] X vagy Z[i] Y és halmazf(z,db) M 1 2010.09.06. 28
12. Unió Unió: Z:=X; Db:=N Ciklus j=1-től M-ig i:=1 Ciklus amíg i N és X[i] Y[j] i:=i+1 Ciklus vége Ha i>n akkor Db:=Db+1 Z[Db]:=Y[j] Ciklus vége Eljárás vége. 2010.09.06. 29
Programozási tételek Sorozat sorozat 7. Másolás függvényszámítás 8. Kiválogatás 9. Rendezés (később lesz) Sorozat sorozatok 10. Szétválogatás Sorozatok sorozat 11. Metszet 12. Unió 2010.09.06. 30
Kiválogatás + összegzés Feladat: Adott tulajdonságú elemek összege (feltételes összegzés). Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Egész] Kimenet: S:Egész Előfeltétel: N 0 N Utófeltétel: S= i 1 T(X[i]) X[i] 2010.09.06. 31
Kiválogatás + összegzés 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd utána adjuk össze őket! Válogatás: Db:=0; S:=0 Ciklus i=1-től N-ig Ha T(X(i)) akkor Db:=Db+1 Y(Db):=i Ciklus vége Ciklus i=1-től Db-ig S:=S+X(Y(i)) Ciklus vége Eljárás vége. 2010.09.06. 32
Kiválogatás + összegzés 2. megoldási ötlet: Kiválogatás helyett azonnal adjuk össze a megfelelő elemeket! nincs elem-/indexfeljegyzés (Y-ban) + nincs számlálás (Dbben) Válogatás: S:=0 Ciklus i=1-től N-ig Ha T(X(i)) akkor S:=S+X(i) Ciklus vége Eljárás vége. 2010.09.06. 33
Kiválogatás + maximumkiválasztás Feladat: Adott tulajdonságú elemek maximuma (feltételes maximumkeresés). Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Max:Egész, Van:Logikai Előfeltétel: N 0 Utófeltétel: Van= i (1 i N): T(X[i]) és Van ( 1 Max N és T(X[Max]) és i(1 i N): T(X[i]) X[Max] X[i] ) 2010.09.06. 34
Kiválogatás + maximumkiválasztás 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd keressünk maximumot, ha van értelme! Feltételes maximum: Db:=0 Ciklus i=1-től N-ig Ha T(X(i)) akkor Db:=Db+1 Y(Db):=i Ciklus vége Van:=(Db>0) 2010.09.06. 35
Kiválogatás + maximumkiválasztás 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd keressünk maximumot, ha van értelme! Ha Van akkor Max:=Y(1) Ciklus i=2-től Db-ig Ha X(Y(i))>X(Max) akkor Max:=i Ciklus vége Eljárás vége. 2010.09.06. 36
Kiválogatás + maximumkiválasztás 2. megoldási ötlet: Kiválogatás helyett azonnal válasszuk ki a maximumot! Kell egy fiktív 0. elem a maximumkiválasztáshoz, ami kisebb minden normál elemnél. Feltételes maximum: X(0):=- ; Max:=0 Ciklus i=1-től N-ig Ha T(X(i)) és X(i)>X(Max) akkor Max:=i Ciklus vége Van:=(Max>0) Eljárás vége. 2010.09.06. 37
Maximumkiválasztás + kiválogatás Feladat: Összes maximális elem kiválogatása. Specifikáció: Bemenet: N:Egész, X:Tömb[1..N:Valami] Kimenet: Db:Egész, Max:Tömb[1..Db:Egész] Előfeltétel: N>0 Utófeltétel: Db = N 1 i X[i] X[Max[1]] 1 és i(1 i Db): j(1 j N): X[Max[i]] X[j] és Max (1,2,,N) 2010.09.06. 38
Maximumkiválasztás + kiválogatás 1. megoldási ötlet: Határozzuk meg a maximumot, majd válogassuk ki a vele egyenlőket! Maximumkiválogatás: Maxért:=X(1) Ciklus i=2-től N-ig Ha X(i)>Maxért akkor Maxért:=X(i) Ciklus vége 2010.09.06. 39
Maximumkiválasztás + kiválogatás 1. megoldási ötlet: Határozzuk meg a maximumot, majd válogassuk ki a vele egyenlőket! Db:=0 Ciklus i=1-től N-ig Ha X(i)=Maxért akkor Db:=Db+1; Max(Db):=i Ciklus vége Eljárás vége. 2010.09.06. 40
Maximumkiválasztás + kiválogatás 2. megoldási ötlet: A pillanatnyi maximálissal egyenlőket azonnal válogassuk ki! Maximumkiválogatás: Db:=1; Max(1):=1; Maxért:=X(1) Ciklus i=2-től N-ig Ha X(i)>Maxért akkor Db:=1; Max(1):=i; Maxért:=X(i) különben ha X(i)=Maxért akkor Db:=Db+1; Max(Db):=i Ciklus vége Eljárás vége. 2010.09.06. 41
Eldöntés + megszámolás Feladat: Van-e egy sorozatban K darab adott tulajdonságú elem? Specifikáció: Bemenet: N,K:Egész, X:Tömb[1..N:Valami] Kimenet: Van:Logikai Előfeltétel: N 0 [és K>0] Utófeltétel: db= N 1 i 1 T(X[i]) és Van=db K 2010.09.06. 42
Eldöntés + megszámolás 1. megoldási ötlet: Számoljuk meg, hogy hány adott tulajdonságú van, majd nézzük meg, hogy ez legalább K-e! (Azaz valójában nincs: eldöntés tétel!) Eldönt és megszámol: Db:=0 Ciklus i=1-től N-ig Ha T(X(i)) akkor Db:=Db+1 Ciklus vége Van:=(Db K) Eljárás vége. 2010.09.06. 43
Eldöntés + megszámolás 2. megoldási ötlet: Ha már találtunk K darab adott tulajdonságút, akkor ne nézzük tovább! Eldönt és megszámol: Db:=0; i:=1 Ciklus amíg i N és Db<K Ha T(X(i)) akkor Db:=Db+1 i:=i+1 Ciklus vége Van:=(Db=K) Eljárás vége. 2010.09.06. 44
Algoritmizálás, adatmodellezés tanítása 2. előadás vége