Algoritmizálás, adatmodellezés 1. előadás
Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az induló élből bármely csomópont elérhető, s bármely csomópontból el lehet jutni a befejező élre. Háromféle csomópontot tartalmaz: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 2/40
Algoritmus-leíró eszközök Folyamatábra A csomópontokból előállíthatók az algoritmikus struktúrák: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 3/40
Algoritmus-leíró eszközök Definíció: Strukturált programnak nevezzük azt a programot, amely csak a fenti három algoritmikus szerkezetet (szekvencia, elágazás, ciklus) tartalmazza. Nem strukturált alapszerkezetek: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 4/40
Algoritmus-leíró eszközök Nem strukturált alapszerkezetek: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 5/40
Algoritmus-leíró eszközök Kiegészítő elemek a folyamatábrához: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 6/40
Algoritmus-leíró eszközök Struktogram Programgráf élek nélkül: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 7/40
Elemi típusok 1. Egész típusok (előjeles, előjel nélküli, különböző méretben) 2. Valós típusok (különböző méretben és pontossággal) 3. Logikai típus 4. Karakter típus (értékhalmaz problémák) 5. Felsorolás típus 6. (Rész)intervallum típus 7. Mutató típusok Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 8/40
Felsorolás típus Elemi típusok Értékhalmaz: (konstans 1, konstans 2,..., konstans N ) Műveletek: Következő(kifejezés), Előző(kifejezés), Rend(kifejezés). Példa: Típus Hét=(hétfő,kedd,szerda,csütörtök,péntek, szombat,vasárnap) Munkanap=hétfő..péntek Változó tegnap, ma, holnap, h : Hét; i: egész Konstans ünnepnap : Hét(vasárnap) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 9/40
Felsorolás típus Be: ma Elemi típusok Ha ma=min'hét akkor tegnap:=max'hét különben tegnap:=előző(ma) i:=rend(ma) Ha ma=max'hét akkor holnap:=min'hét különben holnap:=következő(ma) Ciklus h Hét Ki: h Ciklus vége Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 10/40
Mutató típusok Tulajdonságok: A mutató típus memóriacímek, illetve azokon a címeken levő értékek kezelésére szolgál. Az ilyen típusú változók (ti. amire a mutató típus mutat) automatikusan nem születnek meg (nem kerülnek be a memóriába) és nem is szűnnek meg erről magunknak kell gondoskodni. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 11/40
Mutató típusok Tetszőleges (többnyire összetett) típushoz, mint bázistípushoz (TB) szervesen tartozhat egy-egy ilyen típus. Egy konkrét mutató típusú objektum csak egyfajta (nevezetesen TB-típusú) elemek kezdőcímeit hordozhatja. Kezdőérték: Sehova Műveletek: Lefoglal(m), illetve Lefoglal(m,e) Felszabadít(m) tartalom(m) vagy TB(m) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 12/40
Mutató típusok Példa: Rendezzünk ábécé-sorrendbe N szöveget! Alapmegoldás: Ciklus i=1-től N 1-ig Ciklus j=i+1-től N-ig Ha S(j)<S(i) akkor Csere(S(i),S(j)) Ciklus vége Ciklus vége Eljárás vége. Probléma: Szöveg cseréje hosszú szövegek esetén sokáig tarthat. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 13/40
Mutató típusok Példa: Rendezzünk ábécé-sorrendbe N szöveget! Ötlet: Vezessünk be N mutató típusú változót és beolvasáskor a szövegeknek foglaljunk helyet! Beolvasás: Ciklus i=1-től N-ig Be: S; Lefoglal(M(i),S) Ciklus vége Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 14/40
Mutató típusok Példa: Rendezzünk ábécé-sorrendbe N szöveget! Mutatós megoldás: Ciklus i=1-től N 1-ig Ciklus j=i+1-től N-ig Ha tartalom(m(j))<tartalom(m(i)) akkor Csere(M(i),M(j)) Ciklus vége Ciklus vége Eljárás vége. Itt tehát nem a hosszú szövegeket cserélgetjük, hanem a rövid mutatókat. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 15/40
Típusok osztályozása Összetettség (strukturáltság) szempontjából: skalár (más szóval elemi vagy strukturálatlan) összetett (más szóval strukturált) Strukturálási módok Keresztszorzat AxB Unió A B Sokaság sok azonos típusú elem Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 16/40
Típusok osztályozása Sokaság osztályozása rákövetkezés szerint Halmaz: nincs rákövetkezési reláció Sorozat: minden elemet egy elem követ és egy előz meg (kivéve esetleg a két szélső elemet) Hierarchikus struktúra: minden elemet egy előz meg, de több is követhet Hálós struktúra: minden elemet több előzhet meg és több is követhet Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 17/40
Típusok osztályozása Sokaságtípusok néhány megjelenése Halmaz: halmaz, multihalmaz, intervallumhalmaz, táblázat, diszjunkt halmazfelbontás Sorozat: tömb, verem, sor, prioritási sor, listák, szekvenciális fájlok, függvény Hierarchikus struktúra: bináris fa, nem bináris fa Hálós struktúra: irányítatlan gráf, irányított gráf, programgráf, háló Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 18/40
Típusok műveletei A típusműveletek osztályozása: értékadás (azonos típusúak közötti adatmozgatás) konstrukciós műveletek (strukturált érték létrehozása) szelekciós műveletek (strukturált érték részei kiválasztása) azonosság és más relációk számosság-függvény Min és Max típusoperátor Sorszám- (vagy Rend-) függvény transzformációs (a típuson értelmezett, a típusra képező függvények) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 19/40
Tömb típus A tömb fogalma Definíció: sorozat típus a következő műveletekkel: indexelés, résztömb képzés, mátrix sora, oszlopa, részmátrixa, relációk. Alapesetben statikus, az elemszáma nem változtatható. Definiálása: Tömb(indextípus: elemtípus) Tömb(indextip 1,indextip 2 : elemtípus)... Hivatkozások: A(i), A(i..j), A(i,j), A(i,), A(,j), A(i..j,k..l) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 20/40
Tömb típus A tömb fogalma Indextípus lehetőségei (nyelvfüggő megvalósítás): 1..elemszám (ilyenkor általában az elemszámot kell megadni) 0..elemszám-1 (ilyenkor általában az elemszámot kell megadni) alsó határ..felső határ (ebben az esetben az index nem csak egész szám lehet) Példa: Tömb(1..maxn: egész) Tömb( a.. z,hétfő..péntek: valós) Tömb(-10..10: Tömb(-1..1: karakter)) Tömb(-10..10,-1..1: karakter) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 21/40
Tömb típus Ábrázolás Szekvenciális, folytonos (többindexes tömböknél oszlop- vagy sorfolytonos). Az elemek méretének ismeretében számítható az elemek memóriabeli címe: a tömb a memóriában... 1. elem 2. elem... utolsó elem... egy elem mérete Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 22/40
Tömb típus Mátrix sorfolytonos ábrázolása Ha n sora és m oszlopa van, mindkettő 1-től indexelve: Cím(i,j):Egész Cím:=(i-1)*m+j Függvény vége. a tömb a memóriában... (1,1) (1,2)... (2,1) (2,2)... (n,m)... egy elem mérete Indextípus=(a..b,c..d) esetén: Cím(i,j):Egész Cím:=(i-a)*(d-c+1)+j-c+1 Függvény vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 23/40
Tömb típus Mátrix oszlopfolytonos ábrázolása Ha n sora és m oszlopa van, mindkettő 1-től indexelve: Cím(i,j):Egész Cím:=(j-1)*n+i Függvény vége. a tömb a memóriában... (1,1) (2,1)... (1,2) (2,2)... (n,m)... egy elem mérete Indextípus=(a..b,c..d) esetén: Cím(i,j):Egész Cím:=(j-c)*(b-a+1)+i-a+1 Függvény vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 24/40
1. Összegzés mátrixra Specifikáció: Bemenet: N,M N, X H N M Kimenet: S H Előfeltétel: N M Utófeltétel:S= X i 1 j 1 i,j H: Z vagy R vagy N Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 25/40
1. Összegzés mátrixra Algoritmus: A megoldás lényegében csak abban különbözik az alapváltozattól, hogy a mátrix miatt két egymásba ágyazott ciklusra van szükség. Konstans maxn,maxm:egész(???) Típus Tmatrix=Tömb(1..maxN,1..maxM:TH) Változó N,M:Egész X:Tmatrix S:TH Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 26/40
Összegzés(N,M,X,S): S:=0 Ciklus i=1-től N-ig Ciklus j=1-től M-ig S:=S+X(i,j) Ciklus vége Ciklus vége Eljárás vége. 1. Összegzés mátrixra Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 27/40
Specifikáció: 2. Megszámolás mátrixra Bemenet: N,M N, X H N M, T:H L Kimenet: Db N Előfeltétel: N M Utófeltétel:Db= 1 i 1 j 1 T(X i, j ) H: tetszőleges halmaz T: tetszőleges tulajdonság-függvény Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 28/40
2. Megszámolás mátrixra Megszámolás(N,M,X,Db): Db:=0 Ciklus i=1-től N-ig Ciklus j=1-től M-ig Ha T(X(i,j)) akkor Db:=Db+1 Ciklus vége Ciklus vége Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 29/40
Specifikáció: 3. Maximum-kiválasztás mátrixra Bemenet: N,M N, X H N M Kimenet: Maxi,Maxj N, Maxert H Előfeltétel: N>0 és M>0 Utófeltétel:1 Maxi N és 1 Maxj M és i,j (1 i N) (1 j M):X Maxi,Maxj X i,j és Maxert=X Maxi,Maxj Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 30/40
3. Maximum-kiválasztás mátrixra Maximumkiválasztás(N,M,X,Maxi,Maxj,Maxert): Maxi:=1; Maxj:=1; Maxert:=X(1,1) Ciklus i=1-től N-ig Ciklus j=1-től M-ig Ha X(i,j)>Maxert akkor Maxi:=i; Maxj:=j Maxert:=X(i,j) Ciklus vége Ciklus vége Eljárás vége. Variáció: Maxert:=- Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 31/40
4. Eldöntés mátrixra Feladat: Van-e egy mátrixban adott tulajdonságú elem? Specifikáció: Bemenet: N,M N, X H N M, T:H L Kimenet: Vane L Előfeltétel: Utófeltétel: Vane= i,j(1 i N)(1 j M):T(X i,j ) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 2015.02.17. 8:05 32/40
4. Eldöntés mátrixra Eldöntés(N,M,X,Vane): i:=1; j:=1 Ciklus amíg i N és nem T(X(i,j)) Ha j<m akkor j:=j+1 különben i:=i+1; j:=1 Ciklus vége Vane:=i N Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 33/40
Specifikáció: 5. Kiválasztás mátrixra Bemenet: N,M N, X H N M, T:H L Kimenet: Indi,Indj N Előfeltétel: N>0 és M>0 és i,j (1 i N) (1 j M): T(X i,j ) Utófeltétel:1 Indi N és 1 Indj M és T(X Indi,Indj ) Megjegyzés: a kimeneti indexpárt egy rekordban is tárolhattuk volna! Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 34/40
5. Kiválasztás mátrixra Kiválasztás(N,M,X,Indi,Indj): i:=1; j:=1 Ciklus amíg nem T(X(i,j)) Ha j<m akkor j:=j+1 különben i:=i+1; j:=1 Ciklus vége Indi:=i; Indj:=j Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 35/40
6. Keresés mátrixra Feladat: Van-e egy mátrixban adott tulajdonságú elem és ha van, akkor hol? Specifikáció: Bemenet: N,M N, X H N M, T:H L Kimenet: Vane L, Indi,Indj N Előfeltétel: Utófeltétel: Vane= i,j(1 i N)(1 j M): T(X i,j ) és Vane 1 Indi N és 1 Indj M és T(X Indi,Indj ) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 2015.02.17. 8:05 36/40
6. Keresés mátrixra Keresés(N,M,X,Vane,Indi,Indj): i:=1; j:=1 Ciklus amíg i N és nem T(X(i,j)) Ha j<m akkor j:=j+1 különben i:=i+1; j:=1 Ciklus vége Vane:=i N Ha Vane akkor Indi:=i; Indj:=j Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 37/40
7. Kiválogatás mátrixra Specifikáció: Bemenet: N,M N, X H N M, T:H L Kimenet: Db N, Y Hely N*M, Hely=S O, S,O=N Előfeltétel: Utófeltétel:Db= N i 1 M j 1 T(X ) i, j 1 és i(1 i Db):T(X Y i.s,yi.o) és Y ((1,1), (1,2), (1,M), (2,1),. (N,M)) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 38/40
7. Kiválogatás mátrixra Kiválogatás(N,M,X,Db,Y): Db:=0 Ciklus i=1-től N-ig Ciklus j=1-től M-ig Ha T(X(i,j)) akkor Db:=Db+1; Y(Db).s:=i; Y(Db).o:=j Elágazás vége Ciklus vége Ciklus vége Eljárás vége. A sorszám itt is általánosabb mint az érték, ha mégis érték kellene, akkor Y(Db):=X(i,j) szerepelne. (Ekkor persze a specifikációt is módosítani kell!) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 08. 8:05 39/40
Algoritmizálás, adatmodellezés 1. előadás vége