Programozási Paradigmák. és Technikák

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Programozási Paradigmák. és Technikák"

Átírás

1 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 1

2 Programozási Paradigmák Láncolt Lista Generikus osztályok Erdélyi Krisztina Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 2

3 Generikus Osztályok Generikus osztályok Generikus metódusok Megszorítások Statikus tagok Öröklés A generikus osztályok működése a.net-ben szabo.zsolt@nik.uni-obuda.hu 3

4 Bevezetés feladat Cél: személyeket tárolóhalmaz létrehozása, egy elemet egyszer tartalmazhat, a lehető legáltalánosabb módon Milyen elemekből álljon a halmaz? Személy akkor a kutya-klubhoz át kell írni A személy és a kutya őse ez biztos, hogy elég általános? Object(mindennek az őse) -ez lehet megoldás ArrayList,.NET1, csak object-et tárol, állandó castolás A típust adjuk meg paraméterként, így elég a deklarációban megadni a konkrét típust Vizsgáljuk meg ezt közelebbről! szabo.zsolt@nik.uni-obuda.hu 4

5 Generics Más néven sablon vagy template Paraméterezett típus vagy metódus Minden egyes paraméter egy még meg nem határozott típus helye Az osztály tervezésekor csak T néven hivatkozok a típusra, csak az osztály példányosításakor definiálom, hogy ez a T pontosan mi szabo.zsolt@nik.uni-obuda.hu 5

6 Paraméterezett típusok A paraméter a típus fejrészében helyezkedik el class MyGenericClass<T> { } Deklarációnál és példányosításkor az aktuális típus kerül a paraméter helyére MyGenericClass<int>mgcINT= new MyGenericClass<int>(); A generic-ek tipikusan gyűjtemények létrehozásához valók, mivel a gyűjtemények több típussal is használhatók szabo.zsolt@nik.uni-obuda.hu 6

7 Generikus gyűjtemények ArrayList object típust tárol, állandó castolás, elavult List<T>: Add(), Insert(), Remove(), RemoveAt(), Reverse(), [], Clear(), Contains(), Count Queue<T>: Enqueue(), Dequeue(), Peek(), Clear(), Contains(), Count Stack<T>: Push(), Pop(), Peek(), Clear(), Contains(), Count Lehetőség van több típus használatára: class valami<t,u> { } Dictionary<T, U>: Add(), Remove(), TryGetValue(), Keys, Values, Clear(), ContainsKey(), ContainsValue(), Count szabo.zsolt@nik.uni-obuda.hu 7

8 Saját generikus osztály létrehozása 8

9 Generikus osztály használata 9

10 Paraméterezett típus inicializálása object valtozo=null; int valtozo=0; string valtozo= ; T valtozo =???? Nem tudható, hogy érték vagy referencia típusú-e a paraméter Megoldás: default expression Referenciánál null-t ad vissza Érték típusnál bitenkénti nullát T valtozo = default(t); szabo.zsolt@nik.uni-obuda.hu 10

11 Megszorítások Lefordulnak a következő kódok? Ha nem, akkor mi a megoldás? Csak annyit tudhatunk a T típusról biztosan, hogy a System.Object-ből származik Ezért ennek megfelelően viselkedik szabo.zsolt@nik.uni-obuda.hu 11

12 Interfész megszorítás class MyClass2<T> { public void Iterate(T data) { foreach (object item in data) { Console.WriteLine(item); } } } class MyClass2<T> where T : IEnumerable<T>{ public void Iterate(T data) { foreach (object item in data) { Console.WriteLine(item); } } } OK Nem biztos, hogy T felsorolható! (A foreach ciklus akkor működik saját típuson, ha a saját típus megvalósítja az IEnumerable interfészt, ld. később) (Azonos módon interface megszorítással lehet azt garantálni, hogy a T típusnak van egy adott metódusa) szabo.zsolt@nik.uni-obuda.hu 12

13 Konstruktor megszorítás class MyClass<T> { T obj = new T(); } Nem biztos, hogy T-nek van alapértelmezett konstruktora! class MyClass<T> where T:new() { T obj = new T(); } OK szabo.zsolt@nik.uni-obuda.hu 13

14 Művelet megszorítás??? class Arithmetic<T>{ public T Cubed(T number){ return number * number * number; } } class Arithmetic<T> where T : System.Int32{ public T Cubed(T number){ return number * number * number; } } Nem biztos, hogy T-n értelmezett a szorzás! Érték és primitív típusok nem lehetnek megszorítások! Súlyos korlátja a generics használatának, hogy standard operátorok az érték típusokkal nem használhatók. szabo.zsolt@nik.uni-obuda.hu 14

15 A Generic korlátja class Program2 { public T Min<T>(T a, T b) where T : IComparable<T> { if (a<b) return a; else return b; } } class Program { public T Min<T>(T a, T b) where T : IComparable<T> { if (a.compareto(b)<0) return a; else return b; } } A standard operátorok így sem használhatók. szabo.zsolt@nik.uni-obuda.hu 15

16 Megszorítások összefoglalása A megszorítások a típus paraméterektől elvárt viselkedést írják le A where kulcsszóval vezetjük be Típusnál és metódusnál is használhatók Fajtáik: Leszármazott (where T : Személy) Interfész (where T: IEnumerable<T>) Érték típus (where T: struct) Referencia típus (where T: class) Konstruktor (where T: new()) Az alábbi típusok nem lehetnek megszorításban: Lezárt osztályok Primitív típusok System.Array System.Delegate System.Enum System.ValueType szabo.zsolt@nik.uni-obuda.hu 16

