Adatstruktúrák Algoritmusok Objektumok A számítógépes problémamegoldás modellezésének módszerei. Programozási elvek és módszerek: imperatív, strukturált, moduláris, objektumorientált programozás. Programozási nyelvek. A programozás menete Hajnal Éva: AAO előadás 1
Tematika A számítógépes problémamegoldás modellezésének módszerei.programozási elvek és módszerek: imperatív, strukturált, moduláris, objektumorientált programozás. Programozási nyelvek. A programozás menete Az algoritmus fogalma és ábrázolásának módjai.vezérlési és D-gráf, blokkdiagram, stuktogram, pszeudokód.adatszerkezetek Alapvető programozási tételek (N-1): összegzés, számlálás, maximumkeresés, lineáris keresés, logaritmikus keresés. Tömbök. Eljárások, függvények Alapvető programozási tételek (N-N): szétválogatás, halmazműveletek Programozási tételek összeépítése Rendezések. Hajnal Éva: AAO előadás 2
További algoritmusok (1): Horner elrendezés, Coxeter algoritmus stb Zárthelyi írás az aláírás megszerzése érdekében. Az objektumorientált programozási paradigma: modellezési alapelvek, programozási megoldások fejlődése, OO paradigma és OO program Az OO paradigma alapelemei: objektum, osztály, osztályok közötti kapcsolatok. Rektori szünet Az OOP megvalósítások általános jellemzői (1): egységbezárás és adatrejtés, láthatóságok, osztály szintű tagok, tulajdonságok. Az OOP megvalósítások általános jellemzői (2): öröklődés és többalakúság kód-újrafelhasználás További algoritmusok (2): Labirintus, játékok stb Pótlás az egész féléves anyagból Hajnal Éva: AAO előadás 3
Programozás tanulási módszerek Hajnal Éva: AAO előadás 4
1. előadás A számítógépes problémamegoldás modellezésének módszerei. Programozási elvek és módszerek: imperatív, strukturált, moduláris, objektumorientált programozás. Programozási nyelvek. A programozás menete Hajnal Éva: AAO előadás 5
Programozás alapfogalmai Programozás: A program készítés folyamata Program: Egy feladat elvégzéséhez szükséges utasítások összessége Utasítás: Egy lépésben elvégezhető számítógépes művelet Parancs: Az érvényesítést követően azonnal végrehajtódó művelet Programozási nyelv: Nyelvi elemek és szabályok rendszere, melynek alapján a számítógép számára értelmezhető program elkészül Algoritmus: a program terve, vagyis azon elemi lépések leírása, amelyek a bemenő adatokból elvezetnek a feladat megoldásához Számítástechnikai modell, számítási modell Forrásprogram: programnyelven megírt program, ebből fordítóprogram segítségével lehet a sz.g.-en futtatható programot elkészíteni Tárgyprogram Futtatható program Fordítóprogram Hajnal Éva: AAO előadás 6
A számítógép informatikai modellje Turing gép Hajnal Éva: AAO előadás 7
Turing automata részei egy cellákra osztott végtelenített papírszalag formában létező memóriából (szalagmemória, szalagtár, társzalag); minden cellában a gép által megértett nyelv betűi, azaz a Tár-abc egy-egy betűje van írva; egy vezérlőegységből, mely a gép programját tartalmazza; a vezérlőegység különböző időpillanatokban különféle belső állapotokban létezhet; egy író-olvasó fejből (I/O-fej), mely szimbólumokat ír vagy olvas a szalag celláira (ahogy a valóságos számítógépek betűket írnak ki a monitorra vagy a nyomtatóban lévő papírívre). továbbá egy szoftveregységből, ez az átmenettábla, ami vezérli a gép működését, megadva, hogy adott szimbólum beolvasásának hatására adott állapotban mit tegyen: hogyan mozogjon, milyen szimbólumot írjon a tárra, és milyen belső állapotba kerüljön. Hajnal Éva: AAO előadás 8
Programnyelvek csoportosítása Deklaratív Imperatív DBASE SQL Pascal Delphi Java C# Visual Basic Prolog C++ PHP Basic Magas szintű Algol C Fortran Assembly Alacsony szintű Hajnal Éva: AAO előadás 9
Magas és alacsony szintű programnyelvek összehasonlítása Alacsony szintű Más néven gépközeli Egyszerű utasítások Címek, egyszerű változók használata Magas szintű Ember közeli Összetett utasítások Címkék, adatszerkezetek használata Hajnal Éva: AAO előadás 10
Mi a fordítóprogram feladata? Compiler Időben elkülönül a fordítás és a futtatás Forráskód védelme megoldott Gyorsabb programfutás Futtatáshoz nem szükséges a fejlesztőkörnyezet Interpreter Futtatás és értelmezés programsoronként Forráskód védelme nehézkes Lassabb programfutás Futtatáshoz a fejlesztőkörnyezet (vagy annak egy modulja) szükséges Hajnal Éva: AAO előadás 11
Programnyelvek csoportosításának további szempontjai Programnyelvi generációk Első G: a gépi kódhoz közel álló programozás technika alacsony szintű programnyelv Második G: magas szintű programnyelvek használata, az emberi gondolkodáshoz közelebb álló parancsok, és a struktúrált programozás megjelenése Harmadik G: Objektum orientált nyelvek megjelenése Negyedik G: Eseményvezérelt programozás, vizuális kezelőfelület segítségével Általános programozási nyelv célorientált nyelvek Hajnal Éva: AAO előadás 12
A program készítés folyamata 1. A feladat meghatározása 2. Algoritmus 3. Kódolás 4. Tesztelés, hibakeresés, hibajavítás szintaktikai szemantikai hibák 5. Dokumentáció készítése Szervezési dokumentáció Programozási dokumentáció Felhasználói dokumentáció Üzemeltetési dokumentáció Hajnal Éva: AAO előadás 13
Teszt Program Programnyelv Programozás Hajnal Éva: AAO előadás 14
Program modellje Program készítésének menete Algoritmus fogalma Algoritmussal szemben támasztott követelmények Hajnal Éva: AAO előadás 15
A program készítés folyamata 1. A feladat meghatározása 2. Algoritmus 3. Kódolás 4. Tesztelés, hibakeresés, hibajavítás szintaktikai szemantikai hibák 5. Dokumentáció készítése Szervezési dokumentáció Programozási dokumentáció Felhasználói dokumentáció Üzemeltetési dokumentáció Hajnal Éva: AAO előadás 16
Algoritmus fogalma Algoritmus: véges sok, időben elkülönült szekvenciális lépésekből álló megoldási módszer. Az algoritmussal szembeni követelmények: általános: ugyanabba a problémaosztályba tartozókra is jó legyen. megismételhető legyen: ugyanazokkal az adatokkal ugyanaz az eredmény. véges időn belül véget érjen. Az algoritmus programnyelvtől független. Hajnal Éva: AAO előadás 17
Algoritmusok ábrázolása Vezérlési gráf: hurokmentes, összefüggő, többszörös élekkel nem rendelkező irányított gráf, melynek 3-féle csomópontját különböztetjük meg: 1. transzformációs (tevékenység) csomópont 2. döntési (vezérlési) csomópont (egy él be, 2 vagy több ki) 3. gyűjtő csomópont Blokkdiagram: a vezérlési gráf egy értelmezése, ahol a transzformációs és a döntési csomópontok ki vannak töltve adat-transzformációkkal (adattranszformáció: az adatokat változtatja) ill. logikai feltételekkel. D(ijkstra)-gráf: a szekvencia, a feltételes elágazások és az elöltesztelő és hátultesztelő iterációk, ill. az ezekre egyszerűsíthető eljárással vissza vezethető vezérlési gráfok (a D-gráf a szerkezetileg helyes programot leíró vezérlési gráf). Struktogram (Chapin-kártya): a ~ egy strukturált ábrázolási módszer, a tervezés felülről lefelé történik. Ahogy a struktúrában lejjebb megyünk, úgy egyre kevesebb hely marad tevékenységeink leírásához Hajnal Éva: AAO előadás 18
Valódi program: olyan összefüggő, irányított gráf, melyre igazak az alábbiak: (1) véges számú nemzérus bemenő és kimenő éllel rendelkezik (2) csomópontjait döntési csomópontok (predikátum csomópont), függvénycsomópontok és gyűjtőcsomópontok alkotják (3) minden csomóponton át vezet legalább egy bemenő éllel kezdődő és kimenő élben végződő útvonal. A programgráfot ki szokás egészíteni indítási (START), befejezési csomóponttal (STOP). Hajnal Éva: AAO előadás 19
Struktúrált programozás A struktúrált programozás alaptétele (Böhm-Jacopini, 1966): Bármely program megadható ekvivalens struktúrált program formájában is, amelyben az alábbi három konstrukciós művelet szerepel. A két program ekvivalens, azaz ugyanazon input értékekre ugyanazon output értékeket számolják ki. szekvencia (sorozat): két program közvetlen egymásután írása. elágazás: megadott feltételektől függően más-más programot hajtunk végre. ciklus: egy meglévő programot egy adott feltételtől függően valahányszor végrehajtunk. Megkülönböztethetünk elöltesztelő ciklusokat és hátultesztelő ciklusokat, melynél a feltétel-vizsgálat a program végrehajtása előtt illetve után történik. Az utóbbinál egyszer mindenképp végrehajtódik a program. iteratív ismétléssel, fokozatos közelítéssel dolgozó taxatív felsorolással dolgozó ciklus Hajnal Éva: AAO előadás 20
Miért jó a strukturált program? Egyszerű (minden D-gráf lényeges bonyolultsága 1) a strukturált programot le lehet bontani elemi D- gráfokra, ez csökkenti a bonyolultságot Miért rossz a nem strukturált program? mert bonyolult, bonyolultsági metrika nagy lesz nagy (>50) bonyolultságú program tesztelhetetlen! nem lehet egyszerűsíteni (lebontani D-gráfokra) Hajnal Éva: AAO előadás 21
Algoritmus leíró módszerek I. Folyamatábra Struktogram Pszeudokód Grafikus/szöveges grafikus grafikus szöveges Áttekinthetőség áttekinthető áttekinthető Nem áttekinthető Szerkesztés Struktúrált programozást Rajzoló programmal, speciális szerkesztőprogrammal Rajzoló programmal Táblázatkezelővel Szövegszerkesztővel Nem támogatja támogatja Támogatja Elemei Határoló jel - Program azonosító Start, vagy Program vége end Vagy Eljárás azonosító Eljárás vége Szekvencia Ut1 Ut2 Ut1 Ut2 Ut3 Utasítás1 Utasítás2 Szelekció feltétel el Ut1 feltétel ut2 Ha <feltétel> akkor Utasítás1 Különben Utasítás2 Elágazás vége Hajnal Éva: AAO előadás 22
Iteráció 1. Elöltesztelt ciklus Iteráció 2. Hátultesztelt ciklus Algoritmus leíró módszerek II. f c.m. c. m. Ciklus amíg <feltétel> Utasítás1 Utasítás2 Ciklus vége Ciklus Utasítás1 Utasítás2 Ciklus vége ha <feltétel> Iteráció 3. Számlálós ciklus u I:=1 től N-ig Ciklus i:=1-től N ig Utasítás1 Utasítás2 Ciklus vége Input/Output Be: N Be: N Be:N Ki: N Hajnal Éva: AAO előadás 23
Teszt Algoritmus fogalma és az algoritmussal szemben támasztott követelmények Feladat: n pénzérméből 1 hamis, állapítsuk meg kétkarú mérleggel a lehető legkevesebb méréssel, hogy melyik. Adjuk meg a teljes algoritmust! Hajnal Éva: AAO előadás 24
start Írja át az algoritmust struktogrammá, mondatszerű leírássá! Mi az eredmény, ha a=120, b=35 Be: a, b a<b h i c:=b b:=a a:=c a=b i h a:=a-b Ki: a end Hajnal Éva: AAO előadás 25
Adatszerkezetek A program feladata, hogy a bemenő adatokból, általában közbülső adatokon keresztül előállítsa a kimenő adatokat. Program=Algoritmus+Adatok (Wirth) A legtöbb programnyelv kategóriái: Egyszerű adat Összetett adat Mutató Hajnal Éva: AAO előadás 26
Adattípusok csoportosítása Egyszerű (megszámozható, v. skalár) típusok: logikai karakter egész valós (ez gyakran nem számít megszámozhatónak) Strukturált (összetett) típusok: tömb rekord egyesítés halmaz sorozat rekurzív típus Hajnal Éva: AAO előadás 27
Adattípusok jellemzői Neve Helyfoglalása Adattárolási mód Értékkészlet Műveletek Hajnal Éva: AAO előadás 28
Néhány elemi adattípus a C# nyelvben C# típus.net típus Helyfoglalás (byte) Adattárolási mód Értékkészlet Műveletek byte System.Byte 1 Kettes számr. 0..255 +-/*%, =, == char System.Char 1 Unicode 0..255 bool System.Boolean 1 0 hamis >0 igaz sbyte System.SByte 1 kettes komplemens short System.Int16 2 Kettes komplemens int System.Int32 4 Kettes komplemens true, false -128..127-32768..32767-2147483647.. 2147483647 &&,&,,, >>,<< float System.Single 4 IEEE 857 /,* double System.Double 8 IEEE 857 long System.Int64 8 Kettes komplemens string System.String Változó Unicode karaktersor object System.Object Változó Változó 29
Programozási tételek Gyakran előforduló programozási alapfeladatok megoldására szolgáló alapalgoritmusok. Helyességük matematikailag bizonyított. A legtöbb nagy feladat ezekre a kisebb feladatokra felbontható. Elvileg helyes, de nem mindig a leghatékonyabb megoldások egy-egy feladatra. Hajnal Éva: AAO előadás 30
Programozási tételek megadása Feladat specifikációja: Pl. Számítsuk ki n darab billentyűzetről bekért egész szám (<20000) összegét. Az n értéke változó, de az adatsor előtt bekérhető. Bemenő és kimenő adatok felsorolása, típusa esetleg a belső adatok felsorolása és típusa Előfeltételek a bemenő adatokkal szemben Utófeltétel vagy programfüggvény megadása Algoritmus leírása (Bonyolultság elemzése) Hajnal Éva: AAO előadás 31
Összegzés Eljárás Összegzés(s,n,összeg) Változó: i:egész összeg:elemtípus összeg:=0 Ciklus i:=0-tól n-ig 1-sével összeg:=összeg+s[i] Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 32
Tömb adatszerkezet fogalma és jelentősége A tömb olyan adatcsoport, amelynek elemei azonos típusúak és az elemekre sorszámmal ún. index-szel lehet hivatkozni. Az index sorszám jellegű adat, de nem csak szám lehet. Az adatok dimenziók szerint vannak elrendezve. A dimenziószám azt jelenti, hogy hány kijelölő érték (index) kell ahhoz, hogy az adatcsoportból egy elemet kiválasszunk. Hajnal Éva: AAO előadás 33
Egy dimenziós tömb : vektor Két dimenziós tömb: mátrix T T[4] T T[2,4] Hajnal Éva: AAO előadás 34
Megszámolás Eljárás Megszámolás(s,n,T,db) Változó: i,db:egész db:=0 Ciklus i:=0-tól n-ig 1-sével Ha s[i] T tul akkor db:=db+1 Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 35
Sorozatszámítás Eljárás Sorozatszámítás(s,n,f,a) Változó: i:egész a:elemtípus a:=f0 Ciklus i:=0-tól n-ig 1-sével a:=f(a,s[i]) Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 36
Teszt Készítsen algoritmust, amely kiszámítja az első n szám faktoriálisát! Hajnal Éva: AAO előadás 37
Összegzés Eljárás Összegzés(s,n,összeg) Változó: i:egész összeg:elemtípus összeg:=0 Ciklus i:=0-tól n-ig 1-sével összeg:=összeg+s[i] Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 38
Tömb adatszerkezet fogalma és jelentősége A tömb olyan adatcsoport, amelynek elemei azonos típusúak és az elemekre sorszámmal ún. index-szel lehet hivatkozni. Az index sorszám jellegű adat, de nem csak szám lehet. Az adatok dimenziók szerint vannak elrendezve. A dimenziószám azt jelenti, hogy hány kijelölő érték (index) kell ahhoz, hogy az adatcsoportból egy elemet kiválasszunk. Hajnal Éva: AAO előadás 39
Egy dimenziós tömb : vektor Két dimenziós tömb: mátrix T T[4] T T[2,4] Hajnal Éva: AAO előadás 40
Megszámolás Eljárás Megszámolás(s,n,T,db) Változó: i,db:egész db:=0 Ciklus i:=0-tól n-ig 1-sével Ha s[i] T tul akkor db:=db+1 Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 41
Sorozatszámítás Eljárás Sorozatszámítás(s,n,f,a) Változó: i:egész a:elemtípus a:=f0 Ciklus i:=0-tól n-ig 1-sével a:=f(a,s[i]) Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 42
Lineáris keresés Eljárás lineáris_keresés (A[N] sorozat, e: keresett elem) I=0 Ciklus amig i<n és A[I]<>e i=i+1 Ciklus vége Ha i<n akkor eredmény=i különben eredmény=-1 Elágazás vége Eljárás vége Hajnal Éva: AAO előadás 43
Logaritmikus keresés Eljárás binaris_keresés(a[n] sorozat, e: keresett elem) also=0, felso=n-1 Ciklus amig also<felso+1 és A[kozepso]<>e kozepso=(also+felso)/2 Ha A[kozepso]< e akkor also=kozepso+1 Elágazás vége Ha A[kozepso]> e akkor felso=kozepso-1 Elágazás vége Ciklus vege Ha A[kozepso]= e eredmeny=kozepso Különben eredmeny=-1 Elágazás vége Eljárás vége Hajnal Éva: AAO előadás 44
Maximum kiválasztás Eljárás Maximumkiválasztás(s,n,max) Változó: i:egész max:elemtípus max:=s[0] Ciklus i:=1-t/l n-ig 1-sével Ha s[i]>max akkor max:=s[i] Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 45
Teszt Mit nevezünk programozási tételnek? Fibonacci sorozat n. elemének meghatározása Hajnal Éva: AAO előadás 46
Maximum kiválasztás Eljárás Maximumkiválasztás(s,n,max) Változó: i:egész max:elemtípus max:=s[0] Ciklus i:=1-től n-1 ig 1-sével Ha s[i]>max akkor max:=s[i] Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 47
Kiválogatás ELJÁRÁS KIVÁLOGATÁS (A[],N,T,B[],DB) DB=0 I= 0 CIKLUS AMÍG I < N HA A[I] T tulajdonságú AKKOR B[DB]=A[I] DB=DB+1 ELÁGAZÁS VÉGE I=I+1 CIKLUS VÉGE ELJÁRÁS VÉGE Hajnal Éva: AAO előadás 48
Szétválogatás Eljárás Szétválogatás(s,n,dt,dbt,dnt,dbnt,T) Változó: i,dbt,dbnt:egész dbt:=0; dbnt:=0 Ciklus i:=0-tól n-ig 1-sével Ha s[i] T tul. akkor dbt:=dbt+1 dt[dbt]:=s[i] különben dbnt:=dbnt+1 dnt[dbnt]:=s[i] Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 49
Unio Eljárás Unioképzés(s,n,z,m,unio,db) Változó: i,j,db:egész unio:=s db:=n-1 Ciklus j:=0-tól m-ig 1-sével i:=0 Ciklus amíg i<n és s[i]!=z[j] i:=i+1 Ciklus vége Ha i=n akkor db:=db+1 unio[db]:=z[j] Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 50
Feladat Ismert Magyarország I. osztályú focibajnokságának összes eddigi góllövőlistája. Készítsük el az abszolút listát. Rekord adatszerkezet fogalma Hajnal Éva: AAO előadás 51
Összefuttatás Eljárás Összefuttatás(s,n,z,m,unio,db) Változó: i,j,db:egész i:=0; j:=0; db:=-1 Ciklus amíg i<n és j<m db:=db+1 Elágazás s[i]<z[j] esetén unio[db]:=s[i]; i:=i+1 s[i]=z[j] esetén unio[db]:=s[i]; i:=i+1; j:=j+1 s[i]>z[j] esetén unio[db]:=z[j]; j:=j+1 Elágazás vége Ciklus vége Ciklus amíg i<n db:=db+1; unio[db]:=s[i]; i:=i+1 Ciklus vége Ciklus amíg j<m db:=db+1; unio[db]:=z[j]; j:=j+1 Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 52
Metszet Eljárás Metszetképzés(s,n,z,m,metszet,db) Változó: i,j,db:egész db:=0 Ciklus i:=0-tól n-ig 1-sével j:=0 Ciklus amíg j<m és s[i]!=z[j] j:=j+1 Ciklus vége Ha j<m akkor db:=db+1 metszet[db]:=s[i] Elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 53
Rendezés Fogalma: Rendezésnek nevezzük azt a folyamatot, amikor egy halmaz elemeit valamilyen szabály szerint sorba állítjuk. A rendezés meggyorsítja az elemek későbbi keresését. A rendezendő adattömeg néha olyan nagy, hogy nem fér be a tárba. Ezek rendezésére valók a külső rendezések. Az alábbi rendezési algoritmusok belső rendezések. Hajnal Éva: AAO előadás 54
Közvetlen cserés rendezés Eljárás Rendezés(s,n) Változó i,j:egész Ciklus i:=0-tól n-2-ig, 1-sével Ciklus j:=i+1-től n-1 ig, 1-sével Ha s[i]>s[j] akkor csere(s[i],s[j]) Elágazás vége Ciklus vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 55
Közvetlen cserés rendezés indexvektorral Eljárás Rendezés(s,n) Változó i,j:egész ind:tömb[0..n:egész] Ciklus i:=0-tól n-ig, 1-sével ind[i]:=i Ciklus vége Ciklus i:=0-től n-1-ig, 1-sével Ciklus j:=i+1-től n-ig, 1-sével Ha s[ind[i]]>s[ind[j]] akkor csere(ind[i],ind[j]) Elágazás vége Ciklus vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 56
A rendezés ára Műveletigény Tárigény Programbonyolultság Hajnal Éva: AAO előadás 57
Rendezőalgoritmusok Bonyolultság tényezői: időbonyolultsága Összehasonlítások száma Cserék Értékadások száma Legrosszabb és átlagos eset közvetlen cserés rendezés összehasonlítások és cserék (legrosszabb eset) száma: n 2 (n 1) 2 O(n Hajnal Éva: AAO előadás 58 )
Minimum kiválasztásos rendezés Eljárás Rendezés(s,n) Változó i,j:egész Ciklus i:=0-tól n-1-ig, 1-sével érték:=s[i] index:=i Ciklus j:=i+1-től n-ig, 1-sével Ha érték>s[j] akkor érték:=s[j]; index:=j Elágazás vége Ciklus vége s[index]:=s[i] s[i]:=érték Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 59
Buborékos rendezés Eljárás Rendezés(s,n) Változó i,j:egész Ciklus i:=0-től n-1 ig, 1-sével Ciklus j:=n-től i-ig, -1-sével (visszafele) Ha s[j-1]>s[j] akkor csere(s[j-1],s[j]) Elágazás vége Ciklus vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 60
Javított buborékos rendezés ELJÁRÁS JOBB_BUBORÉK(S[],N) CSERE = 1 CIKLUS AMÍG CSERE ==1 CSERE = 0 J=0 CIKLUS AMÍG J<N-1 HA S[J]>S[J+1] AKKOR csere(s[j],s[j+1]) CSERE =1 ELÁGAZÁS VÉGE J=J+1 CIKLUS VÉGE CIKLUS VÉGE ELJÁRÁS VÉGE ELJÁRÁS LEGJOBB_BUBORÉK(S[],N) CSERE = 1 DB = N CIKLUS AMÍG CSERE == 1 CSERE = 0 J=0 CIKLUS AMÍG J< DB -1 HA S[J]>S[J+1] AKKOR csere(s[j], S[J+1]) CSERE =1 ELÁGAZÁS VÉGE J=J+1 CIKLUS VÉGE DB = DB-1 CIKLUS VÉGE ELJÁRÁS VÉGE Hajnal Éva: AAO előadás 61
Egyszerű beillesztéses rendezés (kártyás rendezés) Eljárás Rendezés(s,n) Változó i,j:egész M:elemtípus Ciklus i:=1-től n-1 ig, 1-sével M:=s[i] j:=i-1 Ciklus amíg M<s[j] és j>=0 s[j+1]:=s[j] j:=j-1 Ciklus vége s[j+1]:=m Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 62
Beillesztéses rendezés bonyolultsága Mozgatások száma Összehasonlítások száma Hajnal Éva: AAO előadás 63
Az összehasonlításon alapuló rendezések összehasonlításainak Alsó becslés: k>=lg(n!) K db kódszó (igen, nem) a sorrend helyességére. száma Bemenet 123 nnn 132 nin 213 inn 231 nii Kódszó variációk 312 iin 321 iii Hajnal Éva: AAO előadás 64
Shell rendezés Hajnal Éva: AAO előadás 65
Shell rendezés Eljárás Rendezés(s,n) Változó i,j,d,b:egész REK:elemtípus d:=n-1 Ciklus i:=0 Ciklus amíg i<d és i+d<n Ciklus j:=i+d-től n-ig, d-esével REK:=s[j]; B:=j-d Ciklus amíg B>0 és REK<s[B] S[B+d]:=s[B]; B:=B-d Ciklus vége S[B+d]:=REK Ciklus vége i:=i+1 Ciklus vége d:=int(d/2) Ciklus vége amíg d<1 Eljárás vége Hajnal Éva: AAO előadás 66
ZH Elfogadva 40% fölött 20% alatt letiltás Feladattípusok: Elmélet ~50% Készíts algoritmust! Melyik programozási tételre vezethető vissza? Írd át struktogramból mondatszerű leírássá! Milyen értéket vesznek fel a változók a program végén? Milyen adatokkal lehet tesztelni? Hajnal Éva: AAO előadás 67
Feladat Programozási tételek alkalmazása Egy iskolában sportdélutánt szerveznek. A sportoló tanulók nevét sportáganként tartjuk nyilván. Állapítsuk meg a sportdélutánon résztvevő tanulók számát. Adott az A(N) egészekből álló számsorozat. Válogassuk ki azokat az egymástól különböző elemeket, amelyeknél a számjegyek összege 10. Ismert Magyarország I. osztályú focibajnokságának összes eddigi góllövőlistája. Készítsük el az abszolút listát. Hajnal Éva: AAO előadás 68
Függvények A függvény utasítások logikailag összefüggő csoportja, mely önálló névvel és visszatérési értékkel rendelkezik. Hívása printf( Hello ); Console.Clear(); Consol.WriteLine( Hello ); a=sin(x); Consol.WriteLine(sin(x)); Szerkezete Visszatérésiértéktípusa FüggvényNeve(paraméterlista) { Utasítások; Return visszatérési érték; } Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 69
Függvény végrehajtása, és definíciója static void terulet() { Console.WriteLine("Kérem a négyzet oldalát:"); int t = Int32.Parse(Console.ReadLine()); Console.WriteLine( t * t); } 1. Program belépési pontja (Entry point) static void Main(string[] args) { terulet(); Console.ReadLine(); } Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 70
Eljárás végrehajtása I. Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 71
Eljárás végrehajtása II. Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 72
Változók hatásköre A változók hatásköre az őket tartalmazó blokkra terjed ki. Ha több eljárás közt osztunk meg egy változót: Static módosítóval rendelkező eljáráshoz static módosítójú változót kell definiálni. Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 73
Függvény visszaadott értéke void int double Összetett adat pl. tömb Eljárás függvény Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 74
Paraméter átadás static void Kiiras(int a,int b) { Console.WriteLine("A {0}+{1}={2}",a,b,a+b); } Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 75
Függvény paraméterei Bemenő-Kimenő paraméterek Érték szerinti cím szerinti paraméter átadás Paraméterek, helyi változók tárolása Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 76
Átadott paraméter egyeztetése Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 77
Érték szerinti paraméter átadás Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 78
Cím szerinti paraméter átadás Átmenő, kimenő paraméter Ref, out Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 79
Paraméterátadás Szignatúra: függvény neve, és paraméterlistája az abban levő típusokkal Írhatunk azonos nevű függvényeket, ha a szignatúrájuk különböző. Polimorfizmus. Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 80
Programozási feladat: 1. Készítsünk olyan függvényt, amely meghatározza két tömb elemeinek ismeretében a metszetük elemszámát! 2. Készítsünk olyan függvényt, amely meghatározza egy paraméterben megadott, int típusú tömbben a leghosszabb egyenlő elemekből álló szakasz hosszát! Adatszerkezetek, algoritmusok, objektumok Dr. Hajnal Éva 81
Teszt Mit nevezünk függvénynek, eljárásnak? Mit jelent a paraméterátadás kifejezés? Mit jelent az érték szerinti, cím szerinti paraméter átadás? Hajnal Éva: AAO előadás 82
Tömb Feladat: Tételek alkalmazása mátrixokra Adott egy tanulócsoport, minden diákhoz tartozik 4 vizsgaeredmény. Adjuk meg az átlagot, a bukások számát, a bukottak számát. Mátrix transzponáltja Forgatás Hajnal Éva: AAO előadás 83
Ritka mátrix A ritka mátrix olyan mátrix, melynek sok eleme nulla, vagy sok azonos értékű eleme van. Speciális eset pl. a háromszögmátrix Tárolás vektorban Elemek száma: n*(n+1)/2 Elemek indexe: L=(j*(j-1)/2)+K Általános eset 1. Háromsoros reprezentáció 1 0 0 0 2 3 0 0 5 1 4 0 2 1 7 3 A három egydimenziós tömb azonos elemei írnak le 1-1 elemet sorfolytonos ábrázolásban. Mátrix n sor,3 oszlop sorfolytonos ábrázolással, a 0. elem az elemszám pl. az A mátrix: 1 2 0 0 0 6 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 Ekkor tehát: SOR = (1,1,1,2,5) OSZLOP = (1,2,6,2,6) ÉRTÉK = (1,2,6,4,2) vagy 5 1 1 1 2 5 6 1 2 6 2 6 5 1 2 6 4 2 Hajnal Éva: AAO előadás 84
Leképzés ritka mátrixra Eljárás lekepez() int i, j, k = 0; ciklus i=1-től N ig ciklus j=1 től Míg ha(a[i,j]!= 0) akkor ++k; SOR[k] = i; OSZLOP[k] = j; ERTEK[k] = A[j]; Elágazás vége ciklus vége ciklus vége Eljárás vége Fordítva, amikor visszafelé keressük egy elem, pl. az A(ij)-t Eljárás keres(int i, int j) int l=1; ciklus amíg (sor[l]!= i OR OSZLOP[l]!= j) and l<k ) Ha l<k akkor eredmény= ERTEK[l] különben (SOR[l] > i) eredmény= 0 elágazás vége Ciklus vége Eljárás vége Hajnal Éva: AAO előadás 85
Feladat: Adjuk meg egy három x n es mátrixban tárolt ritka mátrix transzponáltját M=A[0,1], n=a[0,2], t=a[0,3] B[0,1]=n, B[0,2]=m, B[0,3]=t db=1 Ciklus sor=1 től n-ig ciklus p=1 től t-ig Ha A[p,2]=sor akkor B[db,1]=A[p,2], B[db,2]=A[p,1], B[db,3]=A[p,3] db=db+1 Elágazás vége ciklus vége Ciklus vége Hajnal Éva: AAO előadás 86
Verem, sor Speciális tömb adatszerkezet, az adat beírás és az olvasás/törlés helye korlátozott. Verem: LIFO Last In First Out Műveletei: push adatbeírás (ráhelyezés) Pop olvasás/törlés (leemelés) Top - tetőelem Sor: FIFO First In First Out Műveletei: sorból Qdelete Sorba - Qinsert Hajnal Éva: AAO előadás 87
Feladat verem, sor alkalmazására Szöveg megfordítása Szöveg szavainak megfordítása Szavak sorrendjének a megfordítása Ügyintézés modellezése Otp fiók várólista modellezése Hajnal Éva: AAO előadás 88
Teszt: Feladat verem, sor alkalmazására Készítsen algoritmust az alábbi feladatok megoldására Szöveg megfordítása Szöveg szavainak megfordítása Szavak sorrendjének a megfordítása Ügyintézés modellezése Otp fiók várólista modellezése Hajnal Éva: AAO előadás 89
Objektum Orientált paradigma A szoftver krízis a szoftverfejlesztés válsága, miszerint egy hagyományos módszer (strukturált programozás) már nem képes az igényeknek megfelelő, minőségi szoftver előállítására. Cél: Olcsó Jó minőségű szoftver Szoftver elemek újrafelhasználhatósága Szoftver fejlesztés csapatmunkában (design és kód különválasztása) Hajnal Éva: AAO előadás 90
Objektum definíció Elv: Legkisebb modul az objektum, melyben adatok és eljárások össze vannak zárva. Adata: neve Eljárás: Fajtája Testsúly hangot ad eszik osztály Kutya Objektumok, más néven példányok Bimbi (Kutya) Bukfenc (Kutya) Blöki (Kutya) Hajnal Éva: AAO előadás 91
Objektumok jellemzője Egységbe zárás (Encapsulation) Felelősség Zártság Osztályozás Polimorfizmus Öröklődés Futás alatti kötés Hajnal Éva: AAO előadás 92
Előzmények SIMULA67: Algol verzió, hajók modellezése objektumokkal 1969 Alan Kay egyetemista szakdolgozata az objektum orientált programozásról. 1970 Xerox Smalltalk az első tiszta objektumorientált nyelv 80-as évek: OO paradigma általánosan elfogadottá vált Hajnal Éva: AAO előadás 93
Programnyelvek csoportosítása Tiszta OO nyelv pl. C# - Programozás csak oo alapon képzelhető el. Minden komponens objektum. Feladat a saját osztályok elhelyezése a hierarchiában. Hibrid nyelvek pl. Turbo Pascal, C++ - kétféle paradigma mentén is elképzelhető a programozás. Objektum alapú nyelvek pl. Visual Basic, Javascript, PHP 4 Hajnal Éva: AAO előadás 94
Objektum Elv: Legkisebb modul az objektum, melyben adatok és eljárások össze vannak zárva. Objektumok jellemzője: Zártság : a mezők tárolják az információt, a metódusok kommunikálnak a külvilággal. Az osztály változóit csak a metódusokon keresztül változtathatjuk meg. Felelősség Polimorfizmus Osztályozás Öröklődés Futás alatti kötés Hajnal Éva: AAO előadás 95
UML feladata Egységesített modellező nyelv A program osztályainak és objektumainak megtervezését, és elemzését segítő modellező nyelv Jogilag is szabványos jelölésrendszer Grafikus nyelv, azaz a modellt diagramok segítségével ábrázolja Alkalmazható a vállalatok közötti információcsere eszközeként Nincs matematikailag bizonyítva a helyessége Hajnal Éva: AAO előadás 96
UML Unified Modeling Language 1.0 1997.01.13. Rumbaugh Booch Jacobsen Az Objektumorientált rendszer saját feladattal bíró, egymással kommunikáló objektumok összesége. Felhasználói interfész Kontroll Implementáció objektum konténer Információ hordozó Hajnal Éva: AAO előadás 97
UML diagramtípusok Osztálydiagram : Az objektumokat és az objektumok közötti kapcsolatokat jeleníti meg. Objektumdiagram: Egyedi objektumpéldányok kapcsolatának megjelenítése Állapotdiagram: az objektum időbeli viselkedését írja le. alszik figyel ugat eszik támad Ember gazda Kutya Hajnal Éva: AAO előadás 98
Kapcsolattípusok Asszociáció Öröklés Tartalmazási kapcsolat Hajnal Éva: AAO előadás 99
Osztály fogalma Az osztály: Névvel ellátott típus, ami az adattagokat és a rajtuk végzett műveleteket egységben kezeli. Class Kutya { private int lábszám; private int kg; public int Ugat(paraméterek) {kód} } adatta g Metódus Felület: műveletek összesége UML Osztály -lábszám int -kg int + Ugat() Hajnal Éva: AAO előadás 100
Adatok és metódusok láthatósága Alap láthatóság módosítószavak + publikus (public) - privát (private) # védett (protected) (internal protected internal C#) Hajnal Éva: AAO előadás 101
Tervezzünk programot, amely síkidomok kerületét, területét tudja kiszámítani Hajnal Éva: AAO előadás 102
Teszt Tervezzünk programot, amely különböző síkidomok kerületét, területét tudja kiszámítani. (Készítsük el az osztály és az objektum diagramot az UML szabvány szerint!) Tervezzünk programot, amely különböző irányba mozgó karaktereket tud kezelni. Hajnal Éva: AAO előadás 103
Játékprogramok A számítógép feladata Játék szimuláció Játék szereplő Hajnal Éva: AAO előadás 104
Backtrack algoritmus 8 királynő problémája Labirintus játékok Lefedési feladatok Hajnal Éva: AAO előadás 105
Backtrack algoritmus kezdetben d[] := 0 Eljárás bt(i) Ha i > 0 akkor d[i] := d[i] + 1 // adott szinten a következő döntés Ciklus amíg rossz(i) és d[i] még növelhető d[i] := d[i] + 1 Ciklus vége Ha nem rossz(i) // az i. szinten volt jó döntés akkor Ha megoldást találtunk akkor a megoldás kiírás/tárolása különben bt(i+1) // megyünk tovább a következő szintre Elágazás vége különben d[i] := 0 bt(i-1) // visszalépünk az előző döntési szintre Elágazás vége Elágazás vége Eljárás vége Hajnal Éva: AAO előadás 106
Eljárás bt(i) Ha i > 0 akkor d[i] := d[i] + 1 Ciklus amíg d[i]<=8 és rossz(i) d[i] := d[i] + 1 Ciklus vége Ha d[i] <= 8 akkor Ha i = 8 akkor KI( d[] ) különben bt(i+1) Elágazás vége különben d[i] := 0; bt(i-1); Elágazás vége Elágazás vége Eljárás vége 8 királynő megoldása Hajnal Éva: AAO előadás 107
rossz: egymás mellett Függvény rossz(i):logikai rossz := hamis Ciklus j := 1-től (i-1)-ig Ha (T[j]=T[i]) vagy (T[j]-j=T[i]-i) vagy (T[j]+j=T[i]+i) akkor rossz := igaz kiugrás a ciklusból Elágazás vége Ciklus vége Függvény vége Azonos főátlóban Azonos mellékátlóban Hajnal Éva: AAO előadás 108
Vizsga Írásbeli Elméleti kérdések az órák anyaga alapján Feladatok Min 50% Érdeklődőknek: http://prog.berzsenyi.hu:8080/prog/view/ http://www.hsin.hr/coci/ Hajnal Éva: AAO előadás 109
Vizsgafeladat példa A Sóhivatalban minden ügyintézőhöz naponta 1-10 új elintézendő akta érkezik, és minden ügyintéző naponta 1-10 ügyet old meg. Új ügyintézőt vesznek fel, aki úgy dolgozik, hogy a beérkező aktákat az asztalán egymás tetejére teszi. Először a legfelső aktával foglalkozik, majd veszi a következőt. (Mindig a kupac tetejéről.) Írjon algoritmust, amely verem adatszerkezettel kimutatást készít arról, hogy egy 10 napos ciklusban naponta mennyi ügyet dolgozott fel az ügyintéző, és a végén mennyi elintézetlen aktája maradt! A reggelente beérkező, valamint a napi elintézendő akták számát olvassa be. Az aktákat a beérkezés szerinti sorszámukkal tárolja a veremben! Az egy napon elintézett akták sorszámait írja ki a képernyőre, majd a 10. nap után az elintézetlen akták sorszámait is írja ki! A vermet megvalósító tömb legfeljebb 20 elemű legyen. Ha a verembe nem férnek be az új akták, akkor később kell őket betenni, ahogy a hely felszabadul. Ha viszont nincs annyi elintézetlen akta, amennyit fel kellene dolgozni egy napon, akkor aznap kevesebbet dolgozik az ügyintéző. A megoldáshoz csak egy tömböt használhat! Hajnal Éva: AAO előadás 110