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!

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.

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.

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.

Tankocka – Hozzárendeléses táblázat: Java kollekciók

Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban a Java kollekciók közül a halmaz adatszerkezeteket megvalósító osztályok tulajdonságait kell hozzárendelni a táblázatban. Ez a témakör mindhárom tanfolyamunkhoz kötődik: Java SE szoftverfejlesztő tanfolyam, Java EE szoftverfejlesztő tanfolyam, Java adatbázis-kezelő tanfolyam.

Érdemes ismerni a kollekció keretrendszer további osztályainak/interfészeinek tulajdonságait, viselkedésüket: tömb, lista, sor. (Esetleg egyebeket is: verem, prioritásos sor, többdimenziós adatszerkezetek, kulcs-érték pár alapú elérés, adatszerkezetek egymásba ágyazása). Hasznos tudni, hogy melyiket mikor érdemes vagy éppen nem érdemes használni. Melyik a gyorsabb? Milyen karbantartó műveleteik vannak? Lehetnek-e bennük egyedi elemek, ismétlődések? Mitől függ az elemek sorrendje? Van-e indexe? Hogyan járható be/végig? Biztosít-e iterátoron keresztül hozzáférést az elemekhez? Használható-e többszálú környezetben? Szálbiztos-e az adott kollekció?