Tankocka – Egyszerű sorbarendezés: Java forráskód

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban helyes sorrendbe kell állítani a Java forráskód sorait. Ez főként a Java SE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

A Java program véletlenszerű ötöslottó szelvényt állít elő. Adatszerkezetként generikus listát használ: létrehoz, bővít, karbantart, rendez, listáz. Amikor csak lehet, épít a kollekció beépített képességeire (eldöntés, sorozatszámítás, rendezés). Az eldöntés a véletlenszámok egyediségéhez kapcsolódik: tartalmazza-e a lista az új generált véletlenszámot? A sorozatszámítás a kiíráshoz kapcsolódik: a lista minden elemével ugyanaz a művelet történik. A rendezés miatt a megfelelően az ötöslottó szelvényen tárolt számok „emelkedő számsorrendben” jelennek meg. Ez a kifejezés tipikusan része a szakterület szókincsének. A konzolos kiírás kompromisszuma a lista kiíró metódusára építve megjeleníti a szögletes zárójelpárt. Autoboxing is megjelenik megvalósításban. A forráskódban nincs jelölve a csomag, importok, behúzás, tagolás, igazítás. Hajrá: fogd-és-vidd módszerrel!

Tankocka – Párkereső: csomag, osztály, interfész

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban 12 összetartozó párt kell megtalálni az ismert Java csomagok, osztályok, interfészek témakörben. Ez a témakör mindhárom tanfolyamunkhoz kötődik: Java SE szoftverfejlesztő tanfolyam, Java EE szoftverfejlesztő tanfolyam, Java adatbázis-kezelő tanfolyam. Ezek egyszerű lexikális ismeretnek tűnhetnek, de jóval túlmutat azon.

Tipikus hibaforrás, ha az osztály és/vagy interfész neve a különböző csomagok esetén megegyezik és megszokásból, rutinból, figyelmetlenségből rossz csomagból importálunk. Nem biztos, hogy rögtön triviális: mi a hiba, miért az a hiba, hogyan oldjuk meg. Például Timer osztály van a java.util és a javax.swing csomagokban is és nagyon nem mindegy, hogy mikor melyiket (és persze mire, hogyan) használjuk.

Egy matematika érettségi feladat megoldása programozással 2022

érettségi logó

érettségi logóA 2022-es középszintű matematika érettségi feladatsor eléggé egyszerű volt, de azért a 6. feladata inspirált arra, hogy a programozás eszköztárával oldjuk meg ezt a feladatot. Szükséges hozzá a megszámolás programozási tétel. Többféle megoldás/megközelítés (iteratív és rekurzív) is előkerül. Érdekes belegondolni, hogy mennyire más lehetne a problémamegoldás, ha programozhatnánk a matematika érettségi vizsgán. A teljes feladatsor a megoldásokkal együtt letölthető az oktatas.hu-ról.

6. feladat

Egy feleletválasztós teszt 5 kérdésből áll, minden kérdésnél négy válaszlehetőség van. Hányféleképpen lehet az 5 kérdésből álló tesztet kitölteni, ha minden kérdésnél egy választ kell megjelölni?

1. megoldás

Rögtön tudjuk, hogy ez kombinatorika, n elem k-ad osztályú ismétléses variációja, amelynek paraméterei: n=4, k=5. A hatványozás azonosságainak ismeretében fejből is tudjuk a megoldást: 45=210=1024. A Java forráskód elvégzi a hatványozást. A Math.pow() függvény általánosabb, mint amire most szükségünk van. Fogad double valós paramétereket és double típusú értékkel tér vissza. Ezért hasznos az (int) explicit típuskényszerítés.

Másképpen: négy elemű halmazból öt elemet kiválasztunk és ezeket sorba rendezzük (permutáljuk) és egy elemet egy csoportban akár ötször is felhasználhatunk. Számít a sorrend. A lehetséges variációk száma: 1024.

2. megoldás

Ha hasznos lenne egy általános metódus az ismétléses variáció kiszámítására, akkor ez egy tipikus megoldás lehet erre. Kiegészítendő még a két paraméter előjelének ellenőrzésével.

3. megoldás

Ha a megértést segíti, akkor a teljes leszámolás (brute force) módszerével, egymásba ágyazott ciklusokkal könnyen kiírathatjuk a konzolra az 1024 db különböző válaszlehetőséget. A k-val kezdődő sorszámozott ciklusváltozók jelölik az öt kérdést, azon belül az 'a'-tól 'd'-ig karakterek adják a válaszlehetőségeket. Eredményül ezt kapjuk (görgethető):

4. megoldás

Ha csak a végeredmény szükséges, akkor ez az iteratív megoldás a megszámolás programozási tétellel előállítja azt.

5. megoldás

Ez egy rekurzív megoldás. Ciklus helyett a metódus önmagát hívja meg, így valósul meg az ismételt utasításvégrehajtás. A válaszlehetőségek összefűzésével (konkatenáció) előállított válasz akkor megfelelő, ha annak hossza öt. Ez esetben kiíródik a válaszlehetőség a konzolra (mintegy mellékhatásként). Ugyanazt az eredményt kapjuk, mint a 3. megoldásnál.

6. megoldás

Szintén, ha csak a végeredmény szükséges, akkor ez a mellékhatással rendelkező rekurzív metódus előállítja azt. A mellékhatás most az, hogy a metódus eljárás és nem függvény és szükséges hozzá a db osztályváltozó (ami a metódushoz képest globálisnak is tekinthető).

