Programozás III KOLLEKCIÓK.

Slides:



Advertisements
Hasonló előadás
Nevezetes algoritmusok
Advertisements

Logaritmikus keresés Feladat: Adott egy 11 elemű, növekvően rendezett tömb számokkal feltöltve. Keressük meg a 17-es értéket! Ha van benne, hányadik eleme.
egy egyszerű példán keresztül
Programozás III KOLLEKCIÓK 2..
LRendezés minimális elem kiválasztással Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 19./0. lAz algoritmus működése lRávezető feladat.
Algoritmus és adatszerkezet Tavaszi félév Tóth Norbert1.
Programozási alapismeretek 12. előadás. ELTE  Tapasztalatok a rendezésről Tapasztalatok a rendezésről  Keresés rendezett sorozatban Keresés rendezett.
Bevezetés a Java programozásba
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Borland C/C++ mintapéldák tömbökre
Gombkötő Attila Lineáris egyenlet.
Készítette: Pető László
Turbo pascal feladatok 2
Krizsán Zoltán.  Ha az algoritmus sokáig dolgozik,  de el akarjuk kerülni a „fagyást”.  Kisebb a költsége, mint az új folyamatnak.  Programozás szempontjából.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
ELTE Szlávi-Zsakó: Programozási alapismeretek 10.1/ Összegzés mátrixra Feladat: Egy mátrix elemeinek összege.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
Utórendezéses edényrendezés RADIX „előre”. Definíció  Az általános utórendezéses edényrendezés speciálisan r alapú d jegyű számokra felírt változata.
További vektor, mátrix algoritmusok
Microsoft Excel Függvények VI..
Programozás C# - ban Feladatsorok.
Táblázatkezelés feladatok. Feladatok 1. változók –G2: földrész –G8: terület Írassuk ki a G2 földrész G8 területnél kisebb országok átlagos lakosságát!
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
V 1.0 OE-NIK HP 1 Programozási Paradigmák és Technikák Eseménykezelés Névtelen metódusok (anonymous methods)
Térkép. Mi az adat? Minden információ, amit tárolni kell. Minden információ, amit tárolni kell.  szám  szöveg  dátum  hang  kép, stb.
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
VI. Konténerek 18. Tömbök 19. Rendezés, keresés, karbantartás
Rendezési algoritmusok
Lénárt Szabolcs Páll Boglárka
Tömbök és programozási tételek
Algoritmus gyakorlati feladatok
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
AAO Csink László november.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Filekezelés
Komoróczy Tamás 1 Java programozási nyelv Stringek.
Java programozási nyelv Tömbök
Java programozási nyelv Adatbekérés konzolról
Programozási tételek.
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Programozás III KOLLEKCIÓK.
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Programozási tételek.
Programozás I. Típus algoritmusok
Programozás I. Matematikai lehetőségek Műveletek tömbökkel
Programozás III KOLLEKCIÓK.
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
Edényrendezés. Működés, elvek - Az edényrendezés nem összehasonlító rendezés. - A rendezendő elemeket nem hasonlítjuk össze, hanem a rendezés során az.
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
Feladatok (értékadás)
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
Objektum orientált programozás
Edényrendezés Név: Pókó Róbert Neptun: OYJPVP. Példa RADIX „előre” algoritmusra d=3 hosszú bináris számokra (r=2) Ekkor egy tömbbel meg lehet oldani a.
Szélességi bejárás Gráf-algoritmusok Algoritmusok és adatszerkezetek II. Gergály Gábor WZBNCH1.
Szélességi bejárás. Véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő sorrendben Egy csúcsot egyszer járunk be Egyenlő.
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
„RADIX előre” edényrendezés Adott a háromjegyű bináris számok következő sorozata: 011, 111, 101, 010, 110, 001, 100 Adja meg a tömb tartalmát az egyes.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozás II. Gráfok Dijkstra algoritmus Kruskal algoritmus.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Logikai programozás 7..
Algoritmusok és Adatszerkezetek I.
A maximum kiválasztás algoritmusa
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Programozás III KOLLEKCIÓK

PROBLÉMAFELVETÉS A diákokra vonatkozó kis mintapéldát bővítsük úgy, hogy a diákok adatait a/ névsor szerint növekvő/csökkenő sorrendben b/ átlag szerint növekvő/csökkenő sorrendben írassuk ki. A feladat az eddigi ismeretek alapján tömbökkel oldható meg. Most egy elegánsabb lehetőségről kezdünk el beszélgetni.

KITÉRŐ – TÖMBÖK RENDEZÉSE int a[] = new int[length]; //buborek algoritmus static void buborek(){ int i, j, temp; for (i = 0; i < a.length-1; i++) for(j = i+1; j<a.length; j++) if (a[j] < a[i]){ temp = a[i]; a[i] = a[j]; a[j] = temp; } } 20000 méretű véletlen tömb esetén: Buborék: 1375 ms Arrays.sort: 16 ms // beépített metódus segítségével: java.util.Arrays.sort(a);

KONTÉNEREK A konténer olyan objektum, amely objektumokat tárol, és alkalmas különböző karbantartási, keresési és bejárási funkciók megvalósítására. (A tömb is speciális konténer, de nem osztály, nincs viselkedése, vagyis a tömbben tárolt objektumok karbantartására és az elemek keresésére külön meg kell írni az egyes eljárásokat. Egy konténer osztály az elemek tárolásán kívül a különböző keresési, bejárási, karbantartási funkciókat is megvalósítja.) Egy – sok kapcsolat megvalósítása: konténerek segítségével

EGYÜTTMŰKÖDÉSI DIAGRAM Mindegyik elem tudja, hogy ki az utána következő ( next() ).

