Algoritmizálás és adatmodellezés 2 előadás
Összetett típusok 1 Rekord 2 Halmaz (+multialmaz, intervallumalmaz) 3 Tömb (vektor, mátrix) 4 Szekvenciális fájl (input, output) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 2/37
Sorozattípus műveletei Üres Létreoz Üres?/Teli? ElemSzám Beilleszt Kiagy Első/Utolsó Létreoz, elemek nélkül Létreoz, struktúrától függő elemekkel Ellenőrzi, ogy van-e eleme / bővítető lenne-e? Hány eleme van? Struktúrától függő elyre új elemet illeszt Struktúrától függő elyről elemet agy el 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 3/37
Sorozattípus műveletei Elejére/Végére Elem ElemMódosít Elsőre/Utolsóra A sorozat első eleme elé / utolsó eleme mögé illeszt egy újat Struktúrától függően egy megatározott elemének értékét adja vissza Struktúrától függően megatározott elemének új értéket ad A struktúra első / utolsó elem lesz az aktuális (a volt ilyen) Előzőre/Következőre A struktúra aktuális eleme (a volt ilyen) legyen az eddigit megelőző / követő Első?/Utolsó? A struktúra aktuális eleme az első / utolsó elem-e? Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 4/37
Tömb típus Speciális vektorok, mátrixok (n*n-es négyzetes) Számtani, mértani sorozat, konstans sorozat 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 5/37
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 leetne a 0 elyett) Ábrázolása: Tömb(0n: Elemtípus) A 0 elem lesz a konstans érték, az i elem pedig a mátrix (i,i) indexű eleme a 0 0 Cím(i,j):Egész 0 b 0 0 Ha i=j akkor Cím:=i különben Cím:=0 0 0 c 0 Függvény vége 0 0 0 0 x 0 0 0 y Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 6/37
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(03*n-2: Elemtípus) sorfolytonosan 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 2018 02 08 8:04??????? 8 7 6 5 4 3 2 1 t t 0 t t t 0 t t t t t 0 0 t t t 0 t t Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 7/37
Toeplitz mátrix Speciális szerkezetű tömbök A főátlóban és a vele páruzamos összes átlóban egyforma elemek vannak Ábrázolása: Tömb(12*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ó Cím(i,j):Egész Cím:=n-(i-j) Függvény vége a b d c a b d e c a b Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 8/37 a b d c a b e c a
Hankel mátrix Speciális szerkezetű tömbök A mellékátlóban és a vele páruzamos összes átlóban egyforma elemek vannak Ábrázolása: Tömb(12*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ó Cím(i,j):Egész Cím:=i+j-1 Függvény vége d b a b a c a c e d b a d b a c a c e Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 9/37
Leslie mátrix Speciális szerkezetű tömbök Az első sorban és a (2,1)-ből induló átlóban vannak nem 0 elemek Ábrázolása: Tömb(02*n-1: Elemtípus) Az első n elem az első sor, amit az átló n-1 eleme követ Cím(i,j):Egész Ha i=1 akkor Cím:=j különben a i=j+1 akkor Cím:=n+j különben Cím:=0 Függvény vége 1 2 3 s s s sn á 2 0 0 0 0 á3 0 0 0 0 á 0 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 10/37 n
Speciális szerkezetű tömbök Felső áromszög mátrix A főátlóban és felette vannak nem 0 elemek Ábrázolása: Tömb(0n*(n+1)/2: Elemtípus) Oszlopfolytonosan elyezzük el az elemeket a vektorban 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 0 0 0 1,1 1,2 2,2 0 0 1,3 2,3 3,3 0 0 1,n 2,n 3,n n,n Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 11/37
Speciális szerkezetű tömbök Alsó áromszög mátrix A főátlóban és alatta vannak nem 0 elemek Ábrázolása: Tömb(0n*(n+1)/2: Elemtípus) Sorfolytonosan elyezzük el az elemeket a vektorban 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 1,1 2,1 3,1 n,1 0 2,2 3,2 n,2 0 0 3,3 n,3 0 0 0 n,n Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 12/37
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(1n*(n+1)/2: Elemtípus) Oszlopfolytonosan elyezzük el az átló feletti elemeket a vektorban 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 1,1 1,2 1,3 1,n Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 13/37 1,2 2,2 2,3 2,n 1,3 2,3 3,3 3,n 1,n 2,n 3,n n,n
Szövegfájlok Szövegfájl A szövegfájl karakterek sorozata: input fájl Műveletei: nyit, zár, olvas, vége? output fájl Műveletei: nyit, zár, ír Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 14/37
Szekvenciális fájl Fájl típus 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 15/37
Fájl feldolgozás Fájl típus 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 16/37
Fájl típus Fájl feldolgozás előreolvasással 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 17/37
Fájl-vége kezelés logikai fájl-vége (saját megoldás) fizikai fájl-vége Eof függvény Státusz változó Fájl típus Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 18/37
Fájl típus Fájl feldolgozás előreolvasással státusz változó 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 19/37
Fájl típus Fájl feldolgozás előreolvasással logikai fájl-vége 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 Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 20/37
Másolás fájlból fájlba Programozási tételek szekvenciális fájlra Bemenet: XH *, f:h G Kimenet: YG * Előfeltétel: ossz(x)>0 Utófeltétel: ossz(y)=ossz(x) és i(i[1 ossz(x)]): Y i =f(x i ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 21/37
Programozási tételek szekvenciális fájlra Másolásfájlbólfájlba(fx,fy): Nyit(fx); Nyit(fy) Ciklus amíg nem Vége?(fx) Olvas(fx,x); y:=f(x); Ír(fy,y) Ciklus vége Zár(fx); Zár(fy) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 22/37
Programozási tételek szekvenciális fájlra Másolás fájlból vektorba Bemenet: XH *, f:h G Kimenet: Előfeltétel: YG ossz(x) ossz(x)>0 Utófeltétel: i(i[1ossz(x)]): Y i =f(x i ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 23/37
Programozási tételek szekvenciális fájlra Másolásfájlbólvektorba(fx,Y,N): Nyit(fx); N:=0 Ciklus amíg nem Vége?(fx) Olvas(fx,x) N:+1; Y(N):=f(x) Ciklus vége Zár(fx) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 24/37
Sorozatszámítás Programozási tételek szekvenciális fájlra Bemenet: XH *, F:H * H, f:hxh H, F 0 H F(X 1,,X N )=f(f(x 1,,X N-1 ),X N ), F()=F 0 Kimenet: SH Előfeltétel: ossz(x)>0 Utófeltétel: S=F(X 1,,X ossz(x) ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 25/37
Programozási tételek szekvenciális fájlra Sorozatszámítás(fx,S): S:=F0; Nyit(fx) Ciklus amíg nem Vége?(fx) Olvas(fx,y); S:=f(S,y) Ciklus vége Zár(fx) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 26/37
Programozási tételek szekvenciális fájlra Eldöntés Bemenet: Kimenet: Előfeltétel: Utófeltétel: XH *, T:H L VanL ossz(x)>0 Van=y(yX): T(y) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 27/37
Programozási tételek szekvenciális fájlra Előreolvasással: Eldöntés(f,Van): Nyit(f); Olvas(f,y) Ciklus amíg nem Vége?(f) és nem T(y) Olvas(f,y) Ciklus vége Van:=T(y); Zár(f) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 28/37
Kiválasztás Programozási tételek szekvenciális fájlra Bemenet: XH *, T:H L Kimenet: EH, SN Előfeltétel: y(yx): T(y) Utófeltétel: EX és T(E) és 1 S és E=X S Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 29/37
Programozási tételek szekvenciális fájlra Előreolvasással: Kiválasztás(f,E,S): Nyit(f); Olvas(f,y); S:=1 Ciklus amíg nem T(y) Olvas(f,y); S:=S+1 Ciklus vége E:=y; Zár(f) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 30/37
Maximumkiválasztás Bemenet: XH * Kimenet: Előfeltétel: Utófeltétel: Programozási tételek szekvenciális fájlra MaxIndN, MaxÉrtH ossz(x)>0 yx: MaxÉrt y és 1 MaxInd és MaxÉrt=X MaxInd Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 31/37
Programozási tételek szekvenciális fájlra Előreolvasással: Maximumkiválasztás(f,MaxÉrt,MaxInd): Nyit(f); Olvas(f,y); S:=1 MaxÉrt:=y; MaxInd:=1 Ciklus amíg nem Vége?(f) Olvas(f,y); S:=S+1 Ha MaxÉrt<y akkor MaxÉrt:=y; MaxInd:=S Ciklus vége Zár(f) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 32/37
Kiválogatás Bemenet: Kimenet: YH * Programozási tételek szekvenciális fájlra XH *, T:H L Előfeltétel: ossz(x)>0 Utófeltétel: YX és y(yy): T(y) és x(xx és xy): nem T(x) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 33/37
Programozási tételek szekvenciális fájlra Kiválogatás(f,g): Nyit(f); Nyit(g) Ciklus amíg nem Vége?(f) Olvas(f,y) Ha T(y) akkor Ír(g,y) Ciklus vége Zár(f); Zár(g) Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 34/37
Szétválogatás Bemenet: XH *, T:H L Kimenet: YH *, ZH * Előfeltétel: ossz(x)>0 Programozási tételek szekvenciális fájlra Utófeltétel: YX és y(yy): T(y) és ZX és z(zz): nem T(z) és X=ZY Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 35/37
Programozási tételek szekvenciális fájlra Szétválogatás(f,g,): Nyit(f); Nyit(g); Nyit() Ciklus amíg nem Vége?(f) Olvas(f,y) Ha T(y) akkor Ír(g,y) különben Ír(,y) Ciklus vége Zár(f); Zár(g); Zár() Eljárás vége Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2018 02 08 8:04 36/37
Algoritmizálás és adatmodellezés 2 előadás vége