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:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 2/53
Algoritmus-leíró eszközök
Folyamatábra
A csomópontokból előállíthatók az algoritmikus struktúrák:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 4/53
Algoritmus-leíró eszközök
Nem strukturált alapszerkezetek:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 5/53
Algoritmus-leíró eszközök
Kiegészítő elemek a folyamatábrához:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 6/53
Algoritmus-leíró eszközök
Struktogram
Programgráf élek nélkül:
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 8/53
Elemi típusok
Felsorolás típus
Értékhalmaz: (konstans1, konstans2, ... , konstansN)
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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 9/53
Elemi típusok
Felsorolás típusBe: ma
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 hHét
Ki: h
Ciklus vége
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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ó AB
Sokaság sok azonos típusú elem
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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ó
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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)2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 21/53
Objektumelvű programozás
Példa: háromszög típusTí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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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ésselAz é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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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 →
Pl. a Windows ablakrendszere (Ős1: ablak, Ős2: fa )
Többszörös öröklés problémája
Utód
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 24/53
Objektumelvű programozás
Új osztály létrehozása öröklésselTí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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezé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
25/53
Objektumelvű programozás
TípuskompatibiliásVá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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 26/53
Objektumelvű programozás –
komplex példa
Szakaszx, y a szakasz kezdőpontjaxhossz, yhossz a szakasz hossza x és y iránybanszín a szakasz színe a képernyőn
Téglalapx, y a téglalap bal felső sarkaxhossz, yhossz a téglalap x és y irányú oldalaiszín a téglalap színe a képernyőn
Körx, y a kör középpontjasugár a kör sugaraszín a kör színe a képernyőn
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 28/53
Objektumelvű programozás –
komplex példa
Új típus – Pont
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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 29/53
Objektumelvű programozás –
komplex példa
Új típus – PontSzínmódosít(U: Színtípus):
szín:=u
Eljárás vége.
Mozgat(dx,dy: Egész):
Letöröl
x:=x+dx; y:=y+dy
Kirajzol
Eljárás vége.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 30/53
Objektumelvű programozás –
komplex példa
Új típus – SzakaszSzakasz
Ő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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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?
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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(indextip1,indextip2: elemtípus)
...
Hivatkozások: A(i), A(i..j), A(i,j), A(i,),A(,j), A(i..j,k..l)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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)
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
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.
a tömb a memóriában
... (1,1) (2,1) ... (1,2) (2,2) ... (n,m) ... egy elem mérete
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 37/53
1. Összegzés mátrixra
Specifikáció:Bemenet: N,MN, XHNM
Kimenet: SH
Előfeltétel: –
Utófeltétel:S=
M
1jji,
N
1i
X
H: Z vagy R vagy N
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 38/53
1. Összegzés mátrixra
Algoritmus:A megoldás lényegében csak abban különbözik az alap-vá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
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 39/53
1. Összegzés mátrixra
Ö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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 40/53
2. Megszámolás mátrixra
Specifikáció:Bemenet: N,MN, XHNM, T:HL
Kimenet: DbN
Előfeltétel: –
Utófeltétel:Db=
M
)T(X1j
N
1i
ji,
1
H: tetszőleges halmaz
T: tetszőleges
tulajdonság-függvény
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 42/53
Specifikáció:Bemenet: N,MN, XHNM
Kimenet: Maxi,MaxjN, MaxertH
Előfeltétel: N>0 és M>0
Utófeltétel:1MaxiN és 1MaxjM ési,j (1iN) (1jM):XMaxi,MaxjXi,j és Maxert=XMaxi,Maxj
3. Maximum-kiválasztás
mátrixra
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 44/53
4. Eldöntés mátrixra
Feladat:
Van-e egy mátrixban adott tulajdonságú elem?
Specifikáció:Bemenet: N,MN, XHNM, T:HL
Kimenet: VaneL
Előfeltétel: –
Utófeltétel: Vane=i,j(1≤i≤N)(1≤j≤M):T(Xi,j)
2015.02.17.2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 45/53
4. Eldöntés mátrixra
Eldöntés(N,M,X,Vane):
i:=1; j:=1
Ciklus amíg iN é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:=iN
Eljárás vége.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 46/53
5. Kiválasztás mátrixra
Specifikáció:Bemenet: N,MN, XHNM, T:HL
Kimenet: Indi,IndjN
Előfeltétel: N>0 és M>0 és i,j (1iN) (1jM): T(Xi,j)
Utófeltétel:1IndiN és 1IndjM és T(XIndi,Indj)
Megjegyzés: a kimeneti indexpárt
egy rekordban is tárolhattuk volna!
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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,MN, XHNM, T:HL
Kimenet: VaneL, Indi,IndjN
Előfeltétel: –
Utófeltétel: Vane=i,j(1≤i≤N)(1≤j≤M): T(Xi,j) és Vane 1IndiN és 1IndjM és T(XIndi,Indj)
2015.02.17.2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 49/53
6. Keresés mátrixra
Keresés(N,M,X,Vane,Indi,Indj):
i:=1; j:=1
Ciklus amíg iN é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:=iN
Ha Vane akkor Indi:=i; Indj:=j
Eljárás vége.
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 50/53
7. Kiválogatás mátrixra
Specifikáció:Bemenet: N,MN, XHNM, T:HL
Kimenet: DbN, YHelyN*M, Hely=SO, S,O=N
Előfeltétel: –
Utófeltétel:Db= és i(1≤i≤Db):T(XYi.S,Yi.O) és
Y((1,1), (1,2),… (1,M), (2,1),…. (N,M))
M
)T(X1j
N
1i
ji,
1
2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 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!)2018. 02. 09. 8:15Zsakó László: Algoritmizálás, adatmodellezés 52/53
Algoritmizálás, adatmodellezés
1. előadás vége