PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Hasonló dokumentumok
Programozási alapismeretek 1. előadás

Maximum kiválasztás tömbben

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Térinformatikai algoritmusok Elemi algoritmusok

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozási alapismeretek 3. előadás

Térinformatikai algoritmusok Elemi algoritmusok

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Programozási alapismeretek. 1. előadás. A problémamegoldás lépései. A programkészítés folyamata. Az algoritmus fogalma. Nyelvi szintek.

Bevezetés az informatikába

Algoritmizálás, adatmodellezés tanítása 6. előadás

Programozás Minta programterv a 2. házi feladathoz 1.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Programtervezés. Dr. Iványi Péter

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Programozás Minta programterv a 1. házi feladathoz 1.

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Pénzügyi algoritmusok

Programozás alapjai (ANSI C)

Programozási alapismeretek. Bevezető

Algoritmizálás + kódolás C++ nyelven és Pascalban

A C# programozási nyelv alapjai

Intergrált Intenzív Matematika Érettségi

2018, Diszkrét matematika

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Kifejezések. Kozsik Tamás. December 11, 2016

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Mintavételes szabályozás mikrovezérlő segítségével

Algoritmusok, adatszerkezetek, objektumok

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Bevezetés a programozásba I.

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programozási Módszertan definíciók, stb.

Programozási nyelvek (ADA)

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

A félév során előkerülő témakörök

KÖVETELMÉNYEK 2018/ FÉLÉV. 1. hét Szervezési feladatok. Tematika, követelmények.

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

Programozási módszertan

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Algoritmizálás és adatmodellezés tanítása 1. előadás

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Az összetett programozási tételek is egy tőről fakadnak

SZOFTVERFEJLESZTÉS. Földtudományi mérnöki mesterszak / Geoinformatikus-mérnöki szakirány. 2017/18 II. félév. A kurzus ebben a félévben nem indult

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Hatékonyság 1. előadás

Függvények int, long 1. Adott a mellékelt f alprogram.

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Programozás II. 2. Dr. Iványi Péter

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Matematikai alapok. Dr. Iványi Péter

Python bevezető foglalkozás Python bevezető foglalkozás

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

ISA szimulátor objektum-orientált modell (C++)

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Bevezetés a programozásba I.

Objektumorientált Programozás III.

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Informatika tanítási módszerek

Matematikai alapok. Dr. Iványi Péter

Adatok ábrázolása, adattípusok

Programozási tételek és alkalmazásaik

Smalltalk 2. Készítette: Szabó Éva

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

3. ZH-ban a minimum pontszám 15

Bevezetés a programozásba I 8. gyakorlat. C++: szövegfolyamok, intelligens tömbök

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Generikus osztályok, gyűjtemények és algoritmusok

Szoftver karbantartási lépések ellenőrzése

1. Jelölje meg az összes igaz állítást a következők közül!

Szoftverminőségbiztosítás

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

2006. szeptemberétől. kódja

Felhasználó által definiált adattípus

10. gyakorlat Struktúrák, uniók, típusdefiníciók

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Bevezetés a C++ programozásba

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

Java II. I A Java programozási nyelv alapelemei

1. gyakorlat

Programozási nyelvek Java

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Bevezetés a programozásba I.

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Átírás:

PROGRAMOZÁS tantárgy Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Követelmények A,C,E szakirány B szakirány Előfeltétel Prog. alapismeret Prog. alapismeret Diszkrét matematika I. Óraszám 2 ea + 2 táblás gy. + 2 labor gy. + 1 konz 2 ea + 2 táblás gy. + 1 konz Számonkérés A,C,E szakirány B szakirány Plusz-mínusz röpdolgozat Zárthelyi Házi feladat Géptermi zárthelyi minden héten összege nem lehet negatív 3 db + 1 javító 3. zh évfolyam szintű két utolsó zh legalább elégséges 2 db, határidőre, de még a szorgalmi időszakban 2 db (+ 1 javító) 1. zh 5 fokozatú 2. évfolyam zh 3 fokozatú, legalább megfelelt minden héten összege nem lehet negatív 3 db (duplán számít) + 1 javító 3. zh évfolyam szintű két utolsó zh legalább elégséges 3 db, határidőre, de még a szorgalmi időszakban, 1 db (+ 1 javító) évfolyam zh három fokozatú, legalább megfelelt

