Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/552014. 07. 14.2014. 07. 14.2014. 07. 14.  Sorozatszámítás.

Hasonló előadás


Az előadások a következő témára: "Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/552014. 07. 14.2014. 07. 14.2014. 07. 14.  Sorozatszámítás."— Előadás másolata:

1 Programozási alapismeretek 7. előadás

2 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/552014. 07. 14.2014. 07. 14.2014. 07. 14.  Sorozatszámítás – rekordok: jövedelem Sorozatszámítás  Maximumkiválasztás – rekordok: legkorábbi születésnap Maximumkiválasztás  Függvény a feltételben Függvény a feltételben  Mátrixok Mátrixok  Szöveges fájl Szöveges fájl  Rekordok vektora Rekordok vektora  Vektorok rekordja Vektorok rekordja Tartalom

3 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás3/552014. 07. 14.2014. 07. 14.2014. 07. 14. 1. Sorozatszámítás rekordok: jövedelem Feladat: Mennyi a jövedelmünk, ha ismertek a bevé- teleink és a vele szemben elszámolt kiadása- ink? Specifikáció 1 :  Bemenet: N:Egész, Bev,Kia:Tömb[1..N:Egész]  Kimenet: S:Egész  Előfeltétel: N  0  Utófeltétel: S= Bev[i]-Kia[i] Így specifikáltuk ezt az 5. előadásban. Így specifikáltuk ezt az 5. előadásban. Sorozatszámítás (szumma-) tétel.

4 ELTE Így specifikálhatjuk a 6. előadás után. Így specifikálhatjuk a 6. előadás után. Szlávi-Zsakó: Programozási alapismeretek 7. előadás4/552014. 07. 14.2014. 07. 14.2014. 07. 14. 1. Sorozatszámítás rekordok: jövedelem Specifikáció 2 :  Bemenet: N:Egész, Jöv:Tömb[1..N:TNyer], TNyer=Rekord(bev,kia:Egész)  Kimenet: S:Egész  Előfeltétel: N  0  Utófeltétel: S= Jöv[i].bev–Jöv[i].kia Megjegyzés: értelmezhetjük úgy, hogy  (Jöv[1..N]):=  (Jöv[1..N – 1])  Jöv[N], ahol S  F:= S+F.bev–F.kia   Utófeltétel: S= Sorozatszámítás (szumma-) tétel.

5 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás5/552014. 07. 14.2014. 07. 14.2014. 07. 14. Algoritmus 1 – „régi” változat : Algoritmus 2 – „új” változat : 1. Sorozatszámítás rekordok: jövedelem S:=0 i=1..N S:=S+Bev[i]–Kia[i] S:=0 i=1..N S:=S  Jöv[i] Megírandó a operátor! Megírandó a  operátor!

6 ELTE 2014. 07. 14.2014. 07. 14.2014. 07. 14. Kód – operátor (egy „minimum program”) : 1. Sorozatszámítás rekordok: jövedelem Típus- és függvényfej- definíciók. Függvények definíciói. Kód jegyzet- ként

7 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás7/552014. 07. 14.2014. 07. 14.2014. 07. 14. Maximum – rekordok: legkorábbi születésnap Feladat: Melyik a legkorábbi a születésnap? Specifikáció 1 :  Bemenet: N:Egész, Hó,Nap:Tömb[1..N:Egész]  Kimenet: Min:Egész  Előfeltétel: N>0 …  Utófeltétel: 1  Min  N és  i (1  i  N): Hó[Min]<Hó[i] vagy Hó[Min]=Hó[i] és Nap[Min]  Nap[i]

8 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás8/552014. 07. 14.2014. 07. 14.2014. 07. 14. Maximum – rekordok: legkorábbi születésnap Specifikáció 2 :  Bemenet: N:Egész, Szül:Tömb[1..N,TSzül], TSzül=Rekord(hó,nap:Egész)  Kimenet: Min:Egész  Előfeltétel: N>0 …  Utófeltétel: 1  Min  N és  i (1  i  N): Szül[Min]  Szül[i]  Definíció:  : TSzül  TSzül  Logikai sz1  sz2:=sz1.hó<sz2.hó vagy sz1.hó=sz2.hó és sz1.nap  sz2.nap

