Algoritmizálás és adatmodellezésalgtan1.elte.hu/downloads/eloadas/Tipus2.pdf · 2020. 9....
Transcript of Algoritmizálás és adatmodellezésalgtan1.elte.hu/downloads/eloadas/Tipus2.pdf · 2020. 9....
-
Algoritmizálás és adatmodellezés
2. előadás
-
Összetett típusok
1. Rekord
2. Halmaz (+multihalmaz, intervallumhalmaz)
3. Tömb (vektor, mátrix)
4. Szekvenciális fájl (input, output)
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 2/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Sorozattípus műveletei
Üres Létrehoz, elemek nélkül.
Létrehoz Létrehoz, struktúrától függő elemekkel.
Üres?/Teli? Ellenőrzi, hogy van-e eleme / bővíthető lenne-e?
ElemSzám Hány eleme van?
Beilleszt Struktúrától függő helyre új elemet illeszt.
Kihagy Struktúrától függő helyről elemet hagy el.
Első/Utolsó Első / utolsó elemének értékét adja vissza.
Elejéről/Végéről Leválasztja a sorozat első / utolsó elemét, és értékét is
visszaadja.
ElsőUtániak/UtolsóElőttiek Visszaadja a
sorozatot az első / utolsó elem nélkül.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 3/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Sorozattípus műveletei
Elejére/Végére A sorozat első eleme elé / utolsó eleme mögé
illeszt egy újat.
Elem Struktúrától függően egy meghatározott elemének
értékét adja vissza.
ElemMódosít Struktúrától függően meghatározott elemének új
értéket ad.
Elsőre/Utolsóra A struktúra első / utolsó elem lesz az aktuális (ha volt ilyen).
Előzőre/Következőre A struktúra aktuális eleme (ha volt ilyen) legyen az eddigit
megelőző / követő.
Első?/Utolsó? A struktúra aktuális eleme az első / utolsó elem-e?
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 4/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Tömb típus
Speciális vektorok, mátrixok (n*n-es négyzetes)
Számtani, mértani sorozat, konstans sorozat
• xn=x0+a*n,
• xn=x0*an
Diagonális mátrix, tridiagonális mátrix
Toeplitz-mátrix, Hankel-mátrix,
Leslie-mátrix,
Háromszög mátrix, szimmetrikus mátrix
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 5/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Diagonális mátrix
A 0-tól különböző elemei csak az ún. főátlóban vannak
(tetszőleges konstans érték is lehetne a 0 helyett).
Ábrázolása: Tömb(0..n: Elemtípus) (0,a,b,...,y)
A 0. elem lesz a konstans érték, az i. elem pedig a mátrix (i,i)
indexű eleme.
Függvény Cím(i,j):Egész
Ha i=j akkor Cím:=i különben Cím:=0
Függvény vége.
2021. 02. 10. 10:05
abc
xy
0 00 0 00 0 0
0 0 00 00 0
. . .
. . .
. . .
. . .
. . .
. . .
Zsakó László: Algoritmizálás, adatmodellezés 6/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Tridiagonális mátrix
A 0-tól különböző elemei csak az ún. főátlóban, valamint az
alatta és a fölötte levő átlóban vannak.
Ábrázolása: Tömb(0..3*n-2: Elemtípus) sorfolytonosan
Függvény Cím(i,j):Egész
Ha |i-j|≤1 akkor Cím:=(i-1)*2+j
különben Cím:=0
Függvény vége.
(0,t1,t2,...,t3*n-2)
2021. 02. 10. 10:05
??
???
??
876
543
21
tt0...
ttt...
0tt...
...ttt0
...0ttt
...0tt
Zsakó László: Algoritmizálás, adatmodellezés 7/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Toeplitz mátrix
A főátlóban és a vele párhuzamos összes átlóban egyforma
elemek vannak.
Ábrázolása: Tömb(1..2*n-1: Elemtípus)
Első oszlop és első sor tárolásával: (... e c a b d ...)
1: (n,1) átló, 2: (n-1,1) átló, ..., n: (1,1) átló, ..., 2*n-1: (1,n) átló.
Függvény Cím(i,j):Egész
Cím:=n-(i-j)
Függvény vége.
2021. 02. 10. 10:05
a b dc a b de c a b
a b dc a be c a
. . .
. . .
. . .
. . .
. . .
. . .
Zsakó László: Algoritmizálás, adatmodellezés 8/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Hankel mátrix
A mellékátlóban és a vele párhuzamos összes átlóban egyforma
elemek vannak.
Ábrázolása: Tömb(1..2*n-1: Elemtípus)
Első sor és utolsó oszlop tárolásával: (... d b a c e ...)
1: (1,1) átló, 2: (1,2) átló, ..., n: (1,n) átló, ..., 2*n-1: (n,n) átló.
Függvény Cím(i,j):Egész
Cím:=i+j-1
Függvény vége.
2021. 02. 10. 10:05
. . .
. . .
. . .
. . .
. . .
. . .
d b ad b a ca c e
d b ab a ca c e
Zsakó László: Algoritmizálás, adatmodellezés 9/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Leslie mátrix
Az első sorban és a (2,1)-ből induló átlóban vannak nem 0
elemek.
Ábrázolása: Tömb(0..2*n-1: Elemtípus)
Az első n elem az első sor, amit az átló n-1 eleme követ.
Függvény Cím(i,j):Egész
Ha i=1 akkor Cím:=j különben
ha i=j+1 akkor Cím:=n+j különben Cím:=0
Függvény vége.
2021. 02. 10. 10:05
s s s s
á
á
á
n
n
1 2 3
2
3
0 0 0
0 0
0 0 0 0
. . .
. . .
. . . .
. . . . . .. .
Zsakó László: Algoritmizálás, adatmodellezés 10/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Felső háromszög mátrix
A főátlóban és felette vannak nem 0 elemek.
Ábrázolása: Tömb(0..n*(n+1)/2: Elemtípus)
Oszlopfolytonosan helyezzük el az elemeket a vektorban.
(0,h1,1,h1,2,h2,2,h1,3,...hn,n)
Függvény Cím(i,j):Egész
Ha i≤j akkor Cím:=j*(j-1)/2+i
különben Cím:=0
Függvény vége.
2021. 02. 10. 10:06
n,n
n,33,3
n,23,22,2
n,13,12,11,1
h0..000
......
h...h00
h...hh0
h...hhh
Zsakó László: Algoritmizálás, adatmodellezés 11/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Alsó háromszög mátrix
A főátlóban és alatta vannak nem 0 elemek.
Ábrázolása: Tömb(0..n*(n+1)/2: Elemtípus)
Sorfolytonosan helyezzük el az elemeket a vektorban.
(0,h1,1,h2,1,h2,2,h3,1,...hn,n)
Függvény Cím(i,j):Egész
Ha i≥j akkor Cím:=i*(i-1)/2+j
különben Cím:=0
Függvény vége.
2021. 02. 10. 10:06
n,n3,n2,n1,n
3,32,31,3
2,21,2
1,1
h...hhh
......
0...hhh
0...0hh
0...00h
Zsakó László: Algoritmizálás, adatmodellezés 12/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Szimmetrikus mátrix
A főátlóra szimmetrikusak az elemek, azaz A(i,j)=A(j,i).
Ábrázolása: Tömb(1..n*(n+1)/2: Elemtípus)
Oszlopfolytonosan helyezzük el az átló feletti elemeket a
vektorban.
Függvény Cím(i,j):Egész
Ha i≤j akkor Cím:=j*(j-1)/2+i
különben Cím:=i*(i-1)/2+j
Függvény vége.
2021. 02. 10. 10:05
n,nn,3n,2n,1
n,33,33,23,1
n,23,22,22,1
n,13,12,11,1
h...hhh
......
h...hhh
h...hhh
h...hhh
Zsakó László: Algoritmizálás, adatmodellezés 13/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Speciális szerkezetű tömbök
Változtatható méretű (dinamikus) tömb
Új műveletek:
• Méret növelés
• Méret növelés, egy elem berakással
• Méret csökkentés
• Méret lekérdezés
Előnyök és hátrányok dinamikus tömböknél.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 14/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Szövegfájl
A szövegfájl karakterek sorozata:
input fájl
Műveletei: nyit, zár, olvas,sorolvas,vége?
output fájl
Műveletei: nyit, zár, ír,sorír
Olvasás és írás közben konverzió történik.
2021. 02. 10. 10:05
Szövegfájlok
Zsakó László: Algoritmizálás, adatmodellezés 15/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Szekvenciális fájl
A szekvenciális fájl rekordok sorozata:
input fájl
Műveletei: nyit, zár, olvas, vége?
output fájl
Műveletei: nyit, zár, ír
Fájl típus
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 16/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Fájl típus
Fájl feldolgozásEljárás FájlFeldolgoz(f,g):
Nyit(f); Nyit(g)
Ciklus amíg nem Vége?(f)
Olvas(f,rek)
Feldolgoz(rek,újrek)
Ír(g,újrek)
Ciklus vége
Zár(f); Zár(g)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 17/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Fájl típus
Fájl feldolgozás előreolvasással
Eljárás FájlFeldolgoz(f,g):
Nyit(f); Nyit(g); Olvas(f,rek)
Ciklus amíg nem Vége?(f)
Feldolgoz(rek,újrek); Ír(g,újrek)
Olvas(f,rek)
Ciklus vége
Feldolgoz(rek,újrek)
Ír(g,újrek)
Zár(f); Zár(g)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 18/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Fájl-vége kezelés
logikai fájl-vége (saját megoldás)
fizikai fájl-vége
Eof függvény: utolsó olvasáskor lesz igaz értékű
Státusz változó: utolsó utáni olvasáskor jelez hibát
Fájl típus
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 19/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Fájl feldolgozás előreolvasással – státusz változóEljárás FájlFeldolgoz(f,g):
Nyit(f); Nyit(g); Olvas(f,rek)
Ciklus amíg Státusz(f)=OK
Feldolgoz(rek,újrek)
Ír(g,újrek)
Olvas(f,rek)
Ciklus vége
Zár(f); Zár(g)
Eljárás vége.
Fájl típus
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 20/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Fájl feldolgozás előreolvasással – logikai fájl-végeEljárás FájlFeldolgoz(f,g):
Nyit(f); Nyit(g); Olvas(f,rek)
Ciklus amíg nem Végjel?(rek)
Feldolgoz(rek,újrek)
Ír(g,újrek)
Olvas(f,rek)
Ciklus vége
Zár(f); Zár(g)
Eljárás vége.
Fájl típus
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 21/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Másolás fájlból fájlba
Bemenet: XH*, f:H→G
Kimenet: YG*
Előfeltétel: hossz(X)>0
Utófeltétel: hossz(Y)=hossz(X) és
i(i[1.. hossz(X)]): Yi=f(Xi)
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 22/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Másolásfájlbólfájlba(h,g):
Nyit(h); Nyit(g)
Ciklus amíg nem Vége?(h)
Olvas(h,x); y:=f(x); Ír(g,y)
Ciklus vége
Zár(h); Zár(g)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 23/39
Másolás:
Ciklus i=1-től N-ig
Y[i]:=f(X[i])
Ciklus vége
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Másolás fájlból vektorba
Bemenet: XH*, f:H→G
Kimenet: YGhossz(X)
Előfeltétel: hossz(X)>0
Utófeltétel: i(i[1..hossz(X)]): Yi=f(Xi)
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 24/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Másolásfájlbólvektorba(h,Y,N):
Nyit(h); N:=0
Ciklus amíg nem Vége?(h)
Olvas(h,x)
N:=N+1; Y[N]:=f(x)
Ciklus vége
Zár(h)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 25/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Sorozatszámítás
Bemenet: XH*, F:H*→H, f:HxH→H, F0H
F(X1,...,XN)=f(F(X1,...,XN-1),XN), F()=F0
Kimenet: SH
Előfeltétel: hossz(X)>0
Utófeltétel: S=F(X1,...,Xhossz(X))
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 26/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Sorozatszámítás(h,S):
S:=F0; Nyit(h)
Ciklus amíg nem Vége?(h)
Olvas(h,x); S:=f(S,x)
Ciklus vége
Zár(h)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 27/39
Sorozatszámítás(S):
S:=F0Ciklus i=1-től N-ig
S:=f(S,X[i])
Ciklus vége
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Eldöntés
Bemenet: XH*, T:H→L
Kimenet: VanL
Előfeltétel: hossz(X)>0
Utófeltétel: Van=x(xX): T(x)
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 28/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Előreolvasással:
Eldöntés(h,Van):
Nyit(h); Olvas(h,x)
Ciklus amíg nem Vége?(h) és nem T(x)
Olvas(h,x)
Ciklus vége
Van:=T(x); Zár(h)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 29/39
Eldöntés:
i:=1
Ciklus amíg i≤N és nem T(X[i])
i:=i+1
Ciklus vége
Van:=i≤N
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Kiválasztás
Bemenet: XH*, T:H→L
Kimenet: EH, SN
Előfeltétel: x(xX): T(x)
Utófeltétel: EX és T(E) és 1≤S és E=XS
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 30/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Előreolvasással:
Kiválasztás(h,E,S):
Nyit(h); Olvas(h,x); S:=1
Ciklus amíg nem T(x)
Olvas(h,x); S:=S+1
Ciklus vége
E:=x; Zár(h)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 31/39
Kiválasztás:
i:=1
Ciklus amíg nem T(X[i])
i:=i+1
Ciklus vége
Ind:=i
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Maximumkiválasztás
Bemenet: XH*
Kimenet: MaxIndN, MaxÉrtH
Előfeltétel: hossz(X)>0
Utófeltétel: xX: MaxÉrt≥x és
1≤MaxInd és MaxÉrt=XMaxInd
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 32/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Előreolvasással:
Maximumkiválasztás(h,MaxÉrt,MaxInd):
Nyit(h); Olvas(h,x); S:=1
MaxÉrt:=x; MaxInd:=1
Ciklus amíg nem Vége?(h)
Olvas(h,x); S:=S+1
Ha MaxÉrtMaxÉrt
akkor MaxÉrt:=X[i]; MaxInd:=i
Ciklus vége
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Kiválogatás
Bemenet: XH*, T:H→L
Kimenet: YH*
Előfeltétel: hossz(X)>0
Utófeltétel: YX és x(xY): T(x) és
x(xX és xY): nem T(x)
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 34/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Kiválogatás(h,g):
Nyit(h); Nyit(g)
Ciklus amíg nem Vége?(h)
Olvas(h,x)
Ha T(x) akkor Ír(g,x)
Ciklus vége
Zár(h); Zár(g)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 35/39
Kiválogatás:
Db:=0
Ciklus i=1-től N-ig
Ha T(X[i]) akkor Db:=Db+1; Y[Db]:=X(i)
Ciklus vége
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Szétválogatás
Bemenet: XH*, T:H→L
Kimenet: YH*, ZH*
Előfeltétel: hossz(X)>0
Utófeltétel: YX és y(yY): T(y) és
ZX és z(zZ): nem T(z) és
X=ZY
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 36/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Szétválogatás(h,g1,g2):
Nyit(h); Nyit(g1); Nyit(g2)
Ciklus amíg nem Vége?(h)
Olvas(h,x)
Ha T(x) akkor Ír(g1,x) különben Ír(g2,x)
Ciklus vége
Zár(h); Zár(g1); Zár(g2)
Eljárás vége.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 37/39
Szétválogatás:
Db:=0
Ciklus i=1-től N-ig
Ha T(X[i]) akkor Db:=Db+1; Y[Db]:=i
különben Z[i-Db]:=i
Ciklus vége
Eljárás vége.
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Programozási tételek
szekvenciális fájlra
Mely tételeket nem nézzük fájlokra:
• Rendezések
• Unió, metszet
Oka: nem elemenként feldolgozhatóak.
2021. 02. 10. 10:05Zsakó László: Algoritmizálás, adatmodellezés 38/39
http://ikportal.inf.elte.hu:8080/ELTEInformatikaiKar/elte_ik_2.html
-
Algoritmizálás és adatmodellezés
2. előadás vége