Tankocka – Hang/Film felirattal: a barátkozás algoritmusa Dr. Sheldon Cooper szerint

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban válaszolni kell a videóban megjelenő – algoritmusokhoz kapcsolódó – hat kérdésre! A videó a népszerű Agymenők (The Big Bang Theory) című sorozat 2. évad 13. epizódjából való, melynek címe: A barátkozás módszertana (The Friendship Algorithm). Ez a témakör főként az alapozó tanfolyamunkhoz kötődik: Java SE szoftverfejlesztő tanfolyam.

Az algoritmusok a tipikusan programozási nyelvtől független, konvertálható tudást jelentik és mindig szükség van rájuk. Többféle jelölésrendszer is kapcsolódik hozzájuk, például folyamatábra, mondatszerű leírás, struktogram, Jackson-ábra. Az UML jelölésrendszer elemei közül az objektumok kommunikációját, viselkedését leíró ábrák is algoritmusleíró eszköznek tekinthetők.

Ratkó István emlékest 2022

A Gábor Dénes Főiskolán működő Ratkó István matematika interdiszciplináris alkalmazásai Műhely 2022. március 25-én 10. alkalommal rendezte meg a Ratkó István emlékestet. Ezen már többször is részt vettem előadóként és a hallgatóság tagjaként is. 2014-ben Prímszámkereső algoritmusok hatékonysága címmel, 2015-ben A bűvös négyzet története és előállítása (oktatóprogram) címmel tartottam előadást. A jubileumi emlékesten pedig „Töltsünk ki az ötöslottón 100 szelvényt úgy, hogy valamelyik szelvénnyel biztosan legyen két találatunk!” – a feladat megoldásához vezető út címmel tartottam előadást.

A blog bejegyzésben röviden összefoglalom az előadást:

  • Személyes élmények Ratkó tanár úrhoz kötődően
  • Ötöslottó: diszkrét matematika, elemi kombinatorikai feladat, lehetséges különböző szelvények száma, öttalálatos valószínűsége, szemléltetés
  • Véletlenszámok előállítása: valódi és ál (pszeudo) véletlenszámok, hardveres és szoftveres megoldások áttekintése, LCG
  • Egyetlen véletlenszám előállítása Java nyelven: procedurális, OO, szálbiztos megoldások
  • Egyetlen lottószelvény előállítása Java nyelven: adatszerkezet nélkül, logikai tömb (demóprogram), számtömb, szöveg (McMillan egyenlőtlenség, optimális kód, Huffman kód, prefixmentes kódolás, Shannon-Fano kód, hibajelző és hibajavító kód, Hamming távolság, Reed-Solomon kód, algebra: véges testek megkonstruálása), generikus lista (érték), generikus lista (keverés), generikus lista (elfogyasztás), generikus halmaz, funkcionális programozás / algoritmusok és adatszerkezetek rövid elemzése, összehasonlítása, kompromisszumok
  • Találatok száma: matematika vs. programozási tételek, metszet tömbbel és generikus listával, Stream API-val, lambda kifejezéssel
  • Különböző lottószelvények előállítása: összes eset, brute force, mesterséges intelligencia, problématér|állapottér, kombinatorikai robbanás kontrollálása
    (szemléletváltás: az eddigi 1-90 intervallumból kiválasztott 5 különböző szám egy lottószelvényt jelentett, mostantól az 1-43949268 intervallumból kiválasztott különböző számok különböző lottószelvényeket jelentenek)

Eddig minden feldolgozható a középiskolás matematikai eszköztárral és kezdő Java objektumorientált programozás által biztosított mozgástérben. A továbbiakhoz szintet kell lépni.

A konkrét feladatspecifikáció:

„Töltsünk ki az ötöslottón 100 szelvényt úgy, hogy valamelyik szelvénnyel biztosan legyen két találatunk!” (Segítség: töltsünk ki 30 szelvényt úgy, hogy az 1-25 közötti számpárt lefedjék; 21 szelvényt úgy, hogy a 26-46 közötti összes számpárt lefedjék; 21 szelvényt úgy, hogy a 47-67 közötti összes számpárt lefedjék és 28 szelvényt úgy, hogy a 68-90 közötti összes számpárt lefedjék. Miért lesz így legalább két találatunk?)

