Programozási alapok K-MOOC online kurzus az Óbudai Egyetemen

Az Óbudai Egyetemen 2014-ben megalakult a KÁRPÁT-MEDENCEI ONLINE OKTATÁSI CENTRUM (K-MOOC), amelynek egyik fő célja, hogy biztosítson kredittel elismert online oktatási formát a Kárpát-medencei, részben, vagy egészben magyar tannyelvű képzést folytató felsőoktatási intézmények hallgatói számára, illetve egy oktatási formát az élethosszig tartó tanulás megvalósítására. A pályázat célja, hogy a K-MOOC hálózatához csatlakozott felsőoktatási intézmények bekapcsolódjanak a kurzuskészítés és meghirdetés folyamatába. Ezzel gazdagítják a kurzusok tárházát és az elérhető tudományterületeket is. Lehetőséget teremtenek az oktatók számára a meglévő kredit értékű tárgyaik megújítására. A korszerű tananyagok kifejlesztése hozzájárul a képzés színvonalának növeléséhez.

2016 tavaszán az ÓE meghirdette Online kurzusok fejlesztésére magyarországi és határon túli magyar oktatási nyelvű felsőoktatási intézmények oktatói számára című pályázatát.

A pályázat keretében fejlesztett tananyagokaz a K-MOOC keretében publikálták. A tananyagok kidolgozásánál a pályázónak alkalmazói szinten ismernie kellett a kurzust működtető keretrendszert. A Moodle esetében kötelező volt figyelembe venni a Moodle szabványait. A tananyagfejlesztés tevékenységnek minden esetben online elérhető, oktatásban alkalmazható, tantárgykövetelményhez igazodó végtermékkel kell zárulnia. A pályázathoz 4 félévre szóló fenntartási kötelezettség is kötődött. A pályázónak vállalnia kellett, hogy a kurzust 4 oktatási félévig menedzseli a K-MOOC keretében, mialatt a kifejlesztett tananyagot aktualizálni kellett. A kurzus moduljainak minimális száma meghatározott volt, ahogyan egy-egy modul kötelező elemei is: cél, követelmény, időszükséglet, tartalom, önellenőrzés, ellenőrzés.

A Programozási alapok című tananyagommal pályáztam és nyertem.

Az online kurzus célja volt, hogy megismertesse a programozás alapfogalmait, megismertesse az alapvető strukturált és objektumorientált programozási technikákat, megismertesse egy programozási nyelv (Java) és osztálykönyvtár filozófiáját, stabil eligazodást nyújtson különböző feladattípusok, sémák, módszerek, paradigmák és programozási tételek között, tervezési és programozási stílust alakítson ki.

Az online kurzus értékelése így zajlott. Gyakorlati jegyet kellett szerezni a szorgalmi időszakban. Mindig 4 db előre bejelentett számonkérés volt, ebből 2 db elméleti teszt, amely 20-20%-ot jelentett és 2 db kódolási feladat, amely 30-30%-ot jelentett. A tesztkérdések témakörönként véletlenszerű kiválogatása 200-nál több kérdésből álló publikus tesztkérdés-gyűjteményen alapult. A elméleti részek előtt korlátlan számú anomin gyakorlási lehetőség volt adott és a számonkérő alkalmak során egy alkalommal időkorlátosan volt elérhető a teszt. A kódolási feladatok a tantárgyhoz tartozó példatár (200-nál több Java nyelvű forráskód) elemeihez hasonló feladatok voltak, időkorlátosan voltak elkészítendők. A feladatkiírások részletesen specifikáltak voltak, a megoldások konstruktív problémamegoldást igényeltek, értő szövegolvasási készséggel kellett rendelkezni, értelmesen gondolkodni kellett tudni, lépésekre, tanult alapelemekre kellett tudni bontani a tervezés során a feladatot, valamint a megszerzett tudást alkalmazni/átültetni/testre szabni/paraméterezni volt szükséges.

Az online kurzus tematikájának elemei – jelentősen kibővítve – belekerültek a Java SE szoftverfejlesztő tanfolyamunk tematikájába.

Az online kurzus a 2016/2017-es és a 2017/2018-as tanév őszi és tavaszi féléveiben is meghirdetésre került. A pályázathoz kötődő 4 féléves fenntartási kötelezettség a mai nappal lezárult. Sok-sok hallgató felvette a kurzust. Sokan lemorzsolódtak, de sokan teljesítették is. Mindegyik félév szorgalmi időszakában szinte állandó, aktív szakmai párbeszéd folyt az online kurzus fórumain, chat formájában. Döntően önszerveződő volt a kommunikáció, a témák orientálásán túl moderálásra nem volt szükség. Elenyésző volt a „nem találom, hová kell kattintani”, illetve a „lemaradtam a feladat leadási határidejéről, nem-e lehetne-e-e-e még beadni” jellegű üzenetek aránya.

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

