Programozsi alapismeretek 7 elads Tartalom Sorozatszmts rekordok jvedelem

  • Slides: 54
Download presentation
Programozási alapismeretek 7. előadás

Programozási alapismeretek 7. előadás

Tartalom Ø Sorozatszámítás – rekordok: jövedelem Ø Maximumkiválasztás – rekordok: legkorábbi születésnap ELTE Ø

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

1. Sorozatszámítás rekordok: jövedelem Feladat: Mennyi a jövedelmünk, ha ismertek a bevé -teleink és

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 Így specifikáltuk ezt az 5. előadásban. kiadása-ink? ELTE Specifikáció 1: Ø Bemenet: Sorozatszámítás (szumma-) tétel. 2/24/2021 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] Szlávi-Zsakó: Programozási alapismeretek 7. előadás 3/55

1. Sorozatszámítás rekordok: jövedelem Specifikáció 2: Így specifikálhatjuk a 6. előadás után. Ø Bemenet:

1. Sorozatszámítás rekordok: jövedelem Specifikáció 2: Így specifikálhatjuk a 6. előadás után. Ø Bemenet: ELTE 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 Sorozatszámítás (szumma-) tétel. 2/24/2021 (Jöv[1. . N]): = (Jöv[1. . N– 1]) Jöv[N] , ahol S F: = S+F. bev–F. kia Ø Utófeltétel: S= Szlávi-Zsakó: Programozási alapismeretek 7. előadás 4/55

1. Sorozatszámítás rekordok: jövedelem Algoritmus 1 – „régi” változat: S: =0 ELTE i=1. .

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

1. Sorozatszámítás rekordok: jövedelem Típus- és függvényfejdefiníciók. Kód – operátor (egy „minimum program”): ELTE

1. Sorozatszámítás rekordok: jövedelem Típus- és függvényfejdefiníciók. Kód – operátor (egy „minimum program”): ELTE Függvények definíciói. 2/24/2021 Kód jegyzetként

Maximum – rekordok: legkorábbi születésnap Feladat: Melyik a legkorábbi a születésnap? Specifikáció 1: Ø

Maximum – rekordok: legkorábbi születésnap Feladat: Melyik a legkorábbi a születésnap? Specifikáció 1: Ø Bemenet: ELTE 2/24/2021 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] Szlávi-Zsakó: Programozási alapismeretek 7. előadás 7/55

Maximum – rekordok: legkorábbi születésnap Specifikáció 2: Ø Bemenet: N: Egész, Szül: Tömb[1. .

Maximum – rekordok: legkorábbi születésnap Specifikáció 2: Ø Bemenet: N: Egész, Szül: Tömb[1. . N, TDátum], ELTE 2/24/2021 TDátum=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ó: : TDátum Logikai sz 1 sz 2: =sz 1. hó<sz 2. hó vagy sz 1. hó=sz 2. hó és Szlávi-Zsakó: Programozási alapismeretek 7. előadás 8/55

Maximum – rekordok: legkorábbi születésnap Min: =1 ELTE I i=2. . N Szül[Min]>Szül[i] Min:

Maximum – rekordok: legkorábbi születésnap Min: =1 ELTE I i=2. . N Szül[Min]>Szül[i] Min: =i N Természetesen meg kell még írni az TDátum 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 algoritmusbeli > a relációk egymással kifejezhetők. 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 9/55

Függvény a feltételben Feladat: Adjunk meg egy magánhangzót egy magyar szóban! Specifikáció: Ø Bemenet:

Függvény a feltételben Feladat: Adjunk meg egy magánhangzót egy magyar szóban! Specifikáció: Ø Bemenet: ELTE Kiválasztás tétel. 2/24/2021 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ó: Szlávi-Zsakó: Programozási alapismeretek 7. előadás 10/55

Függvény a feltételben Kiválasztás tétel. Algoritmus: i: =1 nem MagánhangzóE(Szó[i]) i: =i+1 S: =i

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

Mátrixok Feladat: ELTE Egy N*M-es raszterképet nagyítsunk a két-szeresére pontsokszorozással: minden régi pont helyébe

Mátrixok Feladat: ELTE 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. 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 12/55

Mátrixok Problémák/válaszok: Ø Hogyan ELTE 2/24/2021 ábrázoljunk egy képet? A kép rendezett pontokból áll,

Mátrixok Problémák/válaszok: Ø Hogyan ELTE 2/24/2021 á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. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 13/55

Mátrixok Specifikáció: Ø Bemenet: N, M: Egész K: Tömb[1. . N, 1. . M:

Mátrixok Specifikáció: Ø Bemenet: N, M: Egész K: Tömb[1. . N, 1. . M: Egész] Ø Kimenet: ELTE 2/24/2021 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] Szlávi-Zsakó: Programozási alapismeretek 7. előadás 14/55

Mátrixok Algoritmus: ELTE i=1. . N j=1. . M NK[2*i, 2*j]: =K[i, j] NK[2*i–

Mátrixok Algoritmus: ELTE 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] 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]. 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 15/55