A szintlépéshez hasznos ismerni két tankönyvet (Szilasi Zoltán: Bevezetés a véges geometriába, 2015; Reiman István: A geometria és határterületei, 2001) és egy tudományos cikket (Z. Füredi, G. J. Székely, Z. Zubor: On the Lottery Problem, 1995). További szükséges ismeretek (geometria, algebra, elemi matematika, kombinatorika): projektív geometria, véges projektív sík, Kirkman iskoláslány problémája, Fano-sík (mint algebrai és geometriai leképezés), Steiner-rendszer (ponthalmaz, amely elemszáma 6k+1 alakú prím), néhány konstruktív jellegű bizonyítás, skatulya-elv.

Az előadás a feladat megoldásához vezető útról szólt. Az eredmény előtti utolsó előtti lépés ezt jelenti (Java program konzolra kiírt szövege):

Végül ismertettem néhány lehetőséget az algoritmus vizsgálatára és az implementált Java forráskód tesztelésére.

Köszönöm Kupcsikné Fitus Ilona kolléganőnek, hogy a jubileumi Ratkó István emlékest szervezőjeként előadónak felkért. Örömmel csatlakoztam újra. A prezentációmat a résztvevőkkel megosztottam. Köszönöm az érdeklődő kollégáknak és hallgatóknak a részvételt és a pozitív visszajelzéseket. Az emlékestek programjai elérhetők. Ajánlom lottószelvény címkénket is, mert a téma igazi örökzöld.

Programozás Java nyelven könyv – új, 2022-es kiadás

Megjelent a Programozás Java nyelven című könyv 2022-es kiadása.

Hosszú evolúciója van ennek a könyvnek. 2009-ben jelent meg az alapozó Programozási alapok és 2010-ben a haladó Programozási technológia című könyv. Ezek továbbfejlesztett, kibővített, egyesített változataként 2016-ban jelent meg a Programozás Java nyelven című könyv v1.0 változata. Elérkezett az ideje az újabb bővítésnek, kiegészítésnek, ez lett a v1.1 változat. A fejlesztő munka 2022. január-februárban valósult meg. A könyvnek továbbra is az egyik hívómondata: „500 oldal, 500 példa”. A példatár is jelentős frissítésen esett át.

A Java SE szoftverfejlesztő tanfolyamunk hallgatói megkapják a könyvet. Tananyagunk egyik alapja. A könyvet több iskolában, felsőoktatásban, szakképzésben, többféle OKJ tanfolyamon és újhullámos céges tanfolyamokon is használták/használják Magyarországon és a szomszédos országokban is.

A tankönyvből elsajátíthatók a strukturált és az objektumorientált programozás­hoz kapcsolódó alapismeretek. Az alkalmazott programozási nyelv a Java. Fejlesztői környezetként ingyenesen elérhető eszközöket használ: JDK/JRE, NetBeans.

A tankönyv 19 fejezetet tartalmaz.

Előszó
1. Bevezetés a programozásba
2. Út az integrált fejlesztőeszközig
3. Alapfogalmak
4. Kifejezések, értékadás
5. Szelekciók
6. Iterációk
7. Metódusok írása
8. Tömbök
9. Objektumorientált programozás
10. Java osztályok használata
11. Rendezés, keresés
12. Kivételkezelés
13. Kollekciók
14. Interfészek, belső osztályok
15. Öröklődés
16. Grafikus felhasználói felület felépítése
17. Eseményvezérelt programozás
18. Swing-komponensek
19. Fájlkezelés
Irodalomjegyzék

A fejezetek egymásra épülnek, hivatkoznak egymásra. Alapelv, hogy mindig csak éppen annyi elméleti ismeretet kell adni, ami egy-egy feladattípus, témakör megértéséhez elegendő és azonnal meg kell mutatni, hogyan kell az elméleti ismereteket alkalmazni a gyakorlatban. Így összekapcsolódnak az elmé­leti és gyakorlati ismeretek, ezután lehet rájuk építkezni.

