Reflexjáték tipikus funkciói

Grafikus felhasználói felülettel rendelkező reflexjátékot tervezünk, fejlesztünk, tesztelünk. Objektumorientált programozást használunk: öröklődéssel egyedi grafikus komponens készül Java swing keretrendszerben. A játékmenetet képernyőképek mutatják be. Tipikus funkciók: időmérés, rácsos elrendezés, fokozatos nehezítés a rács felosztásának változtatásával, különböző színek előállítása véletlenszerűen, elért eredmények megjelenítése, újrakezdés lehetőségének biztosítása.

A Reflexjáték játékmenete képekben

 

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

Ez a feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 17-28: Objektumorientált programozás alkalmaihoz, a 29-36. óra Grafikus felhasználói felület alkalmaihoz, valamint minden tanfolyamunk orientáló moduljának 1-4. óra: Programozási tételek alkalmához kapcsolódik.

A grafikus felületek felépítésének megismerése fontos lépcső az objektumorientált programozás elmélyítéséhez, gyakorlásához. A grafikus felületekhez egy másik lényeges szemléletváltás is kapcsolódik, hiszen a korábbi algoritmusvezérelt megközelítést felváltja az eseményvezérelt (eseménykezelés). A játékprogramok és oktatóprogramok kiválóan használhatók ennek megértéséhez.

Határozott integrál oktatóprogram

Feladatspecifikáció

A határozott integrál alsó és felső közelítő (Darboux) összeg megértését kell saját fejlesztésű Java oktatóprogrammal támogatni!

Legyen adott az x2 függvény a [0, 1] zárt intervallumon úgy, hogy az x és y tengely beosztása megegyező legyen 3 egymás mellett koordináta-rendszeren. Segítsünk belátni, hogy a görbe alatti terület nagysága egyharmad egység. A tengelyek legyenek feketék, a függvénygörbe kék, a közelítő és hiba téglalapok pirosak. Legyen adott egy csúszka komponens, amiben az intervallum felosztása (n) állítható 1-től 100-ig. Például, ha n=10, akkor az ábrákon jelenjen meg a 10 alsó összeget ábrázoló téglalap, a 10 felső összeget ábrázoló téglalap, az 10 közelítési hibát ábrázoló téglalap, valamint ezek területeinek összege.

Ahogy n növekszik, láttatni kell, hogy:

  • a téglalapok a függvénygörbéhez simulnak,
  • az alsó összeg növekszik,
  • a felső összeg csökken,
  • mindkét közelítő összeg egyharmadhoz tart,
  • a hiba 0-hoz tart.

Képernyőképek

A feladatspecifikációnak megfelelően minden megjelenik az elkészült Java program grafikus felhasználói felületén. Az alábbi képernyőkép az n=10 esetben kevésbé pontos közelítést ábrázol:

A következő ábra már pontosabb közelítést mutat az osztópontok számának 30-ra növelésével:

A programmal jól szemléltethető, hogyan konvergál az alsó közelítő összeg balról, a felső közelítő összeg pedig jobbról egyharmadhoz; illetve az is, hogy a felbontás finomságának növelésével a hiba nullához tart.

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

Ez a feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlési szerkezetek, illetve 9-12. óra: Metódusok, rekurzió alkalmához, a 29-36. óra Grafikus felhasználói felület alkalmaihoz, valamint minden tanfolyamunk orientáló moduljának 1-4. óra: Programozási tételek alkalmához kapcsolódik.

A grafikus felületek felépítésének megismerése fontos lépcső az objektumorientált programozás elmélyítéséhez, gyakorlásához. A grafikus felületekhez egy másik lényeges szemléletváltás is kapcsolódik, hiszen a korábbi algoritmusvezérelt megközelítést felváltja az eseményvezérelt (eseménykezelés).

Programozási Hét 2024 – CodeWeek.eu

Programozási hét CodeWeek.eu

Programozási hét CodeWeek.eu