Mátrixok int_tomb_be("Matrix elemek? ", …) Egy mátrix kódolási példa: Írjunk mátrixbeolvasó eljárást! Megoldás: ELTE

Mátrixok int_tomb_be("Matrix elemek? ", …) Egy mátrix kódolási példa: Írjunk mátrixbeolvasó eljárást! Megoldás: ELTE "Hibás elem!"); 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás Kód jegyzetként 16/55

Mátrixok Feladat: ELTE „átlag”: színkódok átlaga Egy N*M-es raszterképet kicsinyítsünk a fe-lére (N/2*M/2 méretűre)

Mátrixok Feladat: ELTE „átlag”: színkódok átlaga 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! 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 17/55

Mátrixok Specifikáció: Ø Bemenet: ELTE N, M: Egész K: Tömb[1. . N, 1. .

Mátrixok Specifikáció: Ø Bemenet: ELTE 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áros. E(N) és Páros. E(M) Ø Utófeltétel: 2/24/2021 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áros. E: … Szlávi-Zsakó: Programozási alapismeretek 7. előadás 18/55

Mátrixok Algoritmus: i=1. . N/2 j=1. . M/2 ELTE KK[i, j]: =(K[2*i, 2*j]+K[2*i– 1,

Mátrixok Algoritmus: i=1. . N/2 j=1. . M/2 ELTE 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 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? 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 19/55

Mátrixok Feladat: ELTE A Rák-köd képére alkalmazzunk egyféle Rank-szűrőt! Minden pontot helyettesítsünk magának és

Mátrixok Feladat: ELTE 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! 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 20/55

Mátrixok Specifikáció: Ø Bemenet: ELTE N, M: Egész K: Tömb[1. . N, 1. .

Mátrixok Specifikáció: Ø Bemenet: ELTE 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): és 2/24/2021 RK[i, j]= i (1 i N): j (1 j M): RK[1, j]=K[1, j] és RK[N, j]=K[N, j] Szlávi-Zsakó: Programozási alapismeretek 7. előadás 21/55

Mátrixok Algoritmus: i=2. . N– 1 j=2. . M– 1 Max: =0 ELTE p=i–

Mátrixok Algoritmus: i=2. . N– 1 j=2. . M– 1 Max: =0 ELTE p=i– 1. . i+1 q=j– 1. . j+1 I K[p, q]>Max Max: =K[p, q] N RK[i, j]: =Max … 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 ELTE p=i–

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

Mátrixok Algoritmus (folytatás): … ELTE j=1. . M RK[1, j]: =K[1, j] RK[N, j]:

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

Mátrixok Feladat: Egy kép egy adott (fehér színű) tartományát egy (A, B) belső pontjából

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! ELTE 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)) ) 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 25/55

Mátrixok Specifikáció: Ø Bemenet: ELTE 2/24/2021 N, M: Egész K: Tömb[1. . N, 1.

Mátrixok Specifikáció: Ø Bemenet: ELTE 2/24/2021 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] KK: =K Festés(A, B) Ø Megoldás: Szlávi-Zsakó: Programozási alapismeretek 7. előadás 26/55

Mátrixok Algoritmus: Festés(i, j: Egész) ELTE 2/24/2021 KK[i, j]: =világoskék KK[i– 1, j]=fehér I

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

Fájlok Bevezető gondolatok: Ø Honnan ELTE 2/24/2021 lesznek a képek? Ø Fájlban tároljuk őket,

Fájlok Bevezető gondolatok: Ø Honnan ELTE 2/24/2021 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! Szlávi-Zsakó: Programozási alapismeretek 7. előadás 28/55

Szövegfájl-kezelési alapok Algoritmus: ØFájlfajták: Ø Input ELTE / ØFájldeklaráció Output – Input i. F:

Szövegfájl-kezelési alapok Algoritmus: ØFájlfajták: Ø Input ELTE / ØFájldeklaráció Output – Input i. F: Input. Szöveg. Fájl ØMűveletek 2/24/2021 – Input Megnyit(i. F, f. N) – f. N : Szöveg; f. N fájlnév Sor. Olvas(i. F, s) – s : Szöveg Olvas(i. F, s) – olvasás elválasztó jelig Olvas(i. F, k) – k : Karakter; karakterolvasás Vége? (i. F) – logikai függvény: fájlvég-e Lezár(i. F) – Szlávi-Zsakó: Programozási alapismeretek 7. előadás 30/55

Szövegfájl-kezelési alapok Algoritmus (folytatás): ØFájldeklaráció – Output o. F: Output. Szöveg. Fájl ELTE ØMűveletek

Szövegfájl-kezelési alapok Algoritmus (folytatás): ØFájldeklaráció – Output o. F: Output. Szöveg. Fájl ELTE ØMűveletek – Output Megnyit(o. F, f. N) – f. N : Szöveg; f. N fájlnév SorÍr(o. F, s) – s : Szöveg; sorvégjelet hozzáír Ír(o. F, s) – sorhoz írás Ír(o. F, k) – k : Karakter; karakterírás Lezár(o. F) – 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 31/55

Szövegfájl-kezelési alapok Kód (C++): string. c_str(): c_string Ø Fájlműveletek „lelőhelye”: string c-string konverzió fstream:

Szövegfájl-kezelési alapok Kód (C++): string. c_str(): c_string Ø Fájlműveletek „lelőhelye”: string c-string konverzió fstream: #include <fstream> ELTE Ø Fájldeklaráció – Input ifstream i. F; //i. F: Input. Szöveg. Fájl Ø Műveletek – Input i. F. open(f. N. c_str()); //Megnyit(i. F, f. N) getline(i. F, s); //Sor. Olvas(i. F, s) i. F >> s; //Olvas(i. F, s) i. F. get(k); //Olvas(i. F, k) …i. F. eof()… //Vége? (i. F) i. F. close(); //Lezár(i. F) 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 32/55

Szövegfájl-kezelési alapok Kód (folytatás): Ø Fájldeklaráció – Output ofstream o. F; //o. F: Output.

Szövegfájl-kezelési alapok Kód (folytatás): Ø Fájldeklaráció – Output ofstream o. F; //o. F: Output. Szöveg. Fájl ELTE Ø Műveletek – Output o. F. open(f. N. c_str()); //Megnyit(o. F, f. N) o. F << s << endl; //SorÍr(o. F, s) o. F << s; //Ír(o. F, s) o. F. close(); //Lezár(o. F) Ø Egyebek – ifstream i. F(f. N. c_str()); //deklaráció + megnyitás egyszerre ofstream o. F(f. N. c_str()); // … …i. F. is_open()… //nyitás-siker ellenőrzése 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 33/55

Szövegfájl-kezelési alapok Kódolási alapfeladatok: Írjuk meg az alábbi feladatokat elvégző függ-vényeket! ELTE 0, ha

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

Szövegfájl-kezelési alapok A lényeg kódja: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 35/55

Szövegfájl-kezelési alapok A lényeg kódja: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 35/55

Szövegfájl-kezelési alapok A lényeg kódja: ELTE Inputfájl-szerkezet: 1. n – a sorok száma 2.

Szövegfájl-kezelési alapok A lényeg kódja: ELTE 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 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 36/55

Szövegfájl-kezelési alapok … és egy próbaprogram: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 37/55

Szövegfájl-kezelési alapok … és egy próbaprogram: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 37/55

Szövegfájl-kezelési alapok … és a próbaprogram: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás Kód

Szövegfájl-kezelési alapok … és a próbaprogram: ELTE 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás Kód jegyzetként 38/55

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 2. 0, ha OK; 1, ELTE ha nem létező

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

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 3. (-4. ) Az előző két feladat megoldását ELTE

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 3. (-4. ) Az előző két feladat megoldását ELTE 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. 2/24/2021 módo-sítsuk úgy, hogy a tömb elemének típusa nem string, hanem int, és min. E, max. E közötti! Soronként most is egyetlen adat legyen! void fajlbol_int_tombbe (string f. N, int &n, int t[], int max. N, int min. E, int max. E); Szlávi-Zsakó: Programozási alapismeretek 7. előadás 40/55

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 5. ELTE 0, ha OK; 1, ha nem létező

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 5. ELTE 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. 2/24/2021 ‘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 min. E, max. E közötti! Az összes adat egyet-len sorban legyen! void fajlbol_int_tombbe (string f. N, int &n, int t[], int max. N, int min. E, int max. E); Szlávi-Zsakó: Programozási alapismeretek 7. előadás 41/55