Segédanyagok Gregorics Tibor: Programozás 1.kötet Tervezés. ELTE Eötvös Kiadó, 2013. Gregorics Tibor: Programozás 2.kötet Megvalósítás. ELTE Eötvös Kiadó, 2013. http://people.inf.elte.hu/gt/prog

PROGRAMOZÁS Programozási szabványok Gregorics Tibor http://people.inf.elte.hu/gt/prog

Egyszerű programozási feladat Feladat megoldásának fázisai Elemzés Specifikáció Algoritmus Tervezés Megvalósítás Konkrét program Tesztelés Megoldó program

Néhány programozási szabvány Specifikálás o adat központú elő-, utófeltételes leírás o állapot központú elő-, utófeltételes leírás o végrehajtható leírás Tervezés o algoritmikus gondolkodás o analóg módon (programozási tétellel) analóg algoritmikus gondolkodás visszavezetés o formális program-szintézis (levezetés) Megvalósítás o hármas tagozódás o top-down kódolás o beolvasás, kiírás kódolása o adatellenőrzés beépítése o adattípusok kiválasztása o modulokra bontás o objektum orientált elemek : class öröklés dinamikus kötés o Tesztelés o fekete/fehér doboz o érvényes/ érvénytelen o határ esetek, adat-csoportok szerint o megvalósított művelet tulajdonságai o terheléses teszt o programozási tételekre jellemző teszt Dokumentálás o Felhasználói és fejlesztői o

Egy szabványokat sértő megoldás Számoljuk ki két természetes szám szorzatát szorzás nélkül! Adatokra felírt specifikáció: Bemenet: a, b Z Eredmény: c Z Előfeltétel: a 0 b 0 Utófeltétel: c = a b Algoritmus: z := 0 x 0 z := z + y x := x 1 Változók: a ~ x : Z b ~ y : Z c ~ z : Z int x, y, z; cout << "x = "; cin >> x; if(x<0){ cout << "hiba\n"; return 1; } cout << "y = "; cin >> y; if(y<0){ cout << "hiba\n"; return 1; } z = 0; while(x!=0){ z = z + y; x = x - 1; } cout << "x*y = " << z << endl;

Amikor egy rosszul megírt program jól működik Túlcsordulás: [-2 31 1] 32 = [ 2147483649] 32 = [2147483647] 32 = 2 31 1 x : Z x : int -2 31-3 0 2 31 1 Ha kezdetben x=a<0, akkor a sorozatos x:=x 1 hatására 2 32 a lépés múlva lesz x=0. Mindeközben a z := z + y (y=b) is 2 32 a -szor hajtódik végre, így a z értéke többször is túlcsordulhat. Az algoritmus a<0 esetén a (2 32 a ) b értéket számolja ki, és tárolja el a z változóban 32 biten: z= [(2 32 a ) b] 32 =[ a b+b 2 32 ] 32 =[a b] 32 z = 0; while(x!=0){ z = z + y; x = x - 1; }

x = x 0 y = y 0 x = x y = y Állapottér (A) : x : Z, y : Z, z : Z Előfeltétel (Ef) : x = a y = b x 0 y 0 Utófeltétel (Uf): z = a b Specifikáció másképp x, y, z egész típusú változók Kezdetben x és y input változók kezdő értéke nem negatív Végezetül a z output változó az x és y kezdő értékeinek szorzatát tartalmazza A: x : Z, y : Z, z : Z Ef: x = a y = b x 0 y 0 Uf: y = b z = a b z = a y Végrehajtható specifikáció: A: x : Z, y : Z, z : Z Ef: x = a y = b x 0 y 0 Uf: x = a y = b z = y i=1 x A: x : Z, y : Z Ef: x = a y = b x 0 y 0 Uf: x = a y = a b y + y + + y x-szer input és output változó egyben

Összegzés programozási tétele Összegezzük az f : [m..n] H függvénynek az m..n egész-intervallumon felvett értékeit! A H halmazon legyen értelmezett a + : H H H művelet, amely asszociatív és van baloldali nulla eleme (0 H). A : m:z, n:z, s:h Ef : m=m 0 n=n 0 n Uf : Ef s= f(i) i=m n f(i) = 0 ha n<m i=m s, i := 0, m i n s := s + f(i) i := i + 1 s := 0 i =m.. n s := s+f(i) i : Z