9 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás9/552014. 07. 14.2014. 07. 14.2014. 07. 14. Maximum – rekordok: legkorábbi születésnap Min:=1 i=2..N Szül[Min]>Szül[i] Min:=i  Természetesen meg kell még írni az TSzül típusra a > relációt megvalósító függvényt (operátort). Az világos, hogy a specifikációban felbukkanó  és az algo- ritmusbeli > a relációk egymással kifejezhetők. I N

10 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás10/552014. 07. 14.2014. 07. 14.2014. 07. 14. Függvény a feltételben Feladat: Adjunk meg egy magánhangzót egy magyar szóban! Specifikáció:  Bemenet: N:Egész, Szó:Tömb[1..N:Karakter] Konstans Mag:Tömb[1..14:Karakter]= (”a”,”á”,…,”ű”)  Kimenet: S:Egész  Előfeltétel: N>0 és  i(1  i  N): MagánhangzóE(Szó[i])  Utófeltétel: 1  S  N és MagánhangzóE(Szó[S])  Definíció: MagánhangzóE:Karakter  Logikai MagánhangzóE(B)=  i (1  i  14): B=Mag[i] Kiválasztás tétel.

11 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás11/552014. 07. 14.2014. 07. 14.2014. 07. 14. Függvény a feltételben Algoritmus: i:=1 nem MagánhangzóE(Szó[i]) i:=i+1 S:=i MagánhangzóE(B:Karakter):Logikai i:=1 i≤14 és B≠Mag[i] i:=i+1 MagánhangzóE:=i≤14 Kiválasztás tétel. Eldöntés tétel.

12 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás12/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Feladat: Egy N*M-es raszterképet nagyítsunk a két- szeresére pontsokszorozással: minden régi pont helyébe 2*2 azonos színű pontot rajzolunk a nagyított képen. 

13 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás13/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Problémák/válaszok:  Hogyan ábrázoljunk egy képet? A kép rendezett pontokból áll, azaz biztosan valamilyen sorozatként adható meg.  Nehézkes lenne azonban a pontokra egy sorszámozást adni. Könnyebb azt megmondani, hogy egy kép- pont a kép hányadik sorában, illetve oszlopá- ban található, azaz alkalmazzunk dupla in- dexelést! A kétindexes tömböket hívjuk mátrixnak.

14 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás14/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Specifikáció:  Bemenet: N,M:Egész K:Tömb[1..N,1..M:Egész]  Kimenet: NK:Tömb[1..2*N,1..2*M:Egész]  Előfeltétel: N,M  0  Utófeltétel:  i (1  i  N):  j (1  j  M): NK[2*i,2*j]=K[i,j] és NK[2*i–1,2*j]=K[i,j] és NK[2*i,2*j–1]=K[i,j] és NK[2*i–1,2*j–1]=K[i,j]

15 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás15/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Algoritmus: Megjegyzés: programozási nyelvekben a mátrix elemének elérésére más jelölés is lehet, pl.: C++ esetén K[i][j]. i=1..N j=1..M NK[2*i,2*j]:=K[i,j] NK[2*i – 1,2*j]:=K[i,j] NK[2*i,2*j – 1]:=K[i,j] NK[2*i – 1,2*j – 1]:=K[i,j]

16 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás16/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Egy mátrix kódolási példa: Írjunk mátrixbeolvasó eljárást! Megoldás: Kód jegyzet- ként "Hibás elem!");

17 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás17/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Feladat: Egy N*M-es raszterképet kicsinyítsünk a fe- lére (N/2*M/2 méretűre) pontátlagolással: a kicsinyített kép minden pontja az eredeti kép 2*2 pontjának „átlaga” legyen!  „átlag”: színkódok átlaga

18 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás18/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Specifikáció:  Bemenet: N,M:Egész K:Tömb[1..N,1..M:Egész]  Kimenet: KK:Tömb[1..N/2,1..M/2:Egész]  Előfeltétel: N,M  0 és PárosE(N) és PárosE(M)  Utófeltétel:  i (1  i  N/2):  j (1  j  M/2): KK[i,j]=(K[2*i,2*j]+K[2*i–1,2*j]+ K[2*i,2*j–1]+K[2*i–1,2*j–1])/4  Definíció: PárosE : …

