Algoritmizálás és adatmodellezés tanítása 3. előadás
Szövegfájl Fájl típus 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 2017.02.28. 2/32
Szövegfájl műveletek Nyit(f,Név) Fájl típus Pascalban assign(f,név); reset(f) assign(f,név); rewrite(f) close(f) Zár(f) Olvas(f,Adatok) read(f,adatok) SorOlvas(f,Adatok) readln(f,adatok) Ír(f,Adatok) write(f,adatok) SorÍr(f,Adatok) writeln(f,adatok) Vége?(f) eof(f) Adatok: tetszőleges elemi típusok sorozata, mintha billentyűzetről olvasnánk vagy képernyőre írnánk Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 3/32
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 2017.02.28. 4/32
Fájl típus Fájl műveletek Nyit(f,Név) Zár(f) Olvas(f,rekord) Ír(f,rekord) Vége?(f) Pascalban assign(f,név); reset(f) assign(f,név); rewrite(f) close(f) read(f,rekord) write(f,rekord) eof(f) a fájltípusok összehasonlítása Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 5/32
Fájl feldolgozás Fájl típus Eljá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. assign(f, input ); reset(f); assign(g, output ); rewrite(g); while not eof(f) do begin read(f,rek); feldolgoz(rek,ujrek); write(g,ujrek); end; close(f); close(g); Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 6/32
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. read(f,rek); while not eof(f) do begin feldolgoz(rek,ujrek); write(g,ujrek); read(f,rek); end; feldolgoz(rek,ujrek); write(g,ujrek); Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 7/32
Fájl típus 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ó Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 8/32
Fájl típus 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. read(f,rek); while... do begin feldolgoz(rek,ujrek); write(g,ujrek); read(f,rek); end; Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 9/32
Fájl típus Fájl feldolgozás előreolvasással logikai fájl-vége Eljá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. read(f,rek); while not Végjel?(rek) do begin feldolgoz(rek,ujrek); write(g,ujrek); read(f,rek); end; Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 10/32
Másolás fájlból fájlba Bemenet: X H *, f:h G Kimenet: Y G * Előfeltétel: hossz(x)>0 Utófeltétel: hossz(y)=hossz(x) és i(i [1.. hossz(x)]): Y i =f(x i ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 11/32
Tipus Tbe=Fájl(TH); Tki=Fájl(TG) Eljárás Másolásfájlbólfájlba(Változó fx:tbe,fy:tki): Változó x:th,y:tg 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. A deklarációs részeket a későbbiekben elhagyjuk, a lényegre koncentrálunk. Lásd rövidebben a tétel: Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 12/32
Eljárás 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 2017.02.28. 13/32
Másolás fájlból vektorba Bemenet: X H *, f:h G Kimenet: Y G hossz(x) Előfeltétel: hossz(x)>0 Utófeltétel: i(i [1..hossz(X)]): Y i =f(x i ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 14/32
Eljárás 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 2017.02.28. 15/32
Másolás vektorból fájlba Bemenet: N N, X H N, f:h G Kimenet: Y G * Előfeltétel: N>0 Utófeltétel: hossz(y)=n és i(i [1..N]): Y i =f(x i ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 16/32
Eljárás Másolásvektorbólfájlba(fy,X,N): Nyit(fy) Ciklus i=1-től N-ig y:=f(x(i)) Ír(fy,y) Ciklus vége Zár(fy) Eljárás vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 17/32
Sorozatszámítás Bemenet: X H *, 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: S H Előfeltétel: hossz(x)>0 Utófeltétel: S=F(X 1,...,X hossz(x) ) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 18/32
Eljárás 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 2017.02.28. 19/32
Eldöntés Bemenet: X H *, T:H L Kimenet: Van L Előfeltétel: hossz(x)>0 Utófeltétel: Van= y(y X): T(y) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 20/32
Előreolvasással: Eljárás 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. Figyelem! Vektorok esetén a Van:=T(X(i)) értékadás hibás volt! Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 21/32
Kiválasztás Bemenet: X H *, T:H L Kimenet: E H, S N Előfeltétel: y(y X): T(y) Utófeltétel: E X és T(E) és 1 S és E=X S Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 22/32
Előreolvasással: Eljárás 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 2017.02.28. 23/32
Maximumkiválasztás Bemenet: X H * Kimenet: Előfeltétel: hossz(x)>0 MaxInd N, MaxÉrt H Utófeltétel: y X: MaxÉrt y és 1 MaxInd és MaxÉrt=X MaxInd Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 24/32
Előreolvasással: Eljárás 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 2017.02.28. 25/32
Kiválogatás Bemenet: Kimenet: Y H * X H *, T:H L Előfeltétel: hossz(x)>0 Utófeltétel: Y X és y(y Y): T(y) és x(x X és x Y): nem T(x) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 26/32
Eljárás 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 2017.02.28. 27/32
Szétválogatás Bemenet: X H *, T:H L Kimenet: Y H *, Z H * Előfeltétel: hossz(x)>0 Utófeltétel: Y X és y(y Y): T(y) és Z X és z(z Z): nem T(z) és X=Z Y Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 28/32
Eljárás Szétválogatás(f,g,h): Nyit(f); Nyit(g); Nyit(h) Ciklus amíg nem Vége?(f) Olvas(f,y) Ha T(y) akkor Ír(g,y) különben Ír(h,y) Elágazás vége Ciklus vége Zár(f); Zár(g); Zár(h) Eljárás vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 29/32
Unió rendezett halmazokra összefuttatás Bemenet: X,Y H * Kimenet: Z H * Előfeltétel: halmaze(x) és halmaze(y) és hossz(x)>0 és hossz(y)>0 és Utolsó(X)=+ és Utolsó(Y)=+ és rendezette(x) és rendezette(y) Utófeltétel: z(z Z): z X vagy z Y és halmaze(z) és x(x X): x Z és y(y Y): y Z és Utolsó(Z)=+ és rendezette(z) Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 30/32
Előreolvasással: Eljárás Összefuttatás(f,g,h): Nyit(f); Nyit(g); Nyit(h); Olvas(f,x); Olvas(g,y) Ciklus amíg nem Vége?(f) vagy nem Vége?(g) Elágazás x<y esetén Ír(h,x); Olvas(f,x) x=y esetén Ír(h,x); Olvas(f,x); Olvas(g,y) x>y esetén Ír(h,y); Olvas(g,y) Elágazás vége Ciklus vége Ír(h,x); Zár(f); Zár(g); Zár(h) Eljárás vége. Pap Gáborné, Zsakó László: Algoritmizálás, adatmodellezés 2017.02.28. 31/32
Algoritmizálás és adatmodellezés tanítása 3. előadás vége