A fejezetek felépítése egységes. Rövid, tömör elméleti ismereteket kö­vetően példának szánt feladatok következnek. A feladatok megfogalmazása vál­tozatos, mindig alkalmazkodik a már közben megszerzett, elvárható szint igé­nyeihez. A feladatok megoldása forráskódként, később osztálydiagramok formá­jában is szerepel. Ha szükséges, a program futtatása során előállított üzenetek, szövegek, képernyőképek is megjelennek. A megoldás elemzésekor részletes magyarázatok szerepelnek, amelyek során a kezdeti vissza-visszatérő utasításszintű magyarázatot fokozatosan felváltja a megoldás elvi alapjainak ismertetése.

A fejezetek végén gyakorló feladatok találhatók. Az elemzett és gyakorló felada­tok kölcsönösen egymásra épülnek, hivatkoznak egymásra. A biztos tudás érdekében minden gyakorló feladatot meg kell oldani!

A programozási tételek nagy hangsúlyt kaptak a tankönyvben. Az elemi prog­ramozási tételekhez kevés előismeret is elegendő, az összetett programozási téte­lekhez már több és biztos ismeret szükséges. Így a programozási tételek több fejezetben szétszórva találhatók meg.

Előfordul, hogy egy-egy feladat többször is előkerül, ilyenkor mindig alapvetően más elvű megoldás található hozzájuk. Ezeket érdemes összehasonlítani (sorszámok alapján könnyen megtalálhatók), hogy egyértelmű legyen, hogy milyen különb­ségek adódnak a különböző módszerek, megvalósított algoritmusok, adatszerke­zet miatt. Az összetettebb feladatokhoz készültek Demo programok is, amelyek lépésenként vezetnek a megértés felé.

A szerző ezúton is köszönetet mond minden kollé­gájának, minden hallgatójának, akik ötleteikkel, tanácsaikkal, javaslataikkal segítették munkáját, támogatták abban, hogy e tankönyv minél színvonalasabb legyen.

Ábécé sorrendben: Balogh Péter, Barta Milán, Berecz Antónia, Bódy Bence, Friedel Attila, Hollós Gábor, Kállai Miklós, Kiss Balázs, Lengyel Borisz István, Nagy Gábor, Nádai Gábor, Peck Tibor János, Ravasz Ildikó, Seres Iván, Szabó Ervin, Szakácsné Takács Brigitta, Szegedi Kristóf, Székely László, Vincze Bianka.

A Programozás Java nyelven című tankönyv megrendelhető a szerző, Kaczur Sándor honlapján.

Rácsrejtjelezés

Időnként készítünk oktatóprogramokat is tanfolyamainkon. Most az volt a cél, hogy kódolás/dekódolás szakterület egyik ismert betűkeveréses algoritmusának működését mutassa be lépésről-lépésre az oktatóprogram. A rácsrejtjelezést választottuk.

Az elkészült program Java swing-es felületű és Windows Classic look-and-feel bőrrel így néz ki működés közben:

A rácsrejtjelezés a képernyőképen látható 4×4-es Kódrács használatán alapul.

A titkosítandó szöveget karakterenként beleírjuk az aktuális kódrácsba soronként lefelé, azon belül balról jobbra haladva. Ha a négy pozíció betelt, akkor el kell fordítani a kódrácsot az óramutató járásával megegyező irányban 90 fokkal. Ha a szöveg hosszabb 16 karakternél, akkor elölről kell kezdeni. Ha készen vagyunk, akkor soronként haladva leírjuk egymás után a kódrácsban található karaktereket.

A megfejtéshez ismernünk kell a titkosított karaktersorozaton kívül a felhasznált kódrácsot is. A karaktersorozatot soronként lefelé haladva beírjuk a kódrácsba, az ismert kódrácsot ráhelyezve soronként lefelé, azon belül balról jobbra haladva kiolvashatjuk a megfejtést. Természetesen a kódrácsot most is forgatni kell minden negyedik karakter után.