19 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás19/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Algoritmus: Megjegyzés: a színes képeknél az átlagolással baj lehet! Milyen szín egy piros és egy kék színű pont átlaga? RGB esetén a szín: Rekord(piros, zöld, kék:Egész); és az átlag? i=1..N/2 j=1..M/2 KK[i,j]:=(K[2*i,2*j]+K[2*i–1,2*j]+ K[2*i,2*j–1]+K[2*i–1,2*j–1])/4

20 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás20/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Feladat: A Rák-köd képére alkalmazzunk egyféle Rank-szűrőt! Minden pontot helyettesítsünk magának és a 8 szomszédjának maximumá- val! 

21 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás21/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Specifikáció:  Bemenet: N,M:Egész K:Tömb[1..N,1..M:Egész]  Kimenet: RK:Tömb[1..N,1..M:Egész]  Előfeltétel: N,M  0 és  i (1  i  N):  j (1  j  M): K[i,j]  0  Utófeltétel:  i (1<i<N):  j (1<j<M): RK[i,j]= és  i (1  i  N):  j (1  j  M): RK[1,j]=K[1,j] és RK[N,j]=K[N,j] RK[i,1]=K[i,1] és RK[i,M]=K[i,M]

22 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás 22/55 Mátrixok Algoritmus: i=2..N–1 j=2..M–1 Max:=0 p=i–1..i+1 q=j–1..j+1 K[p,q]>Max Max:=K[p,q]  RK[i,j]:=Max … I N

23 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás 23/55 2014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Algoritmus: i=2..N–1 j=2..M–1 Max:=0 p=i–1..i+1 q=j–1..j+1 K[p,q]>Max Max:=K[p,q]  RK[i,j]:=Max … I N Maximumérték- kiválasztás tétel.

24 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás24/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Algoritmus (folytatás) : i=1..N RK[i,1]:=K[i,1] RK[i,M]:=K[i,M] … j=1..M RK[1,j]:=K[1,j] RK[N,j]:=K[N,j]  

25 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás25/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Feladat: Egy kép egy adott (fehér színű) tartományát egy (A,B) belső pontjából kiindulva fessük be vilá- goskékre!  Festendők a „belső pontok”, azaz Belső(i,j)=(i=A és j=B vagy Fehér(i,j) és ( Belső(i–1,j) vagy Belső(i+1,j) vagy Belső(i,j–1) vagy Belső(i,j+1)) )

26 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás26/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Specifikáció:  Bemenet: N,M:Egész K:Tömb[1..N,1..M:Egész], A,B:Egész  Kimenet: KK:Tömb[1..N,1..M:Egész]  Előfeltétel: N,M  0  Utófeltétel:  i (1≤i≤N):  j (1≤j≤M): Belső(i,j)  KK[i,j]=világoskék és nem Belső(i,j)  KK[i,j]=K[i,j]  Megoldás: KK:=K Festés(A,B)

27 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás27/552014. 07. 14.2014. 07. 14.2014. 07. 14. Mátrixok Algoritmus: Festés(i,j:Egész) KK[i,j]:=világoskék KK[i–1,j]=fehér Festés(i–1,j)  KK[i+1,j]=fehér Festés(i+1,j)  KK[i,j–1]=fehér Festés(i,j–1)  KK[i,j+1]=fehér Festés(i,j+1)  I N I N I N I N és i>1 és i<N és j>1 és j<M

28 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás28/552014. 07. 14.2014. 07. 14.2014. 07. 14. Fájlok Bevezető gondolatok:  Honnan lesznek a képek?  Fájlban tároljuk őket, melyeket névvel azo- nosítunk!  Szekvenciális input fájl: olyan sorozat, amelyet sorban lehet olvasni az elejétől kezdve. ( A billentyűzet is ilyen. )  Szekvenciális output fájl: olyan sorozat, amelynek csak a végére lehet írni. ( A kép- ernyő is ilyen. )  Ezek is sorozat típusok, de nincs indexelés és elemszám műveletük!sorozat

