Programozási alapismeretek * A Zh-írás módszertana
ELTE Elvárások 1. Feladatmegértés 2. Specifikáció-megértés (mi mit fejez ki?) + fel- használás (mi mit határoz meg a későbbi lépések- ben?) 3. Algoritmizálási / algoritmusértelmezési készség (hogyan építhető föl elemibb lépésekből? / struktogramolvasás: mi mit ír le?) 4. Kódolási rutin (mi hogyan valósítható meg C++- ban; milyen kódolási sémák vannak? Mikor, melyik séma alkalmazható?) 2/18 Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Programozási folyamat Kapcsolatok a programozási folyamat- ban: 3/18Feladatszöveg Specifikáció Uf Lényegi algoritmus Kód Be,Ki Típusok, deklarációk Ef beolvasás Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa Egy példa: Feladat: Ismerjük az elmúlt N napon dél- ben mért hőmérsékletet. Adjuk meg min- den 7-napos időszakra az átlaghőmérsék- letet! Feladat Értelmezés: N napon mért … valamiből sok, alighanem valamilyen N-elemű tömb lesz hőmérséklet tömbelem: valós v. egész 7-napos időszakra a tömbbeli 7 elemű részsorozattal kell valamit csinálni minden 7-napos időszakra sok részsoro- zat, az eredmény is tömb lesz átlaghőmérséklet összegzés ( tétel) 4/18 Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana Példa Specifikáció-létrehozás: Bemenet: N:Egész; H:Tömb[1..N:Egész] Kimenet: A:Tömb[1..N–6:Valós] Előfeltétel: N 7 Utófeltétel: i(1 i N–6): Értelmezés: Bemenet – deklarálandó + beolvasandó Kimenet – deklarálandó + kiírandó Előfeltétel – N ellenőrizendő, H-ra nincs előírás legfeljebb szintaktikusan ellenő- rizhető 5/18 N napon mért … valamiből sok, alighanem valamilyen N-elemű tömb lesz hőmérséklet tömbelem: valós v. egész 7-napos időszakra a tömbbeli 7 elemű részsorozattal kell valamit csinálni minden 7-napos időszakra sok részsorozat, az eredmény is tömb lesz átlaghőmérséklet összegzés ( tétel)
ELTE Példa Értelmezés (folytatás) : Utófeltétel – meggondolandó: i(1 i N–6): A[i]=… egy ciklus lesz az A[i]-k kiszámolására; A[i]:=(7*A[i–1]–H[i–1]+H[i+6])/7 A[2..N–6] egyszerűen számolható, de a rekurzió miatt a kiinduló A[1] másként: a sorozatszámítás (összegzés) tétel segítsé- gével 6/18 átlaghőmérséklet összegzés ( tétel) Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa Algoritmuslétrehozás: 7/18 Utófeltétel – meggondolandó: i(1 i N–6): A[i]:=… egy ciklus lesz az A[i]-k kiszámolására; A[i]:=(7*A[i–1]–H[i–1]+H[i+6])/7 A[2..N–6] egyszerűen számolható, de a rekurzió miatt a kiinduló A[1] másként: a sorozatszámítás (összegzés) tétel segítsé- gével S:=0 i=1..7 S:=S+H[i] A[1]:=S/7 i=2..N –6 S:=S–H[i–1]+H[i+6] A[i]:=S/7 Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa Algoritmusolvasás (ha a zh-n kéri) : 8/18 S:=0 i=1..7 S:=S+H[i] A[1]:=S/7 i=2..N –6 S:=S–H[i–1]+H[i+6] A[i]:=S/7 S-t H 1..7 elemeivel növeljük egy ciklus segítségével; majd az átlagot A[1]-be tesszük Egy (2..N-6) ciklussal S-et két, H-beli elem különbségével növeljük, majd az átlagot A[i]-be tesszük Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa Kódolás (minimum, de már így is lehet ötös) : 9/18 … a kód szokásos részei … int main() { … int N; int MaxN=100; int H[MaxN]; double A[MaxN-6]; … Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 10/18 … bool hiba; do{ cout > N; hiba=N MaxN; if (hiba) { cout << "Helytelen elemszám!" << endl; } }while (hiba); cout << "Kérem a hőmérsékletet!" << endl; for (int i=0;i<N;++i) { cout > H[i]; } … Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 11/18 int s=0; for (int i=0;i<7;++i) { s+=H[i]; } A[0]=s/7; for (int i=1;i<N-6;++i) { s=s-H[i-1]+H[i+6]; A[i]=s/7; } … Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 12/18 … cout << "A hetes átlagok:" << endl; for (int i=0;i<N-6;++i) { cout << i+1 << ".:" << A[i] << endl; } system("pause"); return 0; } Kód Kód jegyzet- ként Kód Kód jegyzet- ként Kód Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa Még szebb, ha függvényekből építkezünk: 13/18 int main() { … deklarációk … int_be("Elemszám:",N,7,MaxN); int_tomb_be("Kérem a hőmérsékletet!",H,N); mozgo_atlagok(H,N,A); int_tomb_ki(A,N-6); system("pause"); return 0; } Makroszerkezet: finomítás-hívások Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 14/18 int main() { … deklarációk … int_be("Elemszám:",N,7,MaxN); int_tomb_be("Kérem a hőmérsékletet!",H,N); mozgo_atlagok(H,N,A); int_tomb_ki(A,N-6); system("pause"); return 0; } void int_be(string kerd, int &_n, int _minN, int _maxN); void int_tomb_be(string kerd, int _h[], int _N); void mozgo_atlagok(const int _h[], int _n, double _a[]); void int_tomb_ki(const double_a[], int _n); Finomítás-fejsorok definíciói Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 15/18 … int main() { … deklarációk … int_be("Elemszám:",N,7,MaxN); int_tomb_be("Kérem a hőmérsékletet!",H,N); mozgo_atlagok(H,N,A); int_tomb_ki(A,N-6); system("pause"); return 0; } Finomítások definíciói; kifejtései void int_be(string kerd, int &_n, int _minN, int _maxN) { … a finomítás törzse … } … Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE Példa 16/18 Finomítások definíciói; kifejtései void int_tomb_be(string kerd, int _h[], int _N) { … a finomítás törzse … } void mozgo_atlagok(const int _h[], int _n, double _a[]) { … a finomítás törzse … } void int_tomb_ki(const double _a[], int _n) { … a finomítás törzse … } Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE A „nagy” elemszám okoz-e valami bajt (pl. túlcsordulást) MaxN+1 MaxN Példa Tesztelési terv: N-hez – érvényes / érvénytelen / határeset 14 / 5, 101 / 6, 7, 100 N-hez – ekvivalencia-osztályok: 1-hét / több teljes hét / csonka hét is 7 / 14 / 10 N-hez – „volumenteszt” 100 H-hoz – ekvivalencia-osztályok: csupa azonos / szisztematikusan változó / véletlenszerű {1,1,…} / {1,4,7,10,…} / {1,9,9,2,3,7,2,1,5…} 17/18 MaxN Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana
ELTE 7 elemű, sziszte- matikusan (1, 1+3= 4, 4+3= 7,10,13,16,19) feltöltve Példa A tesztesetek elvárt eredményekkel kiegészítése (teszteset=bemenet+kimenet) összevonások (a különböző céllal létrehozottak egyesítése) Tesztfájlok létrehozása (célszerűen megvá- lasztva a fájlnevet, hogy a teszt céljára utaljon). Pl.: K1.14, S1_3.7 Tesztelés elvégzése (a bináris kód elindítása be- meneti és –esetleg– kimeneti fájl paraméterekkel). Pl.: mozgoatlag.exe _K /18 14 elemű, konstans sorozat (1-ekkel feltöltve) Bemeneti fájl Kimeneti fájl Szlávi-Zsakó: Programozási alapismeretek * a Zh-írás módszertana