Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaZita Deákné Megváltozta több, mint 10 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.