Megfigyelhető, hogy bármely karaktert tudunk titkosítani és megfejteni. Ezért a rácsrejtjelezés ebből a szempontból univerzális módszer.

A kódrács ismerete nélkül a titkosított szöveg nem fejthető meg, tartalmára csak nehézkes következtetést adhatunk. Például, ha tudjuk, hogy milyen nyelvű a titkosított szöveg, akkor támpontot adhat a megfejtéséhez a nyelv ábécéjében előforduló betűk ismert gyakorisága.

A képernyőkép éppen a megfejtés egyik pillanatában készült. A feladó továbbította a titkosított szöveget és a kódrácsot a címzettnek, aki elkezdte annak megfejtését. A negyedik karakter a b volt, utoljára erre kattintott a (4;4) pozícióban. Ezt követte egy rácsforgatás, amelyhez tartozik egy ablak, amely megjeleníti a „Rácsforgatás következik.” szöveget. Ezután a kódrács elfordult, és a következő cella a második sor első cellája lesz. Ha hibás cellára, pozícióra kattintunk, akkor a következő hibaüzeneteket kaphatjuk: „Hibáztál! Folytathatod a titkosítást.” vagy „Hibáztál! Folytathatod a megfejtést.” Ha befejeztük a titkosítást, vagy a megfejtést, akkor a következő üzeneteket kaphatjuk: „A kódolás sikerült.” vagy „A megfejtés sikerült.”

A program tartalmaz egy gyakorlást támogatandó szövegkészletet. Ennek minden eleme 16 hosszúságú, az egyszerűség kedvéért – így nem kell véletlenszerű karakterekkel feltölteni a rács kimaradt celláit, illetve nem kell 16-os csoportokkal foglalkozni.

A Titkosítás és megfejtés fülön látható egy véletlenszerűen kiválasztott szöveg, amelyet karakterenként kódolni lehet a kódrács megfelelő cellájára kattintva. Ha kész, a Továbbítás gombbal a feladó elküldi a címzettnek a titkosított karaktersorozatot, aki hasonlóan megfejti. „Útközben” megfigyelhető, hogy éppen hányadik elforgatásnál tartunk és természetesen megjelenik az aktuális ráccsal titkosított szöveg is.

Az űrlapon lévő Kódrács csoportablak az aktuálisan, véletlenszerűen legenerált kódrácson kívül a kiválasztott cellák pozícióit is tartalmazza. Az (1;1) pozícióban a bal felső cella található. A kódrács a Másik nyomógombbal véletlenszerűen újragenerálható. Ennek megvalósításakor több probléma, ötlet is felmerülhet. Például használható visszalépéses keresés algoritmus.

Most nem specifikáljuk részletesebben, például objektumorientált tervezés, eseménykezelés, háttérbeli objektumok vagy GUI komponensek működésének/vezérlésének szintjén. Aki kedvet kapott és úgy érzi, hogy meg tudja ugrani ezt a kihívást, akkor bátran elkészítheti. Hajrá! Mivel oktatóprogram, szükséges hozzá Leírás és Teszt is.

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A Java SE szoftverfejlesztő tanfolyamunkon, a szakmai modul Objektumorientált programozás témakörét követő 29-36. óra Grafikus felhasználói felület alkalmain már tudunk egyszerűbb oktatóprogramot tervezni, kódolni, tesztelni.

Kutatók éjszakája 2021

Kutatók éjszakája

Kutatók éjszakájaA Kutatók Éjszakája nemzetközi rendezvénysorozat 2005-ben indult. Magyarország 2006-ban csatlakozott. Azóta évről-évre egyre több intézmény nyitja meg hazánkban kapuit, szervez érdekes programokat, sok-sok településen, több száz helyszínen, több ezer eseményt meghirdetve sok tízezer érdeklődő/résztvevő látogatónak biztosít tartalmas estét.

