Algoritmizálás, adatmodellezés 1. előadásalgtan1.elte.hu/downloads/eloadas/Tipus1.pdfPélda:...

Post on 23-Mar-2021

0 views 0 download

Transcript of Algoritmizálás, adatmodellezés 1. előadásalgtan1.elte.hu/downloads/eloadas/Tipus1.pdfPélda:...

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