Az Európai Programozási Hét idén 2024. október 14-27-ig kerül megrendezésre. Ez egy önkéntesek által működtetett, alulról szerveződő kezdeményezés. Az önkéntesek saját országukban a Programozási Hét nagyköveteként népszerűsítik a programozást. Ehhez nyílt és ingyenes (online és offline) eseményeket hirdetnek meg a CodeWeek.eu weboldalon.

A Programozási Hét célja

  • a programozással való alkotás megünneplése,
  • az emberek felvértezése képességekkel,
  • az emberek összekapcsolása,
  • még több ember érdeklődésének felkeltése a tudomány, a technológia, a mérnöki ismeretek és a matematika iránt.

Miért jó ez az érdeklődőknek/résztvevőknek?

  • A programozás szórakoztató!
  • Programozni kreatív tevékenység! Az emberiség a kezdetektől fogva alkot: agyagból, kőből, téglából, papírból vagy fából. Manapság programozással is alkotunk.
  • A programozás felvértez! Sokkal többre is képesek vagyunk annál, hogy csak fogyasszuk a digitális tartalmat; programozással sokféle dolgot alkothatunk, és azokat milliók számára elérhetővé tehetjük. Létrehozhatunk weboldalakat, játékokat, irányíthatunk egy számítógépet vagy egy robotot.
  • Értsük meg a világot! Manapság egyre több minden össze van kapcsolva. Ha némi rálátásunk van arra, hogy mi történik a színfalak mögött, akkor a világot is jobban megérthetjük.
  • A programozás ötleteket kelt életre és alapvető kompetenciákat fejleszt. Megtanítja nekünk a számítógépes gondolkodást, fejleszti a problémamegoldást, kreativitást, kritikus érvelést, analitikus gondolkodást, valamint csapatmunkára késztet.
  • A programozás alakítja a jövőnket. Manapság a munkahelyek 90%-a digitális készségeket, köztük programozási ismereteket követel a munkavállalóktól.

2015-től veszünk részt az esemény szervezésében, programozást népszerűsítő előadások, laborgyakorlatok meghirdetésével és megtartásával. 2023-ban világszerte 80+ országban 4+ millió érdeklődő résztvevő csatlakozott. Ajánljuk korábbi beszámolóinkat is szakmai blogunkból, lásd: CodeWeek.eu címke.

Meghirdetett eseményeink

2024-ben nyolc it-tanfolyam.hu-s eseményt hirdettünk meg a Programozási Hét 2024 rendezvényen.
Helyszín: 1056 Budapest, Váci utca 47., 3. emelet, megközelítés
Dátum és időpont: 2024. október 26. 9:00-12:00-ig
Az események ingyenesek voltak, de a részvétel előzetes regisztrációhoz kötött.

Rendezvényünk plakátja

A rendezvény jó hangulatban telt, 50+ érdeklődőt vonzott. Többen rendszeresen visszatérő vendégek voltak, például a tavaszi Digitális Témahét, vagy a szeptember végi Kutatók éjszakája rendezvényeinkről. Eltérő belső motivációval érkeztek, ezek kulcsszavakban: kíváncsiság, pályaorientáció, karrierváltás, mesterséges intelligencia, programozási trükkök, robotika. Igazán tartalmasan telt el idén is ez a rendezvényre szánt három óra. Köszönöm oktató kollégáimnak és 2 korábbi hallgatónknak, hogy előadóként részt vettek a Programozási hét 2024 – CodeWeek.eu rendezvényünkön. Prezentációinkat 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é.