Bár a kezdeményezés elsősorban a kutatói pálya népszerűsítését szolgálja, ezért leginkább a tizen- és huszonévesekre számít, az események vonzók és elég érdekesek ahhoz, hogy a kisgyerekektől a legidősebbekig mindenki megtalálja a számára izgalmas programokat. Korábban nagyobb felsőoktatási intézmények és kutatóintézetek szerepeltek döntően, de az utóbbi néhány évben egyre több kisebb intézmény, tehetséggondozással foglalkozó középiskola, cég, egyesület is csatlakozott a rendezvényhez. A Kutatók éjszakája rendezvény minden meghirdetett programja ingyenes.

Rendezvényünk plakátja

it-tanfolyam.hu Kutatók éjszakája 2021 plakát

Az it-tanfolyam.hu 2021-ben is hirdetett programokat az eseményhez kötődően. Programjainkat elsődlegesen követőinknek, aktív hallgatóinknak és az alumni csoportunkban hirdettük meg, de persze nyílt rendezvényként valósult meg. Az eseményekre regisztrálni kellett a weblapon. A regisztrációs időszak két hétig tartott, szeptember 9-23-ig. Programjainkra szeptember 24-én 22:00-23:55-ig került sor.

A programjaink népszerűek voltak. A két teremben közel 50 érdeklődő látogatót fogadtunk. A többség több programon is részt vett. Néhányan kifejezetten egy-egy adott program iránt érdeklődtek. Többen is úton voltak késő délutántól szinte hajnalig, megragadva a lehetőséget, több helyszínt is meglátogattak. Kellemes hangulatban, tartalmasan töltöttük együtt az időt – végre újra személyes jelenléttel az offline világban – aminek igazán örülök.

Szeretném megköszönni az előadók színvonalas munkáját, igényes felkészülését. Köszönjük mindenkinek, aki részt vett a Kutatók éjszakája 2021 rendezvényünkön. Az előadások prezentációit tanfolyamaink hallgatói számára – a témához kapcsolódó témakörökhöz, ILIAS-ra feltöltve – tesszük elérhetővé.

22:00-22:25 – Kiss Balázs: Mitől okos egy otthon, egy pláza, egy város?
Néhány hónapja ismert, hogy okos lesz (időközben lett) az Etele pláza. Nem, nem szponzorálja 🙂 ezt az előadást. Ha a léptékeket tekintjük, akkor bizony éles a határ az otthonokban, intézményi és település szinten alkalmazott és alkalmazható okos technológiák között. Az előadó évek óta foglalkozik okos architektúrák fejlődésének történetével, koncepciójával, szoftveres integrációjával és konfigurációjával. Szívesen osztja meg gondolatait, kutatási eredményeit a témáról, beszél saját kisebb és nagyobb léptékű projektjeiről. Praktikus tanácsok is előkerülhetnek – igény szerint. Egyensúlyoz a kész komponensek testre szabási lehetőségei és a saját fejlesztés határán. Utóbbi kulcsszavai: hálózati kommunikáció megvalósítása szerver-kliens között vagy peer-to-peer többféle programozási nyelven, autentikáció, autorizáció, protokoll, tömörítés, felhő architektúrák. A program a Java tanfolyamaink orientáló moduljához kötődik.

22:30-22:55 – Kaczur Sándor: Algoritmus vesebeteg-donorok párosítására
Hogyan működik 2007 óta Nagy-Britanniában a vesebeteg-donorok párosítása? Sima csere 2 pár esetén adódik. 3 pár esetén körbeadják a vesét egymásnak – ez már jóval összetettebb probléma. A felépített óriási adatbázisban akár több száz lehetőség is adódhat. A probléma megfelelő párosítási algoritmus és számítógép nélkül, pusztán emberi erővel megoldhatatlan lenne. Az implementált algoritmus futási ideje mindössze 30 perc. A párosítást követően a következő lépés a műtétek egyidejűsége, és a donor szervek „utaztatása” minden lehetséges úton – földön, vízen, levegőben –, minden lehetséges közlekedési eszközzel. Hogyan működik mindez a gyakorlatban? Milyen korlátok, problémák adódnak? Milyen adatok alapján dönthető el a betegek „kompatibilitása”? Ezek közül mi kötődik az egészségügyhöz és mi a szállításhoz? Az előadó próbál válaszokat adni, de lehet, hogy a végén több lesz a kérdés, mint a válasz. Vajon milyen a párosítási algoritmus hatékonysága? A program a Java tanfolyamaink orientáló moduljához kötődik.