17 Generikus metódus Tartozhat generikus vagy nem generikus típushoz Azért, mert az osztály generikus, a metódus még nem A metódus generikus, ha saját típusparamétere(i) van(nak) A típusparaméter megjelenhet visszatérési értékként vagy a paraméterlistában szabo.zsolt@nik.uni-obuda.hu 17

18 Generikus metódusok meghívása A metódus meghívásakor a paraméterek típusa adja meg a típusparaméter aktuális értékét: int i=min(2, 3); //egészek float f=min(2.0, 3.0); //valósak Két azonos nevű és szignatúrájú metódus nem lehet És ha T=int? Ellentmondás esetén a nem-generikus eljárás hívódik meg Ha két generikus metódus van különbözőgenerikus paraméterrel pl. Method(T arg), Method(U arg), és T és U konkrétan ugyanaz, akkor a metódus meghívásánál jelez hibát. szabo.zsolt@nik.uni-obuda.hu 18

19 Statigus tagok generikus osztályokban class MyGenericClass<T> { private static int counter = 0; public MyGenericClass() { counter++; } public static void Count() { Console.WriteLine(counter); } } szabo.zsolt@nik.uni-obuda.hu 19

20 Statikus tagok generikus osztályokban A statikus tagok eléréséhez be kell helyettesíteni egy konkrét típust a paraméterbe MyGenericClass<int>.Count(); Különbözőbehelyettesített típusokhoz különbözőstatikus tagok tartoznak A statikus konstruktor implicit meghívódik, és a behelyettesített típusnak megfelelően inicializálja a statikus mezőket szabo.zsolt@nik.uni-obuda.hu 20

21 Generikus osztályok az öröklésben Generikus osztály lehet őse generikus és nem generikus osztálynak Generikus osztály származhat generikus vagy nem generikus osztályból De mindkét állítás csak bizonyos esetekben igaz! Az utód példányosításakor a típusparaméterek értékét mindenképpen meg kell határozni Ha Derived<T> : BaseGeneric<T>, és newderived<int>() a T típus mindkét osztályban int lesz. Ha Derived : BaseGeneric<T>, és newderived() az ős T típusparamétere nincs definiálva, NEM MEGENGEDETT Ha Derived<T> : BaseGeneric<U>, és newderived<int>() az U típus nincs definiálva az ősosztályban, NEM MEGENGEDETT szabo.zsolt@nik.uni-obuda.hu 21

22 Generikus osztályok az öröklésben Melyik eset lehetséges? 22

23 Generikus osztályok az öröklésben és a.net-ben A típusra vonatkozóős osztálybeli megszorításokat az utódosztályban meg kell ismételni Az utódosztály tartalmazhat további megszorításokat Nem nyelvspecifikus, minden felügyelt nyelvben elérhető A köztes kódra valófordítás során metaadatok és a generic-ekre vonatkozómsil kód áll elő, a JIT fordítás során történik meg a konkrét típusok behelyettesítése szabo.zsolt@nik.uni-obuda.hu 23

24 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 24

25 IEnumerable / IEnumerator A foreach ciklus akkor működik saját típuson, ha a saját típus megvalósítja a IEnumerable<T> interfészt Ez az interfész előírja a GetEnumerator() eljárást, ami visszaad egy olyan objektumpéldányt, ami megvalósítja az IEnumerator<T> interfészt Az IEnumerator<T> előírja a következőműveleteket: Aktuális elem olvasása (Current), következőelemre mozgás (MoveNext()), visszaállás az első előtti elemre (Reset()) lista bejárása Mindegyik interfész előírja a nemgenerikus (object) változatot is Saját enumerator helyett bizonyos esetben meglévőenumeratort is használhatunk, ha olyan struktúrába rendezhetőek az adatok, ahol ez elérhető(tömb / List<T>) szabo.zsolt@nik.uni-obuda.hu 25

26 Láncolt Lista Egyszeresen láncolt, ciklikus, kétszeresen láncolt listák (ld. Ea.) Strázsa-elemes, rendezett láncolt listák (ld. Ea.) Órai feladat: telefonkönyv-bejegyzések (név, cím, telefonszám) egyirányú, nem rendezett láncolt listába fejtése ZH: egyéb láncolás is lehetséges 26

27 A fejlesztés menete 1. Generikus osztályként megtervezzük a ListaElem<T> osztályt, amely egy T típusúreferenciát tárol, valamint egy referenciát a következő listaelemre 2. Generikus osztályként megtervezzük a Lista<T> osztályt, amely tárol egy referenciát az elsőlistaelemre, emellett itt implementáljuk az eljárásokat is: a) public void Beszúr(T elem) b) public T Keres(T mitkeres, out bool talalt) c) public bool Töröl(T elem) d) public bool Töröl(int index) e) Cél: a lista osztályt be lehessen járni foreach ciklussal 3. A foreach ciklus működése miatt tervezünk egy saját felsorolót 4. Megtervezzük a bejegyzés osztályt, amit ténylegesen tárolni akarunk 5. Tesztprogram írása szabo.zsolt@nik.uni-obuda.hu 27

28 ListaElem<T> T típusúadatot tárol + egy referenciát a következőelemre Tulajdonságok, konstruktor, ToString() Lista<T> + ListaEnumerator<T> ListaElem<T> Elso; + konstruktor? public void Beszúr(T elem) PPT előadás public T Keres(T mitkeres, out bool talalt) PPT előadás, p.elem.equals(mitkeres) public bool Töröl(T elem) PPT előadás, ugyanúgy Equals() public bool Töröl(int index) index szerinti törlés Cél: a lista osztályt be lehessen járni foreach ciklussal saját felsoroló készítése: Current, MoveNext(), Reset() szabo.zsolt@nik.uni-obuda.hu 28