29 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás29/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Specifikáció: Fel sem tűnik! Esetleg a fájlnév mint paraméter, de ekkor Ef/Uf-ben kapcsolat létesül a Be/Ki ada- tok és a fájltartalom között. Pl.: Bemenet: fN  S, N  N, szsz  S* … Előfeltétel:  SzövegFájl(fN)=f és Sora(f,1)=Szöveg(N) és  i  [1..N] Sora(f,i+1)=szsz i Sora:SzövegFájl  Egész  Szöveg  fájlnak mint adatfolyamnak az adottadik sora. Szöveg:Egész  Szöveg  konverzió szám  szöveg A fájltartalom. A fájlnév.

30 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás30/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Algoritmus:  Fájlfajták:  Input / Output  Fájldeklaráció – Input iF:InputSzövegFájl  Műveletek – Input Megnyit(iF,fN) – fN : Szöveg; fN fájlnév SorOlvas(iF,s) – s : Szöveg Olvas(iF,s) – olvasás elválasztó jelig Olvas(iF,k) – k : Karakter; karakterolvasás Vége?(iF) – logikai függvény: fájlvég-e Lezár(iF) –

31 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás31/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Algoritmus ( folytatás ):  Fájldeklaráció – Output oF:OutputSzövegFájl  Műveletek – Output Megnyit(oF,fN) – fN : Szöveg; fN fájlnév SorÍr(oF,s) – s : Szöveg; sorvégjelet hozzáír Ír(oF,s) – sorhoz írás Ír(oF,k) – k : Karakter; karakterírás Lezár(oF) –

32 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás32/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kód (C++):  Fájlműveletek „lelőhelye”: fstream: #include  Fájldeklaráció – Input ifstream iF; // iF:InputSzövegFájl  Műveletek – Input iF.open(fN.c_str()); // Megnyit(iF,fN) getline(iF,s); // SorOlvas(iF,s) iF >> s; // Olvas(iF,s) iF.get(k); // Olvas(iF,k) … iF.eof() … // Vége?(iF) iF.close(); // Lezár(iF) string.c_str(): c_string  string  c-string konverzió

33 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás33/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kód ( folytatás ):  Fájldeklaráció – Output ofstream oF; // oF:OutputSzövegFájl  Műveletek – Output oF.open(fN.c_str()); // Megnyit(oF,fN) oF << s << endl; // SorÍr(oF,s) oF << s; // Ír(oF,s) oF.close(); // Lezár(oF)  Egyebek – ifstream iF(fN.c_str()); // deklaráció + megnyitás egyszerre ofstream oF(fN.c_str());// … … iF.is_open() … // nyitás-siker ellenőrzése

34 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás34/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kódolási alapfeladatok: Írjuk meg az alábbi feladatokat elvégző függ- vényeket! 1. Inputfájl ( adott hosszal )  tömb Inputfájl-szerkezet: 1. n – a sorok száma 2. 1. sor – az első sor szövege … i+1. i. sor – az i. sor szövege … n+1. n. sor – az n. sor szövege Output: const int maxN=100; int n; //a sorok száma string t[maxN]; //a sorok int fajlbol_string_tombbe (string fN, int &n, string t[], int maxN); (string fN, int &n, string t[], int maxN); 0, ha OK; 1, ha nem létező fájl; 2, ha túl nagy az n; 3, ha inkonzisztens a fájl.

35 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás35/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok A lényeg kódja:

36 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás36/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok A lényeg kódja: Inputfájl-szerkezet: 1. n – a sorok száma 2. 1. sor – az első sor szövege … i+1.i. sor – az i. sor szövege … n+1.n. sor – az n. sor szövege

37 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás37/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok … és egy próbaprogram:

38 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás38/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok … és a próbaprogram: Kód jegyzet- ként

39 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás39/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kódolási alapfeladatok ( folytatás ): 2. Inputfájl ( ismeretlen hosszal )  tömb Mi a teendő, ha maxN-nél több sor van? Inputfájl-szerkezet: 1. 1. sor – az első sor szövege … i. i. sor – az i. sor szövege … n. n. sor – az n. sor szövege Output: const int maxN=100; int n; // a sorok száma string t[maxN]; //a sorok void fajlbol_string_tombbe (string fN,int &n, string t[], int maxN); (string fN, int &n, string t[], int maxN); 0, ha OK; 1, ha nem létező fájl; 2, ha túl nagy az n.