23:00-23:25 – Szegedi Kristóf: Hogyan változik a világ vezető innovációs vállalatainak 100-as toplistája?
A Thomson Reuters hírügynökség évről-évre közzéteszi a világ vezető innovációs vállalatait tartalmazó frissített 100-as toplistáját. Vajon milyen szempontrendszer alapján születik a döntés, alakul a rangsor? Az előadó áttekinti a háttérben lévő metodológia elemeit. Íme, néhány szempont: pénzügyi teljesítmény, a vezetők és befektetők közötti bizalom, innováció, környezeti hatás, emberek és társadalmi felelősség, hírnév, kockázatviselés és ellenálló képesség, jogszabályok betartása. Vajon mivel foglalkoznak a toplista elején lévő vállalatok? Kiderül, hogy az elmúlt néhány évben milyen változások történtek a toplista elején. Az előadó próbálja indokolni, vajon mik lehettek az elmozdulások okai. Lehetne előrejelzést adni és vajon érdemes? Közösen gondolkodunk mindezeken. A program a Java tanfolyamaink orientáló moduljához kötődik.

23:30-23:55 – Kaczur Sándor: Gondolkodjunk logikusan!
Az előadás során áttekintjük az intelligencia, a kreatív problémamegoldó és logikus gondolkodás összefüggéseit és izgalmas feladatokból válogatva közösen megoldunk néhány fejtörő feladatot. Néhány példa: Hány éves a kapitány?CHOO + CHOO = TRAIN, Logikus gondolkodás teszt.

 

22:00-22:45 – Hollós Gábor: Objektumorientált programozás vs. funkcionális programozás Java nyelven
Az előadó ismert adatszerkezeteket és ismert programozási tételeket használva összehasonlítja a hatékonyság szempontjai alapján egy-egy feladat különböző megvalósításait. Referenciaként tekint az objektumorientált megoldásokra és ehhez képest kiderül, hogy a Java 8-tól elérhető funkcionális elemek milyen változásokat jelenthetnek. Vajon kevesebb memóriát használnak? Vajon gyorsabbak? Vajon egyszerűbbek/bonyolultabbak? Vajon könnyebben megérthetőek, karbantarthatóak, dokumentálhatóak? Hogyan érdemes egyensúlyozni az általunk leprogramozott, a kollekciók hagyományos beépített műveleteit használó és a lambda kifejezések között? Kiderül. A program a Java SE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

22:50-23:35 – Kiss Balázs: Denevérek a barlangban – Hálózatos Java esettanulmány tervezése és tesztelése
Az előadó újragondolta egyik örökzöld esettanulmányukat, amelynek koncepciója elérhető szakmai blogunkon: Denevérek a barlangban. Kiderül, érdemes-e változtatni a programban megvalósuló elosztott, hálózati kommunikáción. Tekintettel az utolsó néhány Java verzió újdonságaira, fókuszálva különösen a 13-astól a 17-esig. Ha érdemes refaktorálni, akkor megtudjuk, hogy mit és hogyan. Ha nem érdemes, akkor indoklást kapunk arra, hogy miért nem. Az áttekintett tesztadatokat elemezve megkapjuk a választ. A program a Java EE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

23:40-23:55 – Falus Anita, Németh András: Karrierváltás után – néhány hónap KKV-s tapasztalatai szoftverfejlesztőként
Mennyire könnyű ma szoftverfejlesztőként elhelyezkedni szakirányú felsőfokú végzettség nélkül? Milyen kihívásokkal találkozhatunk a felvételi folyamat során? Milyen elvárásokat támasztanak a munkaadók egy junior szakemberrel szemben? Hogyan telnek a beilleszkedés után a hétköznapok junior fejlesztőként kis létszámmal működő informatikai profilú kisvállalkozásnál? A tanfolyamainkon 2020-ban végzett előadók karrierváltó junior szakemberként személyes tapasztalataikról számolnak be. A program a Java tanfolyamaink orientáló moduljához kötődik.