29 Telefonkönyv bejegyzés Név + Cím + Telefonszám Konstruktor + ToString() Speciális Equals() : rész-egyenlőség visszaadott értéke is true Tesztprogram Lista<Bejegyzes> telefonszámok = new Lista<Bejegyzes>(); Bejegyzes keresett, talalt; bool van; szabo.zsolt@nik.uni-obuda.hu 29

30 Tesztprogram 30

31 Tesztprogram 31

32 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 32

33 Bináris keresőfa 33

34 A fejlesztés menete 1. Generikus osztályként megtervezzük a csucs<t> osztályt, amely egy T típusúreferenciát tárol, valamint egy referenciát a jobb és a bal oldali gyermek-elemre 2. Generikus osztályként megtervezzük a fa<t> osztályt, amely tárol egy referenciát a gyökérelemre, valamint azt, hogy milyen bejárást akarunk használni (szélességi, mélységi, inorder, preorder, postorder), emellett itt implementáljuk az eljárásokat is: a) public bool bennevan(t elem) b) public void beszur(t ujelem) c) public bool torol(t x) d) Cél: a fát be lehessen járni foreach ciklussal 3. A foreach ciklus működéséhez az éppen kiválasztott bejárást hívjuk meg, és a produkált lista felsorolóját ( List<T>.GetEnumerator() ) használjuk fel 4. Tesztprogram írása, amiben a fa számokat tárol szabo.zsolt@nik.uni-obuda.hu 34

35 Fejlesztési sajátosságok Szélességi bejárás sor, mélységi bejárás verem adatszerkezettel InOrder/PreOrder/PostOrder bejárás rekurzióval Az előadáson bemutatott eljárások egyik paramétere az aktuális csúcs (pl. Függvény Beszúrás(címszerint p, újkulcs) ), és az első meghíváskor a p paraméter értéke a gyökér OOP megközelítésben a publikus eljárásainkban az aktuális csúcs nem szerepel, pl. public void beszur(t ujelem) A publikus eljárás nem-publikus eljárásra hivatkozik, pl. private priv_beszur(ref FRoot, ujelem) Fontos kérdés: miért kell a paraméternél ref kulcsszó, amikor már úgyis referencia típus a csucs<t>? OOP tárgy, paraméter-átadási módok szabo.zsolt@nik.uni-obuda.hu 35

36 Ref.típusok cím szerinti paraméterátadása static void tombkez1(ref int[] arr) { arr[1] = 42; } static void tombkez2(ref int[] arr) { arr = new int[3] { 23, 23, 23 }; } ÓE-NIK,

37 Ref.típusok cím szerinti paraméterátadása static void Main(string[] args) { int[] t = { 3, 4, 5 }; tombkez1(ref t); tombkez2(ref t); } Híváskor a változócímérőlmásolat képződik, és a CÍMkerül át paraméterként a hívott eljárásokba Referenciára mutató referencia A hívott eljárásokban ezt a változót és a hivatkozott memóriaterületet is lehet módosítani ÓE-NIK,

38 Ref.típusok cím szerinti paraméterátadása Memória cím1 t cím2 cím int[]t= {3, 4, 5}; ÓE-NIK,

39 Ref.típusok cím szerinti paraméterátadása Memória cím1 t cím2 cím3 arr cím1 cím int[]t= {3, 4, 5}; tombkez1(t); ÓE-NIK,

40 Ref.típusok cím szerinti paraméterátadása Memória cím1 t cím2 cím3 arr cím1 cím int[]t= {3, 4, 5}; tombkez1(t); arr[1]=42; Teljesen mindegy, hogy hány referencián keresztül van az értékadás, mindig a megfelelőértékre történik a hivatkozás! ÓE-NIK,

41 Ref.típusok cím szerinti paraméterátadása Memória cím1 t cím2 cím3 arr cím1 cím cím int[]t= {3, 4, 5}; tombkez1(t); arr[1]=42; tombkez2(t); arr=new int[3] { 23, 23, 23}; ÓE-NIK,

42 Ref.típusok cím szerinti paraméterátadása Memória cím1 t cím4 cím3 arr cím1 cím cím int[]t= {3, 4, 5}; tombkez1(t); arr[1]=42; tombkez2(t); arr=new int[3] { 23, 23, 23}; A paraméterül adott változót cseréltem le ÓE-NIK,

43 Fejlesztési sajátosságok Fontos kérdés: miért kell a paraméternél a ref kulcsszó, amikor már úgyis referencia típus a csucs<t>? Válasz: hiába referencia típus, a cél az, hogy a hívott eljárásból a fa szerkezetét tudjam módosítani. Ehhez nem csak a paraméterül adott csúcs adatait kell módosítanom, hanem törlésnél/beszúrásnál közvetlenül a paraméterül adott csúcsot kell cserélni ehhez kell a referencia típus referencia szerinti paraméterátadása A csúcs osztályban a gyermek-elemekhez ne csináljuk tulajdonságot, maradjanak publikus adattagok ez nem szép megoldás, de ha a gyermekcsúcsokat referenciaként akarom továbbadni, akkor erre szükség van szabo.zsolt@nik.uni-obuda.hu 43