40 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás40/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kódolási alapfeladatok ( folytatás ): 3. ( - 4. ) Az előző két feladat megoldását módo- sítsuk úgy, hogy a tömb elemének típusa nem string, hanem int, és minE, maxE közötti! Soronként most is egyetlen adat legyen! void fajlbol_int_tombbe (string fN,int &n, int t[], int maxN, int minE, int maxE); (string fN, int &n, int t[], int maxN, int minE, int maxE); 0, ha OK; 1, ha nem létező fájl; 2, ha túl nagy az n; 3, ha inkonzisztens a fájl; 4, ha valamely eleme nem OK.

41 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás41/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kódolási alapfeladatok ( folytatás ): 5. ‘Inputfájl ( adott hosszal )  tömb’ feladat megoldását módosítsuk úgy, hogy a tömb elemének típusa nem string, hanem int, és minE, maxE közötti! Az összes adat egyet- len sorban legyen! void fajlbol_int_tombbe (string fN,int &n, int t[], int maxN, int minE, int maxE); (string fN, int &n, int t[], int maxN, int minE, int maxE); 0, ha OK; 1, ha nem létező fájl; 2, ha túl nagy az n; 3, ha inkonzisztens a fájl; 4, ha valamely eleme nem OK.

42 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás42/552014. 07. 14.2014. 07. 14.2014. 07. 14. Szövegfájl-kezelési alapok Kódolási alapfeladatok ( folytatás ): 6. Tömb  Outputfájl ( adott hosszal ) Az 1. feladat „inverze”. Input: const int maxN=100; int n; // a sorok száma string t[maxN]; //a sorok int string_tombbol_fajlba (string fN, int n, const string t[]); 0, ha OK; 1, ha már létező fájl. Outputfájl-szerkezet: 1. n – a sorok száma 2. 1. sor – az első sor szövege … i+1. i. sor – az i. sor szövege … n+1. n. sor – az n. sor szövege

43 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás43/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Feladat: Egy adott napon N-szer volt földrengés. Is- merjük az egyes rengések időpontját. Mond- juk meg, hogy hány másodpercenként volt földrengés! Megoldás felé:  Definiálni kellene, mi az idő!  Az időt megadhatjuk az (óra, perc, másod- perc) hármassal, azaz az idő egy rekord: TIdő=Rekord(o,p,mp:Egész)

44 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás44/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Specifikáció:  Bemenet: N:Egész, R:Tömb[1..N:TIdő] TIdő=Rekord(o,p,mp:Egész)  Kimenet: T:Tömb[1..N–1:Egész]  Előfeltétel: N  0 és  i (1≤i≤N): 0≤R[i].o≤23 és 0≤R[i].p≤59 és 0≤R[i].mp≤59 és  i (1≤i<N): R[i]<R[i+1]  Utófeltétel:  i (1≤i≤N–1): T[i]=R[i+1]–R[i]  Definíció: – :TIdő  TIdő  Egész i1 – i2 := … ??? … Bár értelmes lehetne: TIdő is!

45 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás45/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Idők különbsége 1. megoldási ötlet: Felfoghatjuk úgy, mint két háromjegyű szám különbsége, ahol a három jegy más-más számrendszerben van. ( Vegyes alapú számrend- szer. ) Majd másodpercekké konvertáljuk. 2. megoldási ötlet: Átalakíthatjuk az időket másodpercre, s így már két egész szám különbségét kell kiszá- molni. másodpercekben(i):=i.o*3600+i.p*60+i.mp Meggondolandó, h. mekkora egész szám kell hozzá? ( 24*3600=86 400 ) Milyen típusú lehet? ( >2 byte )