OSZTÁLYDIAGRAM

KONTÉNEREK – KOLLEKCIÓK A Java-ban több konténer osztályt implementáltak. java.util csomag, Collection interfész A konténerek általánosak, azokba bármilyen objektumot betehetünk.

GYŰJTEMÉNY KERETRENDSZER Java Collections Framework (Gyűjtemény keretrendszer) A JCF tartalma: – interfészek: absztrakt reprezentáció, a szolgáltatások megvalósítás-független ábrázolása. – implementációk: az interfészek konkrét implementációi. – algoritmusok: a műveleteket megvalósító metódusok. (Ezek többalakú (polimorf) metódusok, vagyis ugyanaz a metódus alkalmazható különböző implementációk esetén.)

GYŰJTEMÉNY KERETRENDSZER

GYŰJTEMÉNY KERETRENDSZER A gyűjtemény interfészei: Set: nem tartalmaz duplikátumot List: tartalmazhat duplikátumot több metódus; bejáráshoz használható az Iterator, ListIterator. Map: kulcs-érték párokat tartalmazó gyűjtemény egy kulcshoz csak egy érték tartozhat

GYŰJTEMÉNY KERETRENDSZER A List interfész és implementációi

GYŰJTEMÉNY KERETRENDSZER A List interfész ismert implementációi: AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector Érdemes belenézni a megvalósításukba: NetBeans-ben az osztály nevén Ctrl + kattintás.

LISTA A lista (List) egy olyan gyűjtemény, amelybe elemeket lehet beszúrni (a végére is és egy adott indexű helyre is), ezeket az elemeket az index alapján el lehet érni, keresni lehet benne, ill. törölni. A listát implementáló osztályok ezeket a funkciókat valósítják meg, illetve bővítik.

boolean add(Típus elem) boolean add(int index, Típus elem) LISTA Néhány metódus: boolean add(Típus elem) boolean add(int index, Típus elem) void clear() boolean contains(Típus elem) Típus get(int index) int indexOf(Típus elem) int lastindexOf(Típus elem) boolean isEmpty() boolean remove(Típus elem) int size()

FELADATMEGOLDÁS Képezzünk név-szám párosokból álló gyűjteményt, és írassuk ki az elemeit! A név-szám párosokat úgy tudjuk együtt kezelni és egy listában tárolni, ha objektumokat készítünk belőlük. Ehhez szükség van a Paros osztály definiálására.

FELADATMEGOLDÁS

FELADATMEGOLDÁS

FELADATMEGOLDÁS

FELADATMEGOLDÁS

ITERÁLÓ CIKLUS Az iteráló ciklus (foreach típusú) kényelmesebb ciklus-szervezést tesz lehetővé. Pl.: List<Tipus> adatok = new ArrayList<>(); for(Tipus adat: adatok) {…} Tömbökre pl.: int [] tomb = new int [10]; for(int i: tomb) {…} Megjegyzés: A szakirodalomban ezt a fajta ciklust részesítik előnyben.

A FELADAT FOLYTATÁSA 1. Állapítsuk meg, hogy a gyűjtemény tartalmaz-e egy adott elemet! 2. Bontsuk metódusokra az előbb megbeszélt programot.

1. FELADAT MEGOLDÁSA Magyarázat: A különböző objektumreferenciák.

1. FELADAT MEGOLDÁSA Megoldás: Nem ugyanazt kellene keresni, csak ugyanolyat. Erre szolgál az equals és a hashCode metódus. Ezeket mindig a listában lévő elemekre kell alkalmazni, vagyis abban az osztályban definiálni, amilyen típusú elemeket kezelünk.

1. FELADAT MEGOLDÁSA A Paros osztályban: Don’t panic! A NetBeans generálja.  Most két elemet akkor tekintünk azonosnak, ha megegyezik a nevük.

1. FELADAT MEGOLDÁSA A Paros osztály módosítása után:

2. FELADAT MEGOLDÁSA (metódusok) Main osztály:

MÁSIK FELADAT Az öröklődésnél szó volt róla, hogy a tanár is és a diák is ember.  Tegyük fel, hogy adottak ezek az osztályok. Írjunk egy vezérlő osztályt, amelyben egy listába beolvassuk a szükséges adatokat, majd külön kiíratjuk a tanárok és külön a diákok névsorát.

MÁSIK FELADAT Szükséges információk:

MÁSIK FELADAT

MÁSIK FELADAT ellenőrzött beolvasás kellene

MÁSIK FELADAT És ha van olyan ember, aki nem is tanár, nem is diák? Róla hogyan lehet eldönteni, hogy hova tartozik?

MÁSIK FELADAT „Tanítsanak” a tanárok! Hopp, nincs tanit() metódus! 

MÁSIK FELADAT „Tanítsanak” a tanárok! ((Tipus)objektum) figyelni kell a zárójelekre!! Veszélyes, mert ha az aktuális objektum mégsem Tanar típusú, akkor futáskor elszáll. Erre a programozónak kell odafigyelnie. Ha a programozó mégis tévedett, a hiba csak futási időben derül ki, pedig az lenne az igazi, ha már fordításkor tudnánk.

ELEGÁNSABB MEGOLDÁS Nem lenne szükség típuskényszerítésre, ha minden metódus szerepelne az ősosztályban. – Ez viszont az öröklés logikáját sérti. Megoldás: a program (vagy projekt) körültekintő megtervezése. Ennek részei: 1. Interface felület tervezése. Ebben vannak felsorolva az ügyfél által elérhető szolgáltatások (metódusok). 2. Az interface-t megvalósító absztrakt osztályból kiinduló hierarchia.