44 A fejlesztés menete 1. Generikus osztályként megtervezzük a csucs<t> osztályt, amely egy T típusúreferenciát tárol, valamint egy referenciát a jobb és a bal oldali gyermek-elemre 2. Generikus osztályként megtervezzük a fa<t> osztályt, amely tárol egy referenciát a gyökérelemre, valamint azt, hogy milyen bejárást akarunk használni (szélességi, mélységi, inorder, preorder, postorder), emellett itt implementáljuk az eljárásokat is: a) public bool bennevan(t elem) b) public void beszur(t ujelem) c) public bool torol(t x) d) Cél: a fát be lehessen járni foreach ciklussal 3. A foreach ciklus működéséhez az éppen kiválasztott bejárást hívjuk meg, és a produkált lista felsorolóját ( List<T>.GetEnumerator() ) használjuk fel 4. Tesztprogram írása, amiben a fa számokat tárol szabo.zsolt@nik.uni-obuda.hu 44

45 Tesztprogram I. 45

46 Tesztprogram II. 46

47 Tesztprogram III. 47

48 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 48

49 Gráfok & Dijkstra algoritmus Gráf: csomópontok és a csomópontokat összekötő élek halmaza Jelenleg: irányítatlan, súlyozott gráf Cél: az 1. csúcsból meghatározni a legrövidebb utat az 5. csúcshoz Dijkstra algoritmus: meghatározza valamely kezdőcsúcsból az összes többi csúcsba vezető legkisebb súlyú utat Mohó algoritmus szabo.zsolt@nik.uni-obuda.hu 49

50 Dijkstra algoritmus Tegyük fel, hogy a gráf tárolása és a lényeges műveletek már készen vannak Két tömböt használunk, mindegyik tömb ugyanannyi elemű, mint ahány csúcs van a gráfban Az int típusúelozocsucstömbben tároljuk a kiindulócsúcsból az egyes csúcsokhoz vezető legrövidebb útnál a csúcsot megelőző csúcs sorszámát A double típusúosszsulytömbben tároljuk a kiindulócsúcsból az egyes csúcsokhoz vezető jelenleg ismert legrövidebb út összsúlyát Az csúcsokat két halmazra kell osztani: függőben lévőcsúcsok és fix útvonalúcsúcsok. Mi ezt úgy oldjuk meg, hogy az i. csúcs még függőben van, ha OsszSuly[i]<0 Jelenlegi kezdőcsúcs: #1! szabo.zsolt@nik.uni-obuda.hu 50

51 Inicializálás Kell: kiindulócsúcs (Honnan), innen számoljuk a legrövidebb utat az összes többi csúcshoz Minden I csúcs távolsága legyen az I és a Honnan csúcs távolságának negatív értéke: OsszSuly tömb (a negatív távolság azt jelzi, hogy a csúcs még nincs kész) (a Honnan-nal nem szomszédos csúcsoknál ez double.negativeinfinity) Minden I csúcsra jelezzük, hogy a Honann I útvonalban az I csúcs előtti csúcs a Honnan (közvetlen él): ElozoCsucs tömb (ez a Honnan csúccsal szomszédos csúcsokra tényleg jó útvonalat definiál, a többi csúcsnál nincs olyan él, szóval ez biztos változni fog) A Honnan csúcs előtti csúcs legyen -1, ezzel jelezzük, hogy a Honnan a kiinduló-csúcs szabo.zsolt@nik.uni-obuda.hu 51

52 Kiinduló állapot IDX ElozoCsucs OsszSuly szabo.zsolt@nik.uni-obuda.hu 52

53 Algoritmus Ciklus, amíg van negatív súly (vagyis: amíg létezik nem-kész csúcs) 1. Minimum=az abszolút értékben legkisebb negatív súly sorszáma; 2. OsszSuly[minimum] = -OsszSuly[minimum]; 3. Minden nem-kész (vagyis negatív összsúlyú) csúcsra megnézzük, hogy a jelenlegi OsszSuly[i] súlynál abszolút értékben kisebb súlyt kapunk e, ha nem az ElozoCsucs[i] eddigi előzőcsúcson, hanem a Minimum-csúcson keresztül közelítjük meg. Ha igen, akkor ezzel frissítjük az OsszSuly[i]-t, és ElozoCsucs[i]=Minimum; Ciklus vége szabo.zsolt@nik.uni-obuda.hu 53

54 1. iteráció IDX ElozoCsucs OsszSuly A LEGKISEBB! (Abszolút értékben) szabo.zsolt@nik.uni-obuda.hu 54

55 2. iteráció IDX ElozoCsucs OsszSuly A LEGKISEBB! (Abszolút értékben) szabo.zsolt@nik.uni-obuda.hu 55

56 3. iteráció IDX ElozoCsucs OsszSuly A LEGKISEBB! (Abszolút értékben) szabo.zsolt@nik.uni-obuda.hu 56

57 4. iteráció IDX ElozoCsucs OsszSuly A LEGKISEBB! (Abszolút értékben) szabo.zsolt@nik.uni-obuda.hu 57

58 Végállapot IDX ElozoCsucs OsszSuly Az útvonalak nem Bármelyik csúcs elérhető feltétlenül alkotnak fát a kezdőcsúcsból indulva vagy egyenest, ez egyedi szabo.zsolt@nik.uni-obuda.hu 58