7. megoldás

Ez a megoldás a válaszlehetőségeket megfelelteti n alapú számrendszerben k számjegyből álló számoknak. A kétdimenziós tömbben számokat tárol, így:

  • 1,…,1,1 → 0…0000
  • 1,…,1,2 → 0…0001
  • 1,…,1,n → 0…001(n1)
  • 1,…,2,n → 0…001(n1)
  • n,…,n,n → (n1)...(n1)

Végül a kiíró ciklus ezeket a számokat karakterekké alakítja ( 'a' ASCII kódja 97) és fordított sorrendben írja ki, hogy ugyanazt az eredményt kapjuk, mint a 3. megoldásnál.

Továbbfejlesztési lehetőségek

  • A 2. megoldáshoz: teszteljük le a lehetséges túlcsordulást és az int típus helyett szükség esetén használjunk long típust!
  • A 3. megoldáshoz: építsünk kétdimenziós tömb adatszerkezetet, amiből később az i-edik válaszlehetőség megadható!
  • Előzőhöz: állítsuk elő lexikografikus sorrendben az i-edik válaszlehetőséget adatszerkezet felépítése nélkül!
  • A 6. megoldáshoz: valósítsuk meg a rekurzív gondolatmenetet mellékhatás nélkül!
  • Teszteljünk: mennyi idő alatt hajtódik végre a 4. és a 6. megoldás? Mekkora paraméterekkel érzékelhető, hogy a rekurzió jóval lassabban fut?
  • A 7. megoldáshoz: cseréljük le az egésztömb adatszerkezetet karaktertömbre!

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

Ajánljuk matematika érettségi feladat címkénket, mert a témában évről-évre blogolunk.

A feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlési szerkezetek, valamint 21-24. óra: Objektumorientált programozás 1. rész alkalmaihoz kötődik.

Tankocka – Hiányos szöveg: objektumorientált programozás

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban ki kell egészíteni az objektumorientált programozás bevezetéséhez tartozó hiányos szöveget. Ez főként a Java SE szoftverfejlesztő tanfolyamunk tematikájához kötődik.

Kiemelten fontos, hogy az OOP alapfogalmaival, összefüggéseivel tisztában legyünk. Ez a közös szakmai szókincs alapvető része. Enélkül gyakorlatilag nincs is miről beszélni. Kapcsolatok, időbeliség, ok-okozati összefüggések ismerete szükséges az OO tervezéshez. Enélkül egy feladatspecifikációból kiindulva, az alapján nem tudunk egyértelműen és hatékonyan modellezni. OO modell nélkül egy komolyabb feladat nem oldható meg. Mindez (az OO modellezés és az OO tervezés) oda-vissza kölcsönösen segíti az adatbázis adatmodellező, objektumrelációs leképező tevékenységét is. Mindez a csoportmunkához is szükséges, hiszen többnyire nem egyedül végezzük feladatainkat a szoftverfejlesztés során.

Digitális Témahét 2022

A Digitális Témahét 2016-ban indult országos rendezvénysorozat. Fő célja a digitális pedagógia módszertanának népszerűsítése és elterjesztése. A program fontos törekvése, hogy a digitáliskompetencia-fejlesztés az informatikán túl kiterjedjen más tantárgyakra is. A résztvevő pedagógusok és diákok változatos és kreatív iskolai projektek keretében fejleszthetik képességeiket technológiával támogatott tanulás során. A Digitális Témahét rendezvény minden meghirdetett programja ingyenes. A 2018/2019-es tanévben már több mint 3000 oktatási projekt valósult meg, közel 8000 pedagógus és 135000 diák részvételével.

A 2021/2022-es tanévben a rendezvény április 4-8. között valósult meg. Témakörök/szempontok:

  • a multidiszciplináris megközelítés: a matematika, a természet- és mérnöki tudományok, valamint a művészet- és társadalomtudományok együttes megjelenítése;
  • a digitális technológia alkotó használata és az algoritmikus gondolkodás fejlesztése;
  • a kiemelt figyelmet igénylő tanulók fejlesztése és bevonása;
  • a nevelési-oktatási intézmények közötti együttműködés élénkítése;
  • a határon túli magyar pedagógusok és oktatási intézmények bevonása;
  • a digitális biztonság a mindennapi pénzügyeinkben;
  • az intézményen belül történő pedagógus közötti együttműködés élénkítése, a projektmódszer alkalmazásának kiterjesztése olyan kollégákra, akik még nem ismerik;
  • ebben a tanévben kiemelten: digitalizáció a 21. században, digitális írástudás és digitális gyermekvédelem, mesterséges intelligencia.

Rendezvényünk plakátja

Az it-tanfolyam.hu 2022-ben is csatlakozott a rendezvénysorozathoz. Oktatóink meghirdettek öt programot a https://digitalistemahet.hu weblapon. A programjainkra 2022. április 8-án 18:00-21:00 óráig került sor.

Köszönöm oktató kollégáimnak, hogy örömmel csatlakoztak. Mindannyian jól éreztük magunkat. Igazán tartalmas programot állítottunk össze. Idén is szívesen csatlakoztunk és szívesen emlékszünk majd rá. A résztvevőinknek is köszönjük, hogy ellátogattak hozzánk. Újra az offline világban találkozhattunk.

A „Tervezzünk közösen kommunikációt gyűjtögető robotok között!” című interaktív előadásomat a Digitális Témahét 2022 rendezvényhez tartozó több partnerintézményben is megtartottam jelenléti és online formában is.