39
Algoritmizálás és adatmodellezés 2. előadás

Algoritmizálás és adatmodellezésalgtan1.elte.hu/downloads/eloadas/Tipus2.pdf · 2020. 9. 14. · Összetett típusok 1. Rekord 2. Halmaz (+multihalmaz, intervallumhalmaz) 3. Tömb

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 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