59 Fejlesztés Gráf osztály: int FPontok; double[,] FSulyok; string[] FCimkek; public Graf(int n) public void UjCimke(int n, string cimke) public void UjEl(int n, int m, double suly) public int GetPont(string cimke) public double GetSuly(int n, int m) Dijkstra algoritmushoz szükséges eljárások: private bool MinKer(double[] d, out int min) Visszaadja, hogy talált e negatív súlyt, és ha talált, akkor ezek közül melyik az abszolút értékben a legkisebb public List<int> Utvonal(int honnan, int hova) Itt először legeneráljuk az ElozoCsucs + OsszSuly tömböket, aztán iterálunk, majd legeneráljuk a specifikus utat szabo.zsolt@nik.uni-obuda.hu 59

60 Tesztelés (Ctrl+C, Ctrl+V) Graf g; g = new Graf(5); g.ujcimke(0, "#1"); g.ujcimke(1, "#2"); g.ujcimke(2, "#3"); g.ujcimke(3, "#4"); g.ujcimke(4, "#5"); g.ujel(0, 1, 10); g.ujel(0, 3, 5); g.ujel(1, 3, 3); g.ujel(1, 2, 1); g.ujel(2, 3, 9); g.ujel(3, 4, 11); g.ujel(2, 4, 1); utvonal(g, g.getpont("#1"), g.getpont("#5")); szabo.zsolt@nik.uni-obuda.hu 60

61 Tesztelés2 (Ctrl+C, Ctrl+V) g = new Graf(20); g.ujcimke(0, "Baja"); g.ujcimke(1, "Budapest"); g.ujcimke(2, "Debrecen"); g.ujcimke(3, "Eger"); g.ujcimke(4, "Esztergom"); g.ujcimke(5, "Győr"); g.ujcimke(6, "Gyula"); g.ujcimke(7, "Kaposvár"); g.ujcimke(8, "Kecskemét"); g.ujcimke(9, "Miskolc"); g.ujcimke(10, "Nyíregyháza"); g.ujcimke(11, "Pécs"); g.ujcimke(12, "Sopron"); g.ujcimke(13, "Szeged"); g.ujcimke(14, "Székesfehérvár"); g.ujcimke(15, "Szolnok"); g.ujcimke(16, "Szombathely"); g.ujcimke(17, "Tatabánya"); g.ujcimke(18, "Veszprém"); g.ujcimke(19, "Zalaegerszeg"); g.ujel(0, 1, 192.5); g.ujel(0, 6, 165.7); g.ujel(0, 13, 93.1); g.ujel(1, 2, 205.9); g.ujel(1, 3, 240.3); g.ujel(1, 8, 81.2); g.ujel(1, 11, 197.8); g.ujel(1, 18, 126.4); g.ujel(2, 3, 35.6); g.ujel(2, 6, 93.1); g.ujel(3, 6, 104.3); g.ujel(4, 7, 152.4); g.ujel(4, 16, 133.8); g.ujel(4, 17, 26.1); g.ujel(5, 12, 33.4); g.ujel(5, 16, 110.5); g.ujel(6, 15, 72.3); g.ujel(7, 11, 65.8); g.ujel(7, 14, 99.9); g.ujel(8, 9, 137.5); g.ujel(8, 13, 91.8); g.ujel(8, 15, 52.3); g.ujel(9, 1, 210.4); g.ujel(9, 6, 141.0); g.ujel(9, 10, 62.7); g.ujel(10, 2, 216.8); g.ujel(10, 15, 44.6); g.ujel(11, 0, 76.8); g.ujel(11, 5, 258.2); g.ujel(11, 14, 116.4); g.ujel(11, 19, 145.0); g.ujel(12, 14, 91.5); g.ujel(12, 17, 60.7); g.ujel(13, 1, 158.2); g.ujel(13, 15, 56.3); g.ujel(14, 1, 62.1); g.ujel(14, 5, 97.4); g.ujel(14, 17, 41.7); g.ujel(15, 1, 109.8); g.ujel(15, 3, 68.3); g.ujel(16, 17, 127.5); g.ujel(16, 19, 78.2); g.ujel(17, 18, 69.1); g.ujel(18, 11, 137.6); g.ujel(18, 14, 46.3); g.ujel(19, 1, 278.5); g.ujel(19, 4, 207.2); g.ujel(19, 6, 377.9); g.ujel(19, 12, 92.7); szabo.zsolt@nik.uni-obuda.hu 61 utvonal(g, g.getpont("szombathely"), g.getpont("szeged"));

62 Tesztelés 62

63 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 63

64 Kruskal algoritmus Fa: körmentes (aciklikus), összefüggő gráf Feszítőfa: a gráf összes csúcsát tartalmazófa, amelynek élei a gráf éleinek részhalmazát alkotják, n csúcs esetén n-1 élből áll Minimális feszítőfa: a feszítőfák közül a legkisebb összsúlyú szabo.zsolt@nik.uni-obuda.hu 64

65 "Nem alakul ki kör"? Útvonalkereséssel (lassabb, talán könnyebben érthető) : Egy listába berakjuk az X csúcsból a feszítőfa meglévő élein keresztül elérhető összes csúcsot (tetszőleges bejárással: szélességi/mélységi). Ha a listában benne van az Y, akkor az X csúcsból a feszítőfa élein keresztül már elérhető az Y, vagyis X és Y egy komponensben van nem adható hozzá a feszítőfához az XY él, mert az kört hozna létre Komponensek használatával (ezt fogjuk implementálni) : Minden csúcshoz komponens-azonosítót rendelünk. Az él nem hoz létre kört, ha külön komponensben lévő csúcsokat köt össze: X és Y csúcs összeköthető éllel, ha a komponens-azonosítójuk különböző. Ezután minden csúcshoz azonos komponens-azonosítót kell rendelni, ami az X vagy az Y csúcs komponensében volt. szabo.zsolt@nik.uni-obuda.hu 65

