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. 09. 8:15 2/53
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. 09. 8:15 3/53
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. 09. 8:15 4/53
Algoritmus-leíró eszközök Nem strukturált alapszerkezetek: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 5/53
Algoritmus-leíró eszközök Kiegészítő elemek a folyamatábrához: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 6/53
Algoritmus-leíró eszközök Struktogram Programgráf élek nélkül: Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 7/53
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. 09. 8:15 8/53
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. 09. 8:15 9/53
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. 09. 8:15 10/53
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. 09. 8:15 11/53
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. 09. 8:15 12/53
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. 09. 8:15 13/53
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! Eljárás 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. 09. 8:15 14/53
Mutató típusok Példa: Rendezzünk ábécé-sorrendbe N szöveget! Eljárás 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. 09. 8:15 15/53
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. 09. 8:15 16/53
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. 09. 8:15 17/53
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. 09. 8:15 18/53
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. 09. 8:15 19/53
Objektumelvű programozás I. A típusfogalom problémája Típusfogalom a programozásban: Típus=értékhalmaz+műveletek Típusdefiníció programozási nyelvekben: értékhalmaz Jó lenne: típusnév=(értékhalmaz,műveletek) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 20/53
Objektumelvű programozás Osztály a típusfogalom megvalósítása értékhalmaz (~ tulajdonságok) műveletek (~ metódusok) Objektum osztály típusú változó Egységbe zárás a tulajdonságokat és a műveleteket egy egységbe foglaljuk, de a tulajdonságokhoz kívülről nem férünk hozzá, csak a műveleteken keresztül. Hozzáférés saját (privát), védett, nyilvános. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 21/53
Objektumelvű programozás Példa: háromszög típus Típus Háromszög Értékhalmaz: csúcsok: tömb(1..3:pont) Műveletek: Létrehoz(A,B,C: Pont) Eltol(dx,dy: Valós) Forgat(alfa: Valós) Nagyít(nx,ny: Valós) Terület: Valós Konstruktor az objektum keletkezésekor kezdőértéket ad (lehet paraméter nélküli és paraméteres), dinamikus objektum esetén memóriát is foglal. Destruktor memóriát felszabadít. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 22/53
Objektumelvű programozás Öröklés Ős Utód, az utód az ős egy speciális fajtája Új osztály létrehozása örökléssel Az értékhalmaz direktszorzat művelettel bővülhet A művelethalmaz régi műveletei megmaradhatnak régi műveletei átdefiniálhatóak új műveletek hozhatók létre Öröklés haszna a programszöveg lerövidülése Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 23/53
Objektumelvű programozás Öröklés tulajdonságai Antiszimmetrikus: Ős Utód, de nem Utód Ős Tranzitív: Ős Utód1 Utód2 Többszörös öröklés Ős1 Ős2 Utód Pl. a Windows ablakrendszere (Ős1: ablak, Ős2: fa ) Többszörös öröklés problémája Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 24/53
Objektumelvű programozás Új osztály létrehozása örökléssel Típus Derékszögű háromszög Ős: Háromszög Értékhalmaz: derékszög sorszáma: Egész Műveletek: Terület: Valós Magasság: Valós Típus Háromszög Értékhalmaz: csúcsok: tömb(1..3:pont) Műveletek: Létrehoz(A,B,C: Pont) Eltol(dx,dy: Valós) Forgat(alfa: Valós) Nagyít(nx,ny: Valós) Terület: Valós Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 25/53
Objektumelvű programozás Típuskompatibiliás Változó A: Háromszög B: Derékszögű háromszög A:=B értékadás szabályos-e? IGEN, A minden része kitölthető B:=A értékadás szabályos-e? NEM, B nem minden része tölthető ki (egyelőre) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 26/53
Objektumelvű programozás komplex példa Szakasz x, y a szakasz kezdőpontja xhossz, yhossz a szakasz hossza x és y irányban szín a szakasz színe a képernyőn Téglalap x, y a téglalap bal felső sarka xhossz, yhossz a téglalap x és y irányú oldalai szín a téglalap színe a képernyőn Kör x, y a kör középpontja sugár a kör sugara szín a kör színe a képernyőn Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 27/53
Objektumelvű programozás komplex példa Műveletek közösek mindhárom típusra: Létrehoz Kirajzol Letöröl Színmódosít(szín: Színtípus) Mozgat(dx,dy: Egész) Az utóbbi kettő megvalósítása nem függ a típustól. Az x, az y és a szín mindhárom típusban szerepel. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 28/53
Új típus Pont Objektumelvű programozás komplex példa Pont Értékhalmaz: x, y a pont kezdőpontja szín a pont színe a képernyőn Műveletek: Létrehoz (kx,ky: Egész,ks: Színtípus) Kirajzol Letöröl Színmódosít(U: Színtípus) Mozgat(dx,dy: Egész) Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 29/53
Objektumelvű programozás Új típus Pont Színmódosít(U: Színtípus): szín:=u Eljárás vége. komplex példa Mozgat(dx,dy: Egész): Letöröl x:=x+dx; y:=y+dy Kirajzol Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 30/53
Objektumelvű programozás komplex példa Új típus Szakasz Szakasz Ős: Pont Értékhalmaz: xhossz, yhossz Műveletek: Kirajzol Letöröl Kirajzol: Szakaszrajzolás(x,y,x+xhossz,y+yhossz) Eljárás vége. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 31/53
Objektumelvű programozás komplex példa Változó p: Pont; sz: Szakasz p.mozgat(10,20) sz.mozgat(10,20) Mi történik? Miért? Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 32/53
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. 09. 8:15 33/53
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. 09. 8:15 34/53
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. 09. 8:15 35/53
Tömb típus Mátrix sorfolytonos ábrázolása Ha n sora és m oszlopa van, mindkettő 1-től indexelve: Függvény 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: Függvény 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. 09. 8:15 36/53
Tömb típus Mátrix oszlopfolytonos ábrázolása Ha n sora és m oszlopa van, mindkettő 1-től indexelve: Függvény 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: Függvény 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. 09. 8:15 37/53
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. 09. 8:15 38/53
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. 09. 8:15 39/53
Ö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. 09. 8:15 40/53
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. 09. 8:15 41/53
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. 09. 8:15 42/53
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. 09. 8:15 43/53
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. Zsakó László: Algoritmizálás, adatmodellezés 2018. 02. 09. 8:15 44/53
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. 09. 2015.02.17. 8:15 45/53
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. 09. 8:15 46/53
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. 09. 8:15 47/53
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. 09. 8:15 48/53
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. 09. 2015.02.17. 8:15 49/53
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. 09. 8:15 50/53
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. 09. 8:15 51/53
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. 09. 8:15 52/53
Algoritmizálás, adatmodellezés 1. előadás vége