Visszavezetés módszere A: m : Z, n : Z, s : H Ef: m = m 0 n = n 0 n Uf: Ef s = f(i) i=m A: x : Z, y : Z, z : Z Ef: x = a y = b x 0 y 0 x Uf: x = a y = b z = y i=1 s : H n s = f(i) i=m m.. n s f(i) H, +, 0 z : Z x z = y i=1 De hiszen ez egy ÖSSZEGZÉS!!! ~ 1.. x z s := 0 ~ z i = m 1.. x n ~ y ~ Z, +, 0 s z := s z + y f(i)

Szabványok, amire figyelni kell: o o o o o hármas tagozódás, struktogram top-down kódolása adatellenőrzés a specifikáció előfeltétele alapján Megvalósítás konkrét adattípusok kiválasztása C++-ban: natural int (bool, char, int, double, string, vector<>) kódolási konvenciók C++-ban programozási tételek (számlálós ciklus for utasítással, ++i,) csak korlátozottan használjuk a do-while ciklust globális változót ne használjunk kerüljük a kódismétlődést (pl. alprogramok használatával) nem funkcionális követelmények: barátságos öndokumentáló (kiírás, komment) bolond-biztos

Specifikáció alapján (fekete doboz) Érvényes tesztesetek Alkalmazott programozási tétel alapján Tesztelés intervallum: ~hossza (0, 1, sok),~ eleje, ~vége tétel specifikus: összegzés esetén a skálázhatóság A változók lehetséges értékeinek csoportjai és határelemei szerint Alkalmazott műveletek tulajdonságai Érvénytelen tesztesetek Program (algoritmus+kód) alapján (fehér doboz) Beolvasás tesztelése (bolond-biztos, öndokumentáló) Kiírás tesztelése (öndokumentáló) Minden utasítás, és minden egymás után végrehajtható utasítás-pár kipróbálása. (egyszerű programok esetén a korábbi esetek lefedik)

A példa fekete doboz tesztesetei 1. Összegzés tételéből adódó tesztesetek: [1..x] hosszának tesztje: üres intervallum x = 0 z = 0 1 hosszú intervallum x = 1, y =5 z = 5 2 hosszú intervallum x = 2, y =7 z = 14 [1..x] elejének, végének vizsgálata (egyben): lásd előbbi tesztadatok Eredmény skálázása: input egyike: 2 31 hibás input Az int-tel ábrázolható legnagyobb egész szám: 2 31 1 = 2147483647 feltéve, hogy kezdetben z=0 input: 2, 2 31 1 z túlcsordul input: 1, 2 31 1 z = 2 31 1 hibaüzenet pontosítása kell ilyen hibaüzenet is végtelen ciklus kijavítása for(int i=1; i<=x; ++i) helyett for(int i=0; i<x; ++i) input: 2, 2 31 2 z túlcsordul input: 1, 2 31 2 z = 2 31 2 input: 2, 2 30 z túlcsordul input: 1, 2 30 z = 2 30

A példa fekete doboz tesztesetei 2. Változók értékeinek jellegzetes csoportjai (egész számoknál a nulla, negatívok és pozitívok), határ-elemei (természetes számoknál a nulla) mindkettő input (x és y) nulla: 0 0 z = 0 csak az egyik input (x vagy y) nulla: 12 0, 0 12 z = 0 egyik input sem nulla: 12 7 z = 84 A feladat (szorzás) tulajdonságai: kommutatív: 12 7 = 7 12 z = 84 asszociatív: (12 7) 5 = 12 (7 5) z = 420 null elem: 12 0 = 0 12 z = 0 egység elem: 12 1 = 1 12 z = 12 Érvénytelen input: futási idő eltér előfeltétel sérül: x<0 vagy y<0 hibás input (x<0, y 0 / x 0, y<0 / x<0, y<0) számábrázolási korlátok: x 2 31 vagy y 2 31 hibás input (x<2 31, y 2 31 / x 2 31, y<2 31 / x<2 31, y<2 31 )

A félév során használt minták, ökölszabályok (szabványok) Specifikációs minták A specifikáció formája, és a végrehajtható utófeltétel. Tervezési minták Algoritmus tervezéshez programozási tételek, és azok felhasználása visszavezetéssel Objektum-orientált tervezési minták Implementációs minták Implementációs stratégiák (hármas tagozódás, kívülről befele) Kódminták (beolvasás, programozási tételek kódjai), kódolási ajánlások (konvenciók) alkalmazása Tesztelési stratégiák Általános szempontok (fekete-fehér, érvényes-érvénytelen) Programozási tételek tesztesetei (intervallum, tétel sajátossága) Adat-csoportok (határ esetek, műveletek tulajdonságai) Dokumentálási minták