66 Kruskal algoritmus példa 66

67 Kruskal algoritmus példa 67

68 Kruskal algoritmus példa 68

69 Kruskal algoritmus példa 69

70 Kruskal algoritmus példa 70

71 Kruskal algoritmus példa 71

72 Kruskal algoritmus példa 72

73 Kruskal algoritmus példa 73

74 Kruskal algoritmus megoldási elv 1. Definiáljuk a komponensektömböt, ahol komponensek[i] az i. csúcs komponens-azonosítóját jelzi. Kezdetben minden tömbelem egyedi [0..X] nincs él a feszítőfában 2. double FSulyok[,] List<GrafEl> Elek (GrafEl = {kezdőpont, végpont, súly}) 3. GrafEl rendezése súly szerint növekvő sorrendbe 4. Ciklus, amíg nincs kész a feszítőfa és nem fogynak el az élek a) Akt = sorrendben a következőél, ahol a kezdőpont és a végpont különböző komponensben van b) Ha van ilyen él, akkor az él hozzáadása a feszítőfához c) Ha van ilyen él, akkor az él kezdőpontjának és végpontjának a komponenseit egyesíteni kell 5. public List<GrafEl> Kruskal() szabo.zsolt@nik.uni-obuda.hu 74

75 Tesztelés (Ctrl+C, Ctrl+V) g = new Graf(8); g.ujcimke(0, "#1"); g.ujcimke(1, "#2"); g.ujcimke(2, "#3"); g.ujcimke(3, "#4"); g.ujcimke(4, "#5"); g.ujcimke(5, "#6"); g.ujcimke(6, "#7"); g.ujcimke(7, "#8"); g.ujel(g.getpont("#1"), g.getpont("#2"), 1); g.ujel(g.getpont("#1"), g.getpont("#6"), 3); g.ujel(g.getpont("#2"), g.getpont("#6"), 4); g.ujel(g.getpont("#2"), g.getpont("#3"), 2); g.ujel(g.getpont("#2"), g.getpont("#7"), 5); g.ujel(g.getpont("#6"), g.getpont("#7"), 8); g.ujel(g.getpont("#3"), g.getpont("#7"), 6); g.ujel(g.getpont("#3"), g.getpont("#4"), 4); g.ujel(g.getpont("#4"), g.getpont("#7"), 7); g.ujel(g.getpont("#7"), g.getpont("#8"), 1); g.ujel(g.getpont("#4"), g.getpont("#8"), 6); g.ujel(g.getpont("#4"), g.getpont("#5"), 7); g.ujel(g.getpont("#5"), g.getpont("#8"), 8); kruskal(g); szabo.zsolt@nik.uni-obuda.hu 75

76 Tesztelés 76

77 Programozási Paradigmák Láncolt Lista Generikus osztályok Láncolt Lista megvalósítása Bináris keresőfa (BST) BST megvalósítása Gráfok Dijkstra algoritmus Kruskal algoritmus és Technikák 77

78

79

80 Képek forrásai (megjegyzés: a fenti oldal nagyon jó, de kicsit más a BST, mint az előadáson ismertetett: törlés-c esetnél (amikor mindkét gyermekeleme létezik a törlendőelemnek) nem a bal oldali részfa legjobboldalibb elemét, hanem a jobb oldali részfa legbaloldalibb elemét használja) ml szabo.zsolt@nik.uni-obuda.hu 80

Generikus Típusok, Kollekciók

Generikus Típusok, Kollekciók Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections

Részletesebben

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek) Láncolt lista Bináris keresőfa Gráf Hasító táblázat Programozás II. labor 2. rész (Adatszerkezetek) Programozás II. Láncolt lista Generikus típusok Láncolt lista megvalósítása Bináris keresőfa Bejáró tervezési

Részletesebben

.Net adatstruktúrák. Készítette: Major Péter

.Net adatstruktúrák. Készítette: Major Péter .Net adatstruktúrák Készítette: Major Péter Adatstruktúrák általában A.Net-ben számos nyelvvel ellentétben nem kell bajlódnunk a változó hosszúságú tömbök, listák, sorok stb. implementálásával, mert ezek

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Elemi adatszerkezetek

Elemi adatszerkezetek 2017/12/16 17:22 1/18 Elemi adatszerkezetek < Programozás Elemi adatszerkezetek Szerző: Sallai András Copyright Sallai András, 2011, 2014 Licenc: GNU Free Documentation License 1.3 Web: http://szit.hu

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor Gráfok 2. Legrövidebb utak, feszítőfák előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor Óbudai Egyetem,Neumann János Informatikai Kar Legrövidebb utak keresése Minimális feszítőfa keresése Gráfok 2

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

Programozás II. labor

Programozás II. labor Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés

Részletesebben

C# Zero.4 Introducing Visual C# 2.0

C# Zero.4 Introducing Visual C# 2.0 Session Code: N/A C# Zero.4 Introducing Visual C# 2.0 Fülöp Dávid MCT, MCPD david.fulop@live.com Témák Mik a problémák a nyelvvel? Hol segít a C# 2.0? Fejlesztett tulajdonságok Statikus és részleges osztályok

Részletesebben

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek Tömb Ugyanolyan típusú elemeket tárol A mérete előre definiált kell legyen és nem lehet megváltoztatni futás során Legyen n a tömb mérete. Ekkor:

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Generikus osztályok Gyűjtemények Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Generikus osztályok Javaban az UML paraméteres osztályainak a generikus (sablon) osztályok felelnek