46 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás46/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Specifikáció:  Bemenet: N:Egész, R:Tömb[1..N:TIdő] TIdő=Rekord(o,p,mp:Egész)  Kimenet: T:Tömb[1..N–1:Egész]  Előfeltétel: N  0 és  i (1≤i≤N): 0≤R[i].o≤23 és 0≤R[i].p≤59 és 0≤R[i].mp≤59 és  i (1≤i<N): R[i]<R[i+1]  Utófeltétel:  i (1≤i≤N–1): T[i]=R[i+1]–R[i]  Definíció: – :TIdő  TIdő  Egész i1 – i2 := i1.o*3600+i1.p*60+i1.mp – (i2.o*3600+i2.p*60+i2.mp)

47 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás47/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Algoritmus 1 : Megjegyzések: 1. Egy S segédtömböt használunk. 2. A TIdők közötti „–” operátor az S-en ke- resztül, közvetve kerül az algoritmusba. i=1..N S[i]:=R[i].o*3600+ R[i].p*60+R[i].mp i=1..N–1 T[i]:=S[i+1]–S[i]

48 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás48/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Algoritmus 2 : Megjegyzések: 1. A másodpercben fv. megvalósítandó! 2. Ha a különbség (óra, perc, másodperc)-ben kell, akkor T[i]-ből vissza kell alakítani! Újabb művelet. i=1..N S[i]:=másodpercben(R[i]) i=1..N–1 T[i]:=S[i+1]–S[i]

49 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás49/552014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Algoritmus 3 : Megjegyzés: A másodpercben fv. segítségével ( sőt anélkül is ) megspórolható az S segédtömb; és így az előkészítő ciklus… de cserében majdnem minden R[i]-t kétszer számítunk át másod- percekre. i=1..N–1 T[i]:=másodpercben(R[i+1])– másodpercben(R[i])

50 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás 50/55 2014. 07. 14.2014. 07. 14.2014. 07. 14. Rekordok vektora Algoritmus 4 : Megjegyzés: A – operátort definiálni kell, amelyben a másodpercekben fv. (v. annak törzse) fel- használható! i=1..N–1 T[i]:= R[i+1]–R[i]

51 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás51/552014. 07. 14.2014. 07. 14.2014. 07. 14. Vektorok rekordja Feladat: Ismerjük egy ember összes telefonszámát és e-levél címét. Egy adott telefonszámról és e- levél címről el kell döntenünk, hogy lehet-e az adott emberé! Kérdések/válaszok:  Hogyan ábrázoljuk? TEmber=Rekord( dbt,dbe:Egész, telefon:Tömb[1..MaxT:Szöveg], elevél: Tömb[1..MaxE:Szöveg] )  Mi az a MaxT, MaxE? ???

52 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás52/552014. 07. 14.2014. 07. 14.2014. 07. 14. Vektorok rekordja Specifikáció:  Bemenet: X:TEmber, Tel,Elev:Szöveg, TEmber=Rekord(…)  Kimenet: Lehet:Logikai  Előfeltétel: X.dbt  [0..MaxT] és X.dbe  [0..MaxE] …  Utófeltétel: Lehet=Tel  X.telefon és Elev  X.elevél Megjegyzés: s  S  s=S[1] vagy s=S[2] … = eldöntés tétel x  [A..B]  A  x és x  B Figyeljünk a műveletek paramétereinek a típusára!

53 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás53/552014. 07. 14.2014. 07. 14.2014. 07. 14. Vektorok rekordja i:=1 i≤X.dbt és X.telefon[i]≠Tel i:=i+1 i≤X.dbt j:=1  j≤X.dbe és X.elevél[j]≠Elev j:=j+1 Lehet:= i≤X.dbt és j≤X.dbe Algoritmus: I N Eldöntés tétel

54 ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás54/552014. 07. 14.2014. 07. 14.2014. 07. 14. Vektor-rekord További példák: KÉP[i,j].piros – az (i,j) képpont RGB kódjának piros része EMBER[j].telefon[i].körzetszám – a j-edik ember i-edik telefonszámának a körzetszáma.x T.lap[i].él[j].pont[1].x –a T test i-edik lapja j-edik éle 1. végpontjának x-koordinátája

55 Programozási alapismeretek 7. előadás vége


Letölteni ppt "Programozási alapismeretek 7. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 7. előadás2/552014. 07. 14.2014. 07. 14.2014. 07. 14.  Sorozatszámítás."

Hasonló előadás


Google Hirdetések