Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaJakab Magyar Megváltozta több, mint 9 éve
1
Programozási alapismeretek 10. előadás
2
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.2/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + összegzés Kiválogatás + összegzés Kiválogatás + maximumkiválasztás Kiválogatás + maximumkiválasztás Maximumkiválasztás + kiválogatás Maximumkiválasztás + kiválogatás Eldöntés + megszámolás Eldöntés + megszámolás Eldöntés + eldöntés Eldöntés + eldöntés Sorozatszámítás mátrixra Sorozatszámítás mátrixra Eldöntés mátrixra Eldöntés mátrixra Tesztek előállítása Tesztek előállítása Tartalom
3
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.3/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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 Utófeltétel: S=
4
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.4/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + összegzés 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd utána adjuk össze őket! Db:=0 i=1..N T(X[i]) Db:=Db+1 Y[Db]:=i S:=0 i=1..Db S:=S+X[Y[i]] I N
5
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.5/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + összegzés 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd utána adjuk össze őket! Db:=0 i=1..N T(X[i]) Db:=Db+1 Y[Db]:=X[i] S:=0 i=1..Db S:=S+Y[i] I N
6
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.6/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + összegzés 2. megoldási ötlet: Kiválogatás helyett azonnal adjuk össze a megfelelő elemeket! nincs elem-/index- feljegyzés (Y-ban) + nincs számlálás (Db-ben) S:=0 i=1..N T(X[i]) S:=S+X[i] I N
7
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.7/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + maximumkiválasztás Feladat: Adott tulajdonságú elemek maximuma – fel- té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] )
8
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.8/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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! Db:=0 i=1..N T(X[i]) Db:=Db+1 Y[Db]:=i Van:=Db>0 … I N
9
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.9/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + maximumkiválasztás … Van Max:=Y[1] i=2..Db X[Y[i]]>X[Max] Max:=Y[i] 1. megoldási ötlet: Válogassuk ki az adott tulajdonságúakat, majd keressünk maximumot, ha van értelme! I N I N
10
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.10/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + maximumkiválasztás 2. megoldási ötlet: Induljunk ki a specifikációban észrevett téte- lekből: a kiválogatás helyett keressük meg az első T-tulajdonságút, … i:=1 i N és T(X[i]) i:=i+1 Van:=i N …
11
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.11/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + maximumkiválasztás 2. megoldási ötlet: … majd válasszuk ki az ilyenek maximu- mát! … Max:=i i=i+1..N T(X[i]) és X[i]>X[Max] Max:=i I N
12
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.12/422015. 03. 31.2015. 03. 31.2015. 03. 31. Kiválogatás + maximumkiválasztás 3. 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. X[0]:=- Max:=0 i=1..N T(X[i]) és X[i]>X[Max] Max:=i Van:=Max>0 I N
13
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.13/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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 = és i(1≤i≤Db): j(1≤j≤N): X[Max[i]]≥X[j] és Max (1,2,…,N)
14
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.14/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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 = és MaxÉrt=X[Max[1]] és i(1≤i≤Db): j(1≤j≤N): X[Max[i]]≥X[j] és Max (1,2,…,N)
15
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.15/422015. 03. 31.2015. 03. 31.2015. 03. 31. Maximumkiválasztás + kiválogatás 1. megoldási ötlet: Határozzuk meg a maximumot, majd válo- gassuk ki a vele egyenlőeket! MaxÉrt:=X[1] i=2..N X[i]>MaxÉrt MaxÉrt:=X[i] … I N
16
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.16/422015. 03. 31.2015. 03. 31.2015. 03. 31. Maximumkiválasztás + kiválogatás … Db:=0 i=1..N X[i]=MaxÉrt Db:=Db+1 Max[Db]:=i 1. megoldási ötlet: Határozzuk meg a maximumot, majd válo- gassuk ki a vele egyenlőeket! I N
17
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.17/422015. 03. 31.2015. 03. 31.2015. 03. 31. Maximumkiválasztás + kiválogatás 2. megoldási ötlet: A pillanatnyi maximálissal egyenlőeket azon- nal válogassuk ki! Db:=1 Max[1]:=1 MaxÉrt:=X[1] i=2..N X[i]>MaxÉrtX[i]=MaxÉrt Db:=1Db:=Db+1 Max[1]:=iMax[Db]:=i MaxÉrt:=X[i] I I
18
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.18/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés + megszámolás Feladat: Van-e egy sorozatban legalább 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= és Van=db≥K
19
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.19/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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!) db:=0 i=1..N T(X[i]) db:=db+1 Van:=db≥K I N
20
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.20/422015. 03. 31.2015. 03. 31.2015. 03. 31. 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! db:=0 i:=1 i≤N és db<K T(X[i]) db:=db+1 i:=i+1 Van:=db=K I N
21
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.21/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés + eldöntés Feladat: Van-e két sorozatnak közös eleme? Specifikáció: Bemenet: N,M:Egész, X:Tömb[1..N:Valami], Y:Tömb[1..M:Valami] Kimenet: Van:Logikai Előfeltétel: N 0 és M 0 Utófeltétel: Van= i(1≤i≤N), j(1≤j≤M): X[i]=Y[j]
22
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.22/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés + eldöntés 1. megoldási ötlet: Határozzuk meg a két sorozat közös elemeit (metszet), s ha ennek elemszáma legalább 1, akkor van közös elem!metszet Specifikáció: Az utófeltétel „igazítása”: a metszet részeredménye volt: Db:Egész a módosított utófeltétel: metszet utófeltétele és Van=Db>0. metszet utófeltétele Megjegyzés: A metszet = kiválogatás + eldöntés
23
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.23/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés + eldöntés 2. megoldási ötlet: Ha már találtunk 1 darab közös elemet, ak- kor ne nézzük tovább! i:=1 Van:=Hamis i≤N és nem Van j:=1 j≤M és X[i]≠Y[j] j:=j+1 j≤M Van:=Igaz i:=i+1 I N
24
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.24/422015. 03. 31.2015. 03. 31.2015. 03. 31. Összegzés mátrixra Feladat: Egy mátrix elemeinek összege. Specifikáció: Bemenet: N,M:Egész, X:Tömb[1..N,1..M:Egész] Kimenet: S:Egész Előfeltétel: N,M 0 Utófeltétel: S=
25
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.25/422015. 03. 31.2015. 03. 31.2015. 03. 31. Összegzés mátrixra Algoritmus: A megoldás lényegében csak abban külön- bözik az alapváltozattól, hogy a mátrix miatt két –egymásba ágyazott– ciklusra van szükség.alapváltozat S:=0 i=1..N j=1..M S:=S+X[i,j]
26
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.26/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés mátrixra Feladat: Van-e egy mátrixban adott tulajdonságú elem? Specifikáció: Bemenet: N,M:Egész, X:Tömb[1..N,1..M:Valami] Kimenet: Van:Logikai Előfeltétel: N,M 0 Utófeltétel: Van= i(1≤i≤N), j(1≤j≤M): T(X[i,j])
27
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.27/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés mátrixra i:=1 j:=1 i N és nem T(X[i,j]) j<Mj<M j:=j+1 j:=1 i:=i+1 Van:= i N Algoritmus: Az alapváltozathoz képest itt meg kell fogalmazni a mátrix elemein való – nem feltétlenül – végighaladást, soronként, balról jobbra! I N
28
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.28/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés mátrixra i:=1 j:=1 i N és nem T(X[i,j]) j<Mj<M j:=j+1 j:=1 i:=i+1 Van:= i N Algoritmus: Az alapváltozathoz képest itt meg kell fogalmazni a mátrix elemein való – nem feltétlenül – végighaladást, soronként, balról jobbra! I N
29
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.29/422015. 03. 31.2015. 03. 31.2015. 03. 31. Eldöntés mátrixra i:=1 j:=1 i N és nem T(X[i,j]) j<Mj<M j:=j+1 j:=1 i:=i+1 Van:= i N Algoritmus: Az alapváltozathoz képest itt meg kell fogalmazni a mátrix elemein való – nem feltétlenül – végighaladást, soronként, balról jobbra! I N
30
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.30/422015. 03. 31.2015. 03. 31.2015. 03. 31. i:=1 j:=1 i N és nem T(X[i,j]) j<Mj<M j:=j+1 j:=1 i:=i+1 Van:= i N Eldöntés mátrixra Algoritmus: Az alapváltozathoz képest itt meg kell fogalmazni a mátrix elemein való – nem feltétlenül – végighaladást, soronként, balról jobbra! I N
31
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.31/422015. 03. 31.2015. 03. 31.2015. 03. 31. Tesztek előállítása Feladat (teszteléshez) : Egy repülőgéppel Európából Amerikába repültünk. Az út során X kilométerenként mértük a felszín tengerszint feletti magas- ságát ( 0). 0 magasságot ott mértünk, ahol tenger van, >0-t pedig ott, ahol szárazföld. Adjuk meg a szigeteket!
32
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.32/422015. 03. 31.2015. 03. 31.2015. 03. 31. Tesztek előállítása Specifikáció Bemenet: N:Egész, Mag:Tömb[1..N:Egész] Kimenet: Db:Egész, K,V:Tömb[1..Db:Egész] Kis teszteket készíthetünk a tesztelési elveknek megfelelően, például: N=3, Mag=(1,0,1) nincs sziget N=5, Mag=(1,0,1,0,1) egy sziget N=7, Mag=(1,0,1,0,1,0,1) több sziget N=7, Mag=(1,0,1,1,1,0,1) hosszabb szigettesztelési elvek Hogyan készítünk nagy teszteket?
33
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.33/422015. 03. 31.2015. 03. 31.2015. 03. 31. Szabályos tesztek Készíthetünk szabályos teszteket egyszerű cik- lusokkal. Például így: N:=1000 i=1..10 Mag[i]:=11–i i=11..900 Mag[i]:=0 i=901..N Mag[i]:=i–900 Európa tenger Amerika
34
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.34/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (alapok – véletlenszámok) A véletlenszámokat a számítógép egy algorit- mussal állítja elő egy kezdőszámból kiindul- va. x 0 f(x 0 )=x 1 f(x 1 )=x 2 … A „véletlenszerűséghez” megfelelő függvény és jó kezdőszám szükséges. Kezdőszám: (pl.) a belső órából vett érték. Függvény ( az ún. lineáris kongruencia módszernél ): f(x) = (A*x+B) Mod M, ahol A, B és M a függvény belső konstansai.
35
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.35/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (alapok – C++) C++: rand() véletlen egész számot ad 0 és egy maximális érték (RAND_MAX) között. srand(szám) kezdőértéket állít be. Véletlen(a..b) {a,…,b} Véletlen(N) {1,…,N} véletlenszám [0,1) Valós A generátor használa - ta kockadobásra: v=rand() % (b-a+1)+a v=rand() % N+1 v=rand()/(RAND_MAX+1.0) #include … srand(time(NULL)); i=rand() % 6 +1;
36
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.36/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek Véletlen tesztekhez használjunk véletlenszá- mokat! Például így: N:=1000 M:=Véletlen(10) i=1..M Mag[i]:=Véletlen(5..10) i=M+1..900 véletlenszám<0.5 Mag[i]:=0Mag[i]:=1 i=901..N Mag[i]:=Véletlen(3..8) Európa tenger és szigetek Amerika I N
37
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.37/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (Példa – C++) Kód: Specifikációs komment: Az előbbi algorit- mus általánosítása! Fájlkezeléshez
38
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.38/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (Példa – C++) Kód: Függvény- prototípusok Főprogram
39
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.39/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (Példa – C++) Kód: A lényegi eljárás
40
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.40/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (Példa – C++) Kód: Alprogramok implementációja Kód jegyzet- ként
41
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.41/422015. 03. 31.2015. 03. 31.2015. 03. 31. Véletlen tesztek (Példa – C++) Az eredményfájl … és elemzése: Adatfájl jegyzet- ként
42
Programozási alapismeretek 10. előadás vége
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.