Részletesebben

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem A számítástudomány alapjai Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem Bináris keresőfa, kupac Katona Gyula Y. (BME SZIT) A számítástudomány

Részletesebben

Objektumorientált Programozás VI.

Objektumorientált Programozás VI. Objektumorientált Programozás Metódusok Paraméterek átadása Programozási tételek Feladatok VI. ÓE-NIK, 2011 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18 C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi

Részletesebben

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon 1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (

Részletesebben

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 33 IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív

Részletesebben

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

Generikus osztályok, gyűjtemények és algoritmusok Programozási, gyűjtemények és algoritmusok bejárása Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 bejárása 2 bejárása 2 Java-ban és UML-ben bejárása Az UML-beli paraméteres osztályok a Java

Részletesebben

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. 5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus. Optimalis feszítőfák Egy összefüggő, irányítatlan

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

Adatszerkezetek 7a. Dr. IványiPéter

Adatszerkezetek 7a. Dr. IványiPéter Adatszerkezetek 7a. Dr. IványiPéter 1 Fák Fákat akkor használunk, ha az adatok között valamilyen alá- és fölérendeltség van. Pl. könyvtárszerkezet gyökér () Nincsennek hurkok!!! 2 Bináris fák Azokat a

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás Programozás BMEKOKAA146 Dr. Bécsi Tamás 5. előadás Tömbök átméretezése public static void Resize( ref T[] array, int newsize ) Példa: int[] a=new int[20]; Array.Resize(ref a, 22); 2016. 10. 19.

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok

Részletesebben

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

Részletesebben

Web-technológia PHP-vel

Web-technológia PHP-vel Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request

Részletesebben

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani Mi a legabsztraktabb típus a JAVA-ban? Object Mikor preferált interface-ek használata a konkrét típusok helyett? Ha egy osztály több interfacet is használhasson, vagy ha fvek implementálását a az osztályra

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

C# osztályok. Krizsán Zoltán

C# osztályok. Krizsán Zoltán C# osztályok Krizsán Zoltán Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC

Részletesebben

Programozási nyelvek II.: JAVA, 3. gyakorlat

Programozási nyelvek II.: JAVA, 3. gyakorlat Programozási nyelvek II.: JAVA, 3. gyakorlat 2017. szeptember 25-29. 2017. szeptember 25-29. Programozási nyelvek II.: JAVA, 3. gyakorlat 1 / 50 A 3. gyakorlat tematikája Osztályok deníciója Láthatósági

Részletesebben

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime? Ugrólisták Ugrólisták Ugrólisták Ugrólisták RSL Insert Example insert(22) with 3 flips 13 8 29 20 10 23 19 11 2 13 22 8 29 20 10 23 19 11 2 Runtime? Ugrólisták Empirical analysis http://www.inf.u-szeged.hu/~tnemeth/alga2/eloadasok/skiplists.pdf

Részletesebben

Programozás I. Első ZH segédlet

Programozás I. Első ZH segédlet Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Collections. Összetett adatstruktúrák

Collections. Összetett adatstruktúrák Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net

Bánsághi Anna anna.bansaghi@mamikon.net ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök Programozás alapjai II. (8. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT Speciális adatszerkezetek A helyes adatábrázolás választása, a helyes adatszerkezet

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2010. január 8. Bevezet El z órák anyagainak áttekintése Ismétlés Adatszerkezetek osztályozása Sor, Verem, Lengyelforma Statikus, tömbös reprezentáció Dinamikus, láncolt reprezentáció Láncolt lista Lassú

Részletesebben

BME MOGI Gépészeti informatika 8.

BME MOGI Gépészeti informatika 8. BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:

Részletesebben

Programozási Paradigmák és Technikák

Programozási Paradigmák és Technikák Programozási Paradigmák és Technikák Öröklődés Interfészek Kivételkezelés Rekurzió Eseménykezelés Programozási Paradigmák és Technikák Öröklődés Öröklődés a C# nyelvben Öröklődés feladatok Gyakorló feladatok

Részletesebben

OOP: Java 8.Gy: Gyakorlás

OOP: Java 8.Gy: Gyakorlás OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét

Részletesebben

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 18. 2. El adás Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java 11.gyakorlat Operációsrendszertől függő tulajdonságok PATH elválasztó Unix ":" Windows ";" final String PATH_SEPARATOR = File.pathSeparator; Ugyanaz, csak karakterkent final char

Részletesebben

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

Részletesebben

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmusok és adatszerkezetek gyakorlat 07 Algoritmusok és adatszerkezetek gyakorlat 0 Keresőfák Fák Fa: összefüggő, körmentes gráf, melyre igaz, hogy: - (Általában) egy gyökér csúcsa van, melynek 0 vagy több részfája van - Pontosan egy út vezet

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Öröklés és Polimorfizmus

Öröklés és Polimorfizmus Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal

Részletesebben

Programozás alapjai II. (7. ea) C++

Programozás alapjai II. (7. ea) C++ Programozás alapjai II. (7. ea) C++ Kiegészítő anyag: speciális adatszerkezetek Szeberényi Imre BME IIT M Ű E G Y E T E M 1 7 8 2 C++ programozási nyelv BME-IIT Sz.I. 2016.04.05. - 1

Részletesebben

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

OOP: Java 5.Gy: Osztály, referencia, konstruktor

OOP: Java 5.Gy: Osztály, referencia, konstruktor OOP: Java 5.Gy: Osztály, referencia, konstruktor 36/1 B ITv: MAN 2019.03.10 Osztály fogalma A Circle osztály definíciója: public class Circle { private int cx; private int cy; private int rad; public Circle(int

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés A C programozási nyelv V. Struktúra Dinamikus memóriakezelés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv V. (Struktúra, memóriakezelés) CBEV5 / 1 A struktúra deklarációja 1.

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 13. gyakorlat 2017. december 11-15. 13. gyakorlat Programozási nyelvek II.: JAVA 1 / 32 Az 13. gyakorlat tematikája Generikus típusokés öröklődés Clone Comparator Névtelen

Részletesebben

Apple Swift kurzus 3. gyakorlat

Apple Swift kurzus 3. gyakorlat Készítette: Jánki Zoltán Richárd Dátum: 2016.09.20. Apple Swift kurzus 3. gyakorlat Kollekciók: Tömb: - let array = [] - üres konstans tömb - var array = [] - üres változó tömb - var array = [String]()

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Vizuális és eseményvezérelt programozás , II. félév BMF NIK Vizuális és eseményvezérelt programozás 2006 2007, II. félév BMF NIK Eseménykezelés A képviselő( delegate ) Képviselők C# nyelvi megvalósítása Metódushívás képviselőn keresztül Az esemény ( event ) Esemény

Részletesebben

Gráfalgoritmusok ismétlés ősz

Gráfalgoritmusok ismétlés ősz Gráfalgoritmusok ismétlés 2017. ősz Gráfok ábrázolása Egy G = (V, E) gráf ábrázolására alapvetően két módszert szoktak használni: szomszédsági listákat, illetve szomszédsági mátrixot. A G = (V, E) gráf

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Sztringek Osztályok alapjai Sztringek Szöveges adatok kezelése Sztring Karakterlánc (string): Szöveges adat Karaktertömbként tárolva A szöveg végét a speciális

Részletesebben

Fák 2009.04.06. Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa

Fák 2009.04.06. Témakörök. Fa definíciója. Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa Fák szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Rekurzív típusok, fa adatszerkezet Bináris keresőfa, bejárások Bináris keresőfa, módosítás B-fa Témakörök 2 Fa (Tree): csomópontok

Részletesebben

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozási nyelvek II.: JAVA, 4. gyakorlat Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 29 A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály StringBuilder

Részletesebben

OOP: Java 4.Gy: Java osztályok

OOP: Java 4.Gy: Java osztályok OOP: Java 4.Gy: Java osztályok. 36/1 B ITv: MAN 2019.03.02 Feladat Készítsen el egy Employee osztályt és egy Employee osztályt használó osztályt (EmpProgram). Az Employee osztálynak: van name és salary

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba

Részletesebben

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozási nyelvek II.: JAVA, 4. gyakorlat Programozási nyelvek II.: JAVA, 4. gyakorlat 2017. október 2-6. Programozási nyelvek II.: JAVA, 4. gyakorlat 1 / 32 A 4. gyakorlat tematikája Tömbök A java.util.arrays osztály A String osztály A StringBuffer

Részletesebben

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit

Részletesebben

A programozás alapjai 1 Rekurzió

A programozás alapjai 1 Rekurzió A programozás alapjai Rekurzió. előadás Híradástechnikai Tanszék - preorder (gyökér bal gyerek jobb gyerek) mentés - visszaállítás - inorder (bal gyerek gyökér jobb gyerek) rendezés 4 5 6 4 6 7 5 7 - posztorder

Részletesebben

Információs Technológia

Információs Technológia Információs Technológia Rekurzió, Fa adatszerkezet Fodor Attila Pannon Egyetem Műszaki Informatika Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. november 18. Rekurzió Rekurzió

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Memóriakezelés, dinamikus memóriakezelés

Memóriakezelés, dinamikus memóriakezelés Metódus: függvények és eljárások összefoglaló neve. Memóriakezelés, dinamikus memóriakezelés Nézzük végig, a C++ memóriakezelését. Alapvetően három fő memóriaterületet különböztetünk meg. Végrehajtási

Részletesebben

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

VI. turnus (Kontaktnapok: szerda) Képzés időtartama: 2015. augusztus 24. - 2015. október 15.

VI. turnus (Kontaktnapok: szerda) Képzés időtartama: 2015. augusztus 24. - 2015. október 15. VI. turnus (Kontaktnapok: szerda) Képzés időtartama: 2015. augusztus 24. - 2015. október 15. Budapest, Balassagyarmat, Cegléd, Debrecen, Dunaújváros, Eger, Esztergom, Kaposvár, Kecskemét, Miskolc, Nyíregyháza,

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Tuesday, March 6, 12. Hasító táblázatok

Tuesday, March 6, 12. Hasító táblázatok Hasító táblázatok Halmaz adattípus U (kulcsuniverzum) K (aktuális kulcsok) Függvény adattípus U (univerzum) ÉT (értelmezési tartomány) ÉK (érték készlet) Milyen az univerzum? Közvetlen címzésű táblázatok

Részletesebben

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor Gráfok 1. Tárolási módok, bejárások előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Gráfok 1. Tárolási módok Szélességi

Részletesebben

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein. Programozás C++ osztályok Fodor Attila Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék foa@almos.vein.hu 2010. április 8. Csak bázisosztályként használt/értelmezhető

Részletesebben

Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II. Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 3. Kiegyensúlyozott keresőfák A T tulajdonság magasság-egyensúlyozó

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben

Gráfok. Programozás II. előadás. Szénási Sándor.

Gráfok. Programozás II. előadás.   Szénási Sándor. Gráfok előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Tárolási módok Szélességi bejárás Mélységi bejárás Legrövidebb

Részletesebben