Szövegfájl-kezelési alapok Kódolási alapfeladatok (folytatás): 6. ELTE 0, ha OK; 1, ha már létező

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

Rekordok vektora Feladat: ELTE Egy adott napon N-szer volt földrengés. Is-merjük az egyes rengések

Rekordok vektora Feladat: ELTE 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) 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 43/55

Rekordok vektora Specifikáció: Ø Bemenet: ELTE 2/24/2021 N: Egész, Bár értelmes R: Tömb[1. .

Rekordok vektora Specifikáció: Ø Bemenet: ELTE 2/24/2021 N: Egész, Bár értelmes R: Tömb[1. . N: TIdő] lehetne: TIdő is! 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ő Egész. Bár értelmes Szlávi-Zsakó: Programozási alapismeretek 7. előadás 44/55 lehetne: TIdő 44/55 is!

Rekordok vektora Idők különbsége 1. megoldási ELTE 2/24/2021 ötlet: Felfoghatjuk úgy, mint két háromjegyű

Rekordok vektora Idők különbsége 1. megoldási ELTE 2/24/2021 ö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. m p Meggondolandó, h. mekkora egész szám kell hozzá? (24*3600=86 400) Milyen Szlávi-Zsakó: Programozási alapismeretek 7. előadás 45/55

Rekordok vektora Specifikáció: Ø Bemenet: ELTE 2/24/2021 N: Egész, R: Tömb[1. . N: TIdő]

Rekordok vektora Specifikáció: Ø Bemenet: ELTE 2/24/2021 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ő Egész i 1 – i 2 : = i 1. o*3600+i 1. p*60+i 1. mp Szlávi-Zsakó: Programozási alapismeretek 7. előadás 46/55

Rekordok vektora Algoritmus 1: i=1. . N S[i]: =R[i]. o*3600+ R[i]. p*60+R[i]. mp ELTE

Rekordok vektora Algoritmus 1: i=1. . N S[i]: =R[i]. o*3600+ R[i]. p*60+R[i]. mp ELTE i=1. . N– 1 T[i]: =S[i+1]–S[i] Megjegyzések: 1. Egy 2/24/2021 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. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 47/55

Rekordok vektora Algoritmus 2: i=1. . N S[i]: =másodpercben(R[i ]) i=1. . N– 1

Rekordok vektora Algoritmus 2: i=1. . N S[i]: =másodpercben(R[i ]) i=1. . N– 1 T[i]: =S[i+1]–S[i] ELTE 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. 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 48/55

Rekordok vektora Algoritmus 3: ELTE i=1. . N– 1 T[i]: =másodpercben(R[i+1]) – másodpercben(R[i]) Megjegyzés:

Rekordok vektora Algoritmus 3: ELTE i=1. . N– 1 T[i]: =másodpercben(R[i+1]) – másodpercben(R[i]) Megjegyzés: 2/24/2021 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ásodpercekre. Szlávi-Zsakó: Programozási alapismeretek 7. előadás 49/55

Rekordok vektora Algoritmus 4: i=1. . N– 1 T[i]: = R[i+1]–R[i] ELTE Megjegyzés: A

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

Vektorok rekordja Feladat: ELTE Ismerjük egy ember összes telefonszámát és e-levél címét. Egy adott

Vektorok rekordja Feladat: ELTE 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, 2/24/2021 telefon: Tömb[1. . Max. T: Szöveg], elevél: Tömb[1. . Max. E: Szöveg] ) Ø Mi az a Max. T, Max. E? Szlávi-Zsakó: Programozási alapismeretek 7. előadás 51/55

Vektorok rekordja Specifikáció: Ø Bemenet: ELTE X: TEmber, Tel, Elev: Szöveg, TEmber=Rekord(…) Ø Kimenet:

Vektorok rekordja Specifikáció: Ø Bemenet: ELTE X: TEmber, Tel, Elev: Szöveg, TEmber=Rekord(…) Ø Kimenet: Lehet: Logikai Ø Előfeltétel: X. dbt [0. . Max. T] és X. dbe [0. . Max. E] … Ø 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! 2/24/2021 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 52/55

Vektorok rekordja Algoritmus: ELTE Eldöntés tétel 2/24/2021 i: =1 i≤X. dbt és X. telefon[i]≠Tel

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

Vektor-rekord További példák: ELTE 2/24/2021 KÉP[i, j]. piros – az (i, j) képpont RGB

Vektor-rekord További példák: ELTE 2/24/2021 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 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 Szlávi-Zsakó: Programozási alapismeretek 7. előadás 54/55

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

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