érettségi logó

érettségi logóA 2018-as középszintű matematika érettségi feladatsor 10. feladata inspirált arra, hogy a programozás eszköztárával oldjuk meg ezt a feladatot. Szükséges hozzá néhány programozási tétel: sorozatszámítás, eldöntés, kiválasztás. É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.

10. feladat

Adja meg az alábbi adathalmaz móduszát, mediánját és terjedelmét!
2; 6; 6; 6; 6; 6; 3; 3; 4; 4; 4; 5; 5; 5; 5

Tervezés

A Java 8 által biztosított újdonságok közül használunk néhányat. Célszerű konstans tömbben tárolni a megadott számsorozatot, ami könnyen konvertálható generikus listába. Alkalmazkodni kell ahhoz, hogy a lista indexelése 0-tól lista.size()-1 -ig értelmezhető. Hasznos, ha a konkrét feladatok helyett általános megoldásokban gondolkodunk és a feladatot 3 metódusra bontjuk, amelyek ellenőrzéseket is végeznek. Például extrém esetek:

  • ha a lista üres, akkor nincs módusz, medián, terjedelem,
  • ha a lista egyetlen elemből áll, akkor a módusz és a medián megegyezik az elemmel, a terjedelem pedig nulla,
  • ha leggyakrabban több különböző szám is előfordul, akkor a módusz ezek közül a (leg)kisebb számot adja vissza.

Elvárjuk, hogy probléma esetén a metódusok dobjanak kivételt. Lényeges, hogy a referencia szerinti paraméterátadás során megváltozna a listában az elemek sorrendje, mert a megoldás igényli az elemek rendezettségét, akkor készüljön másolat az adatszerkezetről, hogy egy-egy részfeladat megoldása nem járjon azzal a mellékhatással, hogy az eredeti adatszerkezetben megváltozik az elemek sorrendje. Felhasználjuk a primitív típusú változók és a csomagolóosztályok közötti konverziós lehetőségeket: autoboxing és unboxing.

Megoldás: módusz

A módusz a lista leggyakoribb értékét adja meg. Másképpen az az érték, amelyik az adatsorban a legtöbbször előfordul.

A modusz() metódus átveszi a szamLista-t és készít róla lista néven egy másolatot, majd utóbbit növekvő sorrendbe rendezi. A másolat a Stream API-val készül el. Ezután csoportváltás algoritmussal feldolgozza a listát. Egy csoportba az azonos számok kerülnek és léptetés közben a belső ciklus megszámolja, hogy hány azonos szám alkotja az aktuális csoportot. Végül összehasonlítás következik a szélsőérték-kiválasztás ( aktSzamDb>maxAktSzamDb) beépítésével.

Megoldás: medián

A medián a lista középső értéke, amelynél az ennél kisebb és nagyobb elemek száma azonos. Rendezett adatsornál páratlan elemszám esetén a középső elem, illetve páros elemszám esetén a két középső elem átlaga.

A median() metódus átveszi a szamLista-t és készít róla lista néven egy másolatot, majd utóbbit növekvő sorrendbe rendezi. Ezután páros elemszám esetén visszaadja a két középső elem átlagát, illetve páratlan elemszám esetén a középső elemet. A metódusnak valós értéket ( double) kell visszaadnia, mert a két középső elem átlaga nem feltétlenül egész szám.

Megoldás: terjedelem

A terjedelem azt mutatja meg, hogy mekkora értékközben ingadoznak a lista elemei. A terjedelem az adatok változékonyságának „legdurvább” jellemzője, ami a szélsőértékek (minimum és maximum) közötti különbséget jelenti.

A terjedelem()  metódus átveszi a szamLista-t paraméterként és visszaadja a két szélsőérték különbségét, amelyek a Collections  osztály metódusaival könnyen előállítható. Persze egyetlen ciklussal is megkaphatnánk a két szélsőértéket.

Eredmény

A vezérlést az alábbi main()  metódus végzi el:

A konzolon az alábbi eredményt kapjuk:

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

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 feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 17-28. óra: Objektumorientált programozás alkalmaihoz kötődik.