9:00-9:40 – Szegedi Kristóf: Játékprogramok heurisztikáinak elemzése
A tudásalapú rendszerek elméleti alapjaihoz tartoznak a mesterséges intelligencia különböző megoldáskereső módszerei, az állapottér-reprezentáció és a klasszikus keresési stratégiák, heurisztikák. Egy játék állapotait valahogyan nyilvántartjuk egy adatszerkezetben. Lehet, hogy néhány lépést előre kalkulálunk (kiterjesztünk) és ezek elágazásaiból fát (fa adatszerkezet) tudunk építeni. Ezeket hatékonyan karban kell tartani konstrukciós és szelekciós műveletekkel. Heurisztika alapján döntéseket is kell hozni. Vajon melyik állapot a jobb, vagy kevésbé rossz, legalább olyan jó mint ahol járunk? Ki kell értékelni és abba az irányba érdemes haladni, amelyben végül a döntések sokasága igazolja és egyben adja a nyerő stratégiát. Ha ez nem megy, akkor még mindig játszhatunk nem vesztő stratégiával, azaz lehet cél a hosszabb játékmenet, vagy akár a döntetlen állapot is. Az előadás ismertet néhány tipikus problémaszituációt, játékteret leképező reprezentációs gráfbeli navigációt és összehasonlít néhány fabejáró/gráfbejáró stratégiát. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik. Előismeretként feltételezünk némi jártasságot a programozási alapismeretek, programozási tételek, ciklusok, metódusok, tömbök témakörökből.

9:45-10:25 – Kaczur Sándor: Euler állatos feladatának megoldása hatékonyan programozva és geometriai megközelítéssel
Az Euler állatos feladataként ismert matematikai/logikai feladvány megoldási lehetőségeit mutatja be az előadó. Kétféleképpen közelítünk. Az egyik út a programozás eszköztárára és a hatékonyságra fókuszálva, Java nyelven kódolva, konzolos programot fejlesztve, egyre kevesebb lépésben oldja meg a feladatot. A másik út a geometriai megközelítés, amelyet szintén Java nyelven, de már grafikus felhasználói felülettel rendelkező program által, a megoldáshoz fokozatosan közelítve ábrázolja a szükséges lépéseket. A program a Java SE szoftverfejlesztő tanfolyamunk tematikájához kapcsolódik. Előismeretként feltételezünk némi jártasságot programozási ismeretek, programozási tételek, ciklusok, metódusok, tömbök, listák, halmazok, lambda kifejezések, grafikus felhasználói felület témakörökből.

10:30-11:10 – Kiss Balázs: A kognitív robotika szakterülete
Kiindulunk két problémából. Az egyik: az ipari robotok – többnyire a balesetveszély miatt – az emberektől elzárt területeken működnek. A másik: sok algoritmus nagyon erőforrás- és számításigényes. Áttekintjük, milyen együttes megoldások léteznek az említett problémákra. Vajon hogyan kapcsolódik össze ez a két különböző probléma? Mutatunk rájuk néhány példát. Érintjük az ember-robot interakció tipikus lehetőségeit, és az evolúciós robotika határait, lehetőségeit. A gépi tanulásban rejlő potenciálra 3-3 markáns kiváló és téves példát is mutatunk. Tipikus problémaszituációkon keresztül tekintjük át, hogyan érdemes modellezni, tervezni, amikor a kognitív robotika eszköztárával szeretnénk megoldani egy feladatot, problémát – akár KKV szinten is. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik.

11:15-11:55 – Hollós Gábor: 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. Minden feladathoz adunk rávezető példákat – ha esetleg egyik-másik nem menne, akkor ebből megtudod, miket érdemes gyakorolni, hogy menjen. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik. Előismeretként feltételezünk némi jártasságot az algoritmusok, programozási alapismeretek, programozási tételek témakörökből.

 

9:00-9:45 – Kiss Balázs: Képekből Java eszközökkel készített átmeneti animáció lehetőségei
Az előadó példákon keresztül mutatja be az animációkészítés lehetőségeit. Eszközként a Java beépített grafikus API szolgáltatásaiból indul ki, majd áttér többféle kiegészítő API funkcióira. Összehasonlítást is tesz: kitér az előnyökre/hátrányokra és konkrét javaslatokat tesz saját tapasztalataira építve. Megkülönbözteti a fixen kódolt és az interaktív módon, eseménykezelést is tartalmazó animációk különbségeire, lehetőségeire, korlátaira. A bemutatott és kipróbálható példák kiválóan használhatók élményszerű gyakorlásra, rendszerező összefoglalásra grafikus felhasználói felületű Java szoftverfejlesztés, Java programozás témában (asztali és webes alkalmazások készítésétől függetlenül). A program mindhárom Java tanfolyamunk szakmai moduljához kötődik.

9:50-10:25 – Hollós Gábor: Gráfbejáró algoritmusok hatékonyságának elemzése
Az előadás összehasonlítja a 12 db programozási tétel iteratív, rekurzív és funkcionális megvalósításainak hatékonyságát. Fókuszba a funkcionális megoldásokat helyezi. A bemutatott keretrendszer mér lépésszámot, memóriaigényt és bonyolultságot. Nem egyértelműen a jó, jobb, rossz, rosszabb értékelés a cél, hanem inkább az, hogy tudjunk a programozási tételek közül megfelelőt választani adott problémához, feladathoz, algoritmushoz, adatszerkezethez. A program a Java SE szoftverfejlesztő tanfolyamunk és a Java EE szoftverfejlesztő tanfolyamunk tematikájához kötődik. Előismeretként feltételezünk némi jártasságot a programozási alapismeretek, programozási tételek, ciklusok, metódusok, tömbök, listák, halmazok, lambda kifejezések témakörökből.

10:30-11:10 – Kaczur Sándor: Számítástechnika vs. informatika vs. digitális kultúra
Az előadás áttekinti az elmúlt 30 év terminológiai változásait. A fókusz a tanárképzésre és az egyes tantervekre kerül. Néhány kérdésre megpróbálunk választ keresni/találni. Mi indokolta a változásokat? Mi miről-mire változott? Hová került a hangsúly? Mi volt az innovációnak tekinthető változás? Hogyan alakult a szabályozás, a jogi háttér? Hogyan alakultak át a tankönyvek és az online tananyagok? Milyen kompetencia- és tudáselemek kerültek ki a tematikából és kerültek be a tematikába? Hol tartunk most a NAT 2020-ban? Mi várható el attól a fiataltól, aki korábban informatikából érettségizett? És attól, aki már digitális kultúrából érettségizett? Milyen eltérések vannak a digitális kultúra tantárgy középszintű és az emelt szintű érettségi vizsga követelményeiben?

11:15-11:55 – Hatvani Bence, Hatvani Luca: Friss munkaerőpiaci tapasztalataink 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 2021-ben és 2023-ban végzett előadók karrierváltó junior szakemberként személyes tapasztalataikról számolnak be és válaszolnak a kérdésekre. A program a Java tanfolyamaink orientáló moduljához kötődik.

Kutatók éjszakája 2024

Kutatók éjszakája logó

Kutatók éjszakája logó

A 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

Az it-tanfolyam.hu 2024-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 13-26-ig. Programjainkra szeptember 27-én 21:00-23:55-ig került sor.

21:00-21:25 – Kiss Balázs: OpenAI GPT nyelvi modell – tippek a hatékony használatához
Az előadó az egyike volt a Doktoranduszok programoznak – újratöltve 24 órás Mesterséges intelligencia modul oktatóinak. Saját tapasztalatait összegzi az alábbi hívószavak alapján. Alap AI funkcionalitás, megerősítéses és gépi tanulás lehetőségei és korlátai, nyelvi modellek képességei. Említ néhány generatív AI funkciót a kép, ábra, grafikon, térkép, hang, animáció, videó generálása és ezek tömeges feldolgozása kapcsán. Előkerülnek a programozási tételek, valamint alkalmazásuk multimédia analitikával együtt. Ha lesznek haladók a látogatók között, akkor az előadó bemutat néhány objektum- és aspektusorientált tervezés során használható AI eszközt, illetve igény esetén néhány kutatómunkát támogató AI eszközt is.

21:35-21:55 – Kaczur Sándor: Algoritmusok 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. 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 földi, vízi, légi úton és lehetséges közlekedési eszközzel. Hogyan működik mindez a gyakorlatban? Milyen korlátok, problémák vannak? Milyen adatok alapján dönthető el a betegek „kompatibilitása”? Ezek közül mi kapcsolódik az egészségügyhöz és 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 egyáltalán felmerül a párosítási algoritmus hatékonysága ekkora társadalmi hasznosság mellett? A program a Java tanfolyamaink orientáló moduljához kötődik. A tavalyi előadás anyaga kiegészült néhány igazán látványos animációval, szimulációval.

22:00-22:25 – Szegedi Kristóf: Játékprogramok nyerő stratégiáinak elemzése
A tudásalapú rendszerek elméleti alapjaihoz tartoznak a mesterséges intelligencia különböző megoldáskereső módszerei, az állapottér-reprezentáció és a klasszikus keresési stratégiák, heurisztikák. Egy játék állapotait nyilvántartjuk egy adatszerkezetben. Lehet, hogy néhány lépést előre kalkulálunk (kiterjesztünk) és ezek elágazásaiból fát (fa adatszerkezet) tudunk építeni. Ezeket hatékonyan karban kell tartani konstrukciós és szelekciós műveletekkel. Heurisztika alapján döntéseket kell hozni. Vajon melyik állapot a jobb, vagy kevésbé rossz, legalább olyan jó mint ahol járunk? Ki kell értékelni és abba az irányba érdemes haladni, amelyben végül a döntések sokasága igazolja és egyben adja a nyerő stratégiát. Ha ez nem megy, akkor még mindig játszhatunk nem vesztő stratégiával, azaz lehet cél a hosszabb játékmenet, vagy akár a döntetlen állapot is. Az előadás ismertet néhány tipikus problémaszituációt, játékteret leképező reprezentációs gráfbeli navigációt és összehasonlít néhány fabejáró/gráfbejáró stratégiát. A program mindhárom Java tanfolyamunk orientáló moduljához kötődik. Előismeretként feltételezünk némi jártasságot a programozási alapismeretek, programozási tételek, ciklusok, metódusok, tömbök témakörökből.

22:30-22:55 – Hollós Gábor: Algoritmikus gondolkodás fejlesztése: mintaprogramok, esettanulmányok
Az előadó bemutat néhány olyan mintaprogramot/esettanulmányt – természetesen a fokozatosság elve alapján -, amelyek kiválóan alkalmasak a közös eszmecserére. Az algoritmusok átgondolása segíti a szabályalapú megközelítést. Sémák, programozási tételek is előkerülnek – sőt ezek egymásba ágyazása is előkerül. Iteráció vs. rekurzió. Különböző adatszerkezetek képességei, funkciói, konstrukciós és szelekciós műveletei. Az algoritmikus megközelítés szemléletmód állandóságot, stabilitást jelent gondolkodásunkban, tágítja szellemi tevékenységünk körét, célt és formát ad egy probléma megoldásának. Az előadó abban bízik, hogy a fentiek érzékeltetésére alkalmas problémákat, programokat gyűjtögetett össze.

23:00-23:25 – Falus Anita, Ménesi Viktor: Karrierváltás után – az álláskeresés és 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 2021-től 2023-ig végzett előadók karrierváltó junior szakemberként személyes tapasztalataikról számolnak be és válaszolnak a kérdésekre. 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. Minden feladathoz adunk rávezető példákat – ha esetleg egyik-másik nem menne, akkor ebből ki fog derülni, hogy miket érdemes gyakorolni ahhoz, hogy sikerüljön. A korábbi évek anyagát az előadó kiegészítette néhány Java algebrai csomag funkcionalitásának bemutatásával és látványos, szinte önmagyarázó grafikus ábrákkal.

 

A programjaink népszerűek voltak. 52 érdeklődő látogatót fogadtunk. Többségük végig velünk tartott. Elgondolkodtató párbeszéd alakult ki a mesterséges intelligencia témakörében, illetve sok-sok kreatív megoldás került elő a logikus gondolkodás program fejtörőivel kapcsolatosan. Néhányan megragadták a lehetőséget, hogy több budapesti helyszínt is meglátogassanak – ahogyan ez megszokott a Kutatók éjszakája rendezvényeken hosszú évek óta. Kellemes hangulatban, tartalmasan töltöttük együtt ezt a három órát, aminek igazán örülök.

Szeretném megköszönni az előadó oktató kollégák és alumni hallgatóink 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 2024 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é.

Euler állatos feladata – geometriai megközelítés

EulerAllat

EulerAllatValaki sertést, kecskét és juhot vásá­rolt, összesen 100 állatot, pontosan 100 aranyért. A sertés darabja 3 és fél arany, a kecskéé 1 és egyharmad, a juhoké fél arany. Hány darabot vehetett az egyes állatokból?

Tudjuk, hogy a feladatnak három megoldása van:

  • 5 db sertés és 42 db kecske és 53 db juh
  • 10 db sertés és 24 db kecske és 66 db juh
  • 15 db sertés és 6 db kecske és 79 db juh

Klasszikus informatikai megközelítést – egymásba ágyazott ciklusokat – bemutattam már: Euler állatos feladata. A brute force alapgondolat fokozatos finomítását követően néhány ötleteket is adtam a továbbfejlesztéshez. Ez igazi örökzöld feladat. Látogatottsága alapján rendületlenül népszerű ez a blog bejegyzés az it-tanfolyam.hu szakmai blogban. Többek között ez inspirált a feladattal való további foglalkozásra.

Mit jelent a geometriai megközelítés?

Egy térbeli pont három koordinátával leírható. Az (s, k, j) ponthármas jelenti a sertések, kecskék és juhok számát. Az RGB színkockához hasonlóan (amibe belefér az összes ábrázolható színhez tartozó koordinátapont), most is elférünk egy kockában. Legyen a kocka egyik csúcsa az origó és az élei legyenek 100 egység hosszúak. A feladat megfogalmazása alapján két egyenlet (e1 és e2) írható fel 3-3 együtthatóval. Mindkét egyenlet meghatároz egy síkot (s1 és s2) a térben, amelynek ábrázoljuk a kockába eső síkmetszeteit. A két sík metszésvonala egyenes (e3), amire esnek a megoldások pontjai (m1, m2, m3). Lépésenként haladunk a geometriai ábrázolás során.

A grafikus felületen történő ábrázoláshoz, rajzoláshoz két korábbi projektünkből indulunk ki. A Kígyókocka grafikus felületen feladat ismertet egy grafikus keretrendszert JavaFX-ben megvalósítva. A három részből álló Naprendszer szimuláció esettanulmányunk pedig ismerteti az ábrázoláshoz szükséges elméleti hátteret, homogén transzformációkat, vetületi leképezést, Java forráskódot is bemutat a transzformációs mátrix alkalmazására.  Az eddig említett három blog bejegyzést mind összeépítve készültek a továbbiak.

A geometriai megoldást lépésenként, saját fejlesztésű, grafikus felhasználói felülettel rendelkező, JavaFX alapú programról készült képernyőképek mutatják be – markáns Java forráskód-részletekkel.

Hogy jelenik meg a megoldásokat tartalmazó kocka?

Elegendő ábrázolni a kockának azt a három élét, amik egybeesnek a koordinátatengelyekkel. Az RGB színkockához hasonlóan piros, zöld, kék színekkel jelennek meg a három tengelyen lévő néhány pont. Az ábrázoláshoz érdemes kísérletezni egy kicsit: mekkora méretben (skála), honnan (nézőpont), milyen messziről (vetület, ideális pont, perspektíva, távolság) látszik a modelltérbeli objektum (igen, ez a kocka).

Az alábbi Java forráskód-részlet helyezi el a fenti pontokat. Mindhárom tengelyen 5-től 95-ig, 10-esével haladunk. Így elkerülhető, hogy az origóba kerüljön pont, hiszen az nem tudna egyszerre három színnel megjelenni. Mivel az állatok száma pozitív, így a koordinátapontok is nemnegatívak.

Hol vannak az első egyenlet síkjának pontjai?

A korábbi megoldásnál feltételként megfogalmazott első 3.5*s+4.0/3*k+0.5*j==100 egyenlet egyszerű átalakításokkal megadja a piros és zöld síkbeli ponthoz tartozó kék térbeli pontot: j=(600-21*s-8*k)/3. Ezek az s1 síkra esnek. A citromsárga pontokat páros koordinátapárokra vizsgált feltétel jelöli ki. A narancssárga vonal behatárolja ezt a síkmetszetet. Ez a négyszög (trapéz) esik bele a kockába.

A citromsárga pontokat az első egymásba ágyazott ciklusok adják hozzá az ábrázolt modelltérhez: érzékeltetve a síkbeli pontokat. A narancssárga pontokkal a második egymásba ágyazott ciklusok bővítik a modellteret: behatárolva a kockabeli négyszög síkrészletet. (A trapéz oldalait szakaszként is lehetne ábrázolni, de ez a kellően sűrű ponthalmaz is elegendő).

Hol vannak a második egyenlet síkjának pontjai?

Hasonlóan az eddigiekhez. A korábbi  s+k+j==100 feltételből adódik a szintén feltételként megfogalmazott  j==100-s-k egyenlet. Ezek az s2 síkra esnek. Világosszürke pontok érzékeltetik a síkot és sötétszürke pontok adják a síkrészlet határait. A síkból ez a háromszög esik bele a kockába.

A Java forráskód nagyon hasonló az előzőhöz.

Hogyan helyezkedik el a két sík a kockában?

Egyben kirajzoltatva a fentieket, könnyen adódik ez az ábra:

Hol van a két sík metszésvonala?

Mivel a két sík nem esik egybe, így van metszésvonaluk. Ez egy egyenes, amiből csak az az e3 szakasz rész szükséges, ami a kockába esik. Bíbor (magenta) szín jelöli az alábbi ábrán:

Ahol a két egyenlethez tartozó konkrét pontok egybeesnek, ott van a metszésvonal. A behelyettesítést behatároló ciklusok szervezéséből (a ciklusváltozók alsó és felső és határaiból) adódik, hogy csak a kockabeli szakaszt rajzolja ki az alábbi Java forráskód-részlet:

Hol jelenik meg a feladat három megoldása?

A két egyenlethez tartozó síkok kockába eső metszésvonalán helyezkednek el az egész koordinátákkal ábrázolható, koordináta-hármasként megjelenő pontok. Nagyobb fehér pontok jelölik ezeket az alábbi ábrán:

Az eddigiek alapján könnyen adódik a három pont/megoldást ábrázoló Java forráskód-részlet:

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

Ez a feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlési szerkezetek, illetve 9-12. óra: Metódusok, rekurzió alkalmához, a 29-36. óra Grafikus felhasználói felület alkalmaihoz, valamint minden tanfolyamunk orientáló moduljának 1-4. óra: Programozási tételek alkalmához kapcsolódik.

Tanfolyamainkon JavaFX grafikus felülettel hangsúlyosan nem foglalkozunk, de egy-egy kész forráskódot közösen megbeszélünk, és össze is hasonlítjuk a swing-es változattal. Fejlesztünk játékprogramot, de inkább konzolosan, vagy swing-es ablakban, vagy webes alkalmazásként.

A grafikus felületek felépítésének megismerése fontos lépcső az objektumorientált programozás elmélyítéséhez, gyakorlásához. A grafikus felületekhez egy másik lényeges szemléletváltás is kapcsolódik, hiszen a korábbi algoritmusvezérelt megközelítést felváltja az eseményvezérelt (eseménykezelés). A GUI-s feladatainkat tudatosan hangsúlyozott MVC-s projektekben készítjük el.