Követelmények, értékelés

2019.10.28.

Követelmények a Programozás alapjai tárgyban. Osztályzás, pontozás, néhány szó az elvi hibákról.

A programozás témakör oktatása az első félévben heti háromszor két órában történik: előadás és géptermi, laboratóriumi órák.

1. A tárgy követelményei

A tárgy adatlapja: https://www.vik.bme.hu/kepzes/targyak/VIEEBA01/.

Szorgalmi időszakban

A félév végi aláírás feltételei:

  • Jelenlét: az órákon (előadás, labor) való rendszeres részvétel. A hiányzások megengedett mértékét a TVSz rögzíti (30%). A notórius késők hiányzónak számítanak.
  • A laborgyakorlatokon a felkészültséget szintfelmérővel (beugróval) ellenőrizhetjük, amelynek anyaga az adott laborhoz tartozó előadás anyagával kapcsolatos. A beugró lehet rövid dolgozat, házi feladat vagy órai feladat is. Sikertelen beugró esetén az adott laboralkalom nem teljesítettnek számít, de ez nem jelenti azt, hogy nem szabad részt venni rajta (sőt kifejezetten javasolt).
  • Kis zárthelyik (ellenőrző dolgozat): a félév során hat alkalommal kis zárthelyit íratunk. Ezek közül a legjobban sikerült négy eredményét vesszük figyelembe; azoknak az összpontszáma kell elérje a szerezhető pontszám 50%-át. A meg nem írt dolgozatok pontszámát nullának tekintjük.
  • Nagy zárthelyi (összegző értékelés): a szorgalmi időszak alatt egy alkalommal, az évfolyam terhelési táblázata szerinti időpontban nagy zárthelyi dolgozatot íratunk. A pontszáma el kell érje a szerezhető pontszám 50%-át.
  • Nagy házi feladat (részteljesítmény értékelés): minden hallgatónak egy egyéni nagy házi feladatot kell megoldania, önálló munkával. Ennek elfogadható szintű teljesítése a félév követelménye. A nagy házi feladatokat az 5. héten adjuk ki és a 12. héten kell beadni a megoldásokat. Az előrehaladást a félév közben ellenőrizzük, és az értékelésnél figyelembe vesszük. A házi feladatra kapott pontszám el kell érje az erre szerezhető pontszám 50%-át.

A laborokon a jelenlét az aktív munkát jelenti, nem elég csak ott ücsörögni. Ha a laborvezető úgy látja, hogy nem a feladatokkal foglalkozol, megtagadhatja a jelenlét megadását. Az órák végén a feladatok megoldásait a portálra fel kell tölteni. Ha előbb végzel, a megoldott feladatokat a laborvezetőnek be kell mutatni. Amennyiben viszont szó nélkül lelépsz, az hiányzásnak számít, még akkor is, ha a megoldásokat amúgy feltöltötted. A laborvezető a bemutatáskor kérheti a hibás, hiányos megoldások javítását, illetve pótlását.

Minden héten két laboralkalom van. Ha az összes megoldást bemutatod az első alkalmon, akkor a másodikon már egyáltalán nem kell részt venni. Ha ez kifejezetten célod, akkor az elsőn be kell mutatnod az összes feladatmegoldását – akár előre elkészítve, otthoni munkában. Amennyiben a bemutatás nem történt meg, akkor a második alkalmon is meg kell jelenned, még akkor is, ha csak bemutatni kell jönnöd.

A felkészülést egyéni szorgalmi feladatok is segítik, melyek megoldása nem kötelező. A határidőre és sikeresen megoldott szorgalmi feladatokkal extra pontok szerezhetők, amelyeket a megajánlott jegy kialakításánál veszünk figyelembe.

Vizsgaidőszakban

  • Írásbeli vizsga.

Félév végi osztályzat

  • Aki a félévközi eredményekkel kiváló eredményt ért el, megajánlott jelest kap: max(KZH1, KZH2) + max(KZH3, KZH4) + KZH5 + KZH6 + első(NZH, PZH) + NHF + szorgalmi >= 90 pont. Vagyis a nagy ZH és pót ZH közül az első megírt számít a megajánlott jegy pontszámába, nem a jobban sikerült (így nincs is értelme javítás céljából megírni). A kis ZH-knál páronként a jobban sikerült számít; kivéve az utolsó párt, ahol mindkettő.
  • A megajánlott jeggyel rendelkezők számára külön kiírunk egy vizsgaalkalmat. Ezt a vizsgát fel kell venni, különben a jegy elveszik (nem tudjuk hova beírni). Egyéb teendő nincs, megjelenni nem kell, a jegy automatikusan bekerül.
  • Vizsga esetén az érdemjegy meghatározásánál az alábbi pontszámokat vesszük figyelembe:
    • 80 pont – vizsgadolgozat 2× súllyal (2×40 pont)
    • 20 pont – nagy házi feladat
    Az érdemjegy: 0-39 pont: elégtelen, 40-54 pont: elégséges, 55-69 pont: közepes, 70-84 pont: jó, 85-100 p: jeles

A nagy házi feladat részfeladatainak határidőre leadása beleszámít annak pontozásába.

Vizsgakurzuson

A vizsgák ugyanolyan felépítésüek, mint az őszi félévben. A jegy csak a vizsgán elért eredményre jár. A pontok a fentiekkel egyező arányokkal: 0-19 pont: elégtelen, 20-25 pont: elégséges, 26-29 pont: közepes, 30-33: jó, 34-40: jeles.

2. Pótlási lehetőségek

  • A jelenlét és a laborgyakorlatok beugrói nem pótolhatóak.
  • A kis zárthelyik félév közbeni pótlását az teszi lehetővé, hogy hatból csak a legjobb négyet vesszük figyelembe. Pótlási héten ezek már nem pótolhatóak.
  • Nagy zárthelyi pótlására egy alkalommal a félév közben, és egy alkalommal a pótlási héten van lehetőség. Az utóbbi már különeljárási díjas. Pótlási héten írt ZH-val megajánlott jegy nem szerezhető.
  • A nagy házi feladat javítására vagy pótlására a szorgalmi időszak végéig (utolsó tanítási napon, 14.00 óráig), azon túl a nagy házi feladat nem adható be. Pótlás esetén különeljárási díj fizetendő. Javítani csak előzőleg már elfogadott megoldást lehet.
  • A megajánlott jegy beírásához a megfelelő vizsgaalkalmat fel kell venni. Ez nem pótolható; ha nincs vizsgaalkalom felvéve, nem tudjuk hova beírni a jegyet.

A különeljárási díjakat a NEPTUN-ban írják ki központilag a KTH-ból, de csak jóval a félév után, általában január végén.

A pótlásként leadott nagy házi feladatot is be kell mutatni a laborvezetőnek, ha az addigi bemutatások során nem volt értékelhető állapotban. Ennek legvégső határideje a pótlási hét keddje, az időpontot a laborvezető határozza meg.

3. Konzultációk

Kérés alapján tartunk személyes konzultációkat, amelyeket az admin portálon is meghirdetünk. Ezekre bárki eljöhet, jelentkezés után.

Kérdéseket feltenni az admin portálon az oktatóknak is lehet, vagy bármelyik laboron a saját laborvezetőitekhez is fordulhattok programozással, házi feladattal kapcsolatban!

4. A számonkérésekről általában

A nagy HF leadásához egy olyan programot kell elkészíteni, amely a félévben tanult ismereteket, algoritmusokat és adatszerkezeteket használva valósítja meg a kiírt feladatot. A programot forráskód formájában kell beadni, teljes dokumentációval, és be is kell mutatni a laborvezetőnek.

A kis ZH-k 15–20 percesek. Ezeken egy A/5-ös lapon kell megoldani egy egyszerű feladatot. A feladatgyűjtemény rengeteg régi kis ZH feladatot tartalmaz, ott látható, hogy néz ki egy ilyen. A nagy ZH-k három-négy nagyfeladatból állnak (4×10=40 vagy 2×10+1×20=40 pont). Jegy erre sem jár, csak pontszám. A honlapon régebbi feladatsorok is elérhetőek.

A nagy ZH-kon használató a hivatalos puska. Egy darab A4-es oldal két oldalára kell kinyomtatni, szigorúan változtatások nélkül.

A számonkéréseken alapvetően a programok működőképességét ellenőrizzük, de ez nem jelenti azt, hogy bármilyen működő megoldás maximum pontot ér. Az észszerűtlen, durván hatékonytalan megoldások kevesebb pontot kapnak. Pontlevonás jár az átgondolatlan, „macskakörmözött”, kipontozott, „a másik fele ugyanígy” megjegyzéssel ellátott részekért, sormintákért. Pontlevonás jár a nem megfelelő nyelvi eszközök használatáért is. Összefoglalva: legjobb értékelést csak olyan programkódok kapnak, amelyek nem csak helyesek, hanem jók is.

A feladatokra egy megoldást kell adni. Ha több megoldást kapunk ugyanarra a feladatra, akkor találomra az egyiket javítjuk, vagy levonjuk a pontot az összesben lévő hibákért. A kommentek nem számítanak a feladat megoldásának, ugyanakkor részei a kódnak; a bennük lévő szakmai tévedésekért vagy inkonzisztenciáért pontlevonás jár. Ugyanez a helyzet a többlet kóddal: a feladat megoldásához hozzátartozik az is, hogy érteni kell, mit vár a feladat, és mit nem.

Egyéb általános tudnivalók:

  • Ügyelni kell a specifikáció pontos betartására. Ha függvényt kell írni, akkor a függvényre, az abba írt kódra, és a meghívására jár a pont. Külön specifikált függvények teendői nem keverendőek; az egyes függvények kódjába nem „folyhat bele” más feladatrészek megoldása. Pontlevonás jár érte, ha a függvényből bizonyos dolgok kifelejtődtek, esetleg máshol történtek meg (pl. ha a függvény dolga lenne egy listát nullával feltölteni a használat előtt). Ha a feladat külön megköti, melyik megírandó függvénynek mi a dolga, akkor hiba máshol elvégezni azokat a teendőket.
  • Különös tekintettel vagyunk a függvények mellékhatásaira. A függvények lényege, hogy többször felhasználhatóak, ezért akkor is helyesen kell tudniuk működni, ha többször meghívják őket. „A feladatban csak egyszer kellett meghívni” – ez nem lehet hivatkozási alap egy pontvesztés reklamációjánál.

ProgAlap specifikus kitételek:

  • A számonkéréseken elvárás a main() függvény használata onnantól kezdve, hogy a függvények szerepeltek a tananyagban. Ez akkor is érvényes, ha a feladat szövege kifejezetten nem kér ilyet.
  • Bár a Pythonban az osztályok adattagjai dinamikusan létrehozhatóak, a tárgyban elvárás az __init__ függvényben létrehozni az összeset – akkor is, ha esetleg None értéket kapnak.

A szorgalmi feladatok javítása a ZH-kénál szigorúbb. Itt visszautasítás oka lehet a helytelen kódolási stílus, még amúgy jól működő program esetén is. A megoldást többször is le lehet adni, de a jelzett hibákat mindenképp javítani kell.

5. Megtekintés, reklamáció

A nagy ZH-k megtekintését is központilag szervezzük. Itt lehetősége van mindenkinek megnézni, hogy milyen hibái voltak. A megtekintésekre a nagy létszám miatt a portálon jelentkezni kell. Reklamálni helyben nem lehet; az esetleges reklamációt másnap reggelig kell feltölteni a portálra, mint bármelyik beadandót.

A reklamáció célja a javító hibájának korrigálása. Vagyis akkor lehet reklamálni, ha nincs megadva olyan pont, amit a javítási útmutató szerint meg kellett volna adni. A beküldött reklamáció a tananyagot nézve ellenőrizhető, a ZH-n megírt program kipróbálható és így tovább. Nem érdemes a „bepróbálkozás” kedvéért beadni reklamációt: ha a javítás helyes, akkor a reklamáció kell szakmailag hibás legyen, és az ilyet negatívan értékeljük.

Nyilvánvaló, hogy a javítók nem csak negatív, hanem pozitív irányba is hibázhatnak. Előfordulhat, hogy nem vettek észre olyan hibát, amiért pontlevonás járt volna. Reklamáció esetén nem csak a reklamált pontokra koncentrálunk, hanem esetleg újra kijavítjuk az egész feladatot vagy az egész ZH-t.

A reklamáció formai követelményei az alábbiak:

  • A reklamáció tartalmazza a hibásan pontozott rész helyét, tartalmát (kép a megoldásról beszúrva, releváns rész kivágva), az értékelést és a reklamáció szakmai indoklását.
  • Amennyiben a szöveg formai hibás (lásd az előző pontot), vagy nem a lapra írt megoldásra vonatkozik, esetleg szakmához nem tartozó érvelést tartalmaz, a reklamáció egésze automatikusan eredménytelen.
  • Ha bármelyik pont indoklása szakmai tévedést tartalmaz, vagy olyan pontot vitat, amelyik a pontozási útmutató vagy az általános pontozási irányelvek alapján nem járna, az a reklamáció egészét érvényteleníti. Csak olyan pontot érdemes reklamálni, amelyik tényleg jár: „reklamálok öt pontot, hátha összejön belőle kettő” – ezt a hozzáállást semmilyen szinten nem toleráljuk.

1. példa

Feladat: írj függvényt, amelyik megadja, hogy egy szám prímszám-e!

Megoldás a papíron:

def primszam(szam):
    for oszto in range(2, szam):
        if szam % oszto == 0:
            return "Nem prímszám."
    return "Prímszám."

Reklamáció: jár a pont arra, hogy a függvény megadja, prímszám-e a kapott szám.

Értékelés: a reklamáció helytelen; olyan pontot vitat, ami valójában nem jár. A függvény visszatérési értéke bool típusú kellene legyen, True = igen, False = nem. Ez attól függetlenül is így kell legyen, hogy a feladat többi részében mit kellett csinálni. A reklamáció többi része is érvénytelen.

2. példa

Feladat: írj függvényt, amelyik megadja, hogy egy szám prímszám-e!

Megoldás a papíron:

def primszam(szam):
    for oszto in range(2, szam):
        if szam % oszto == 0:
            return False
        else:
            return True

Reklamáció: jár a pont arra, hogy a függvény megvizsgálta az osztókat.

Értékelés: a reklamáció szakmai hibás. Az elágazás mindkét ágában visszatér a függvény, tehát csak a legelső osztót vizsgálja meg, a 2-t. A reklamáció többi része is érvénytelen.

3. példa

Reklamáció: csak két pont kéne; kicsapnak a koliból; negyedjére csinálom a tárgyat; nem volt nálam Python puska; nem úgy gondoltam, ahogy a lapra írtam; elkéstem a ZH-ról, ezért nem volt időm befejezni; csak ez a tárgy kell a szakirányhoz; nem volt fair a javító; kellemes ünnepeket, ha már nekem nem lesz az; ...

Értékelés: nem szakmai indok, a reklamáció többi része is érvénytelen.

6. Elvi hibák

Vannak olyan jellegzetes hibák, melyek egyértelműen az alapvető ismeretek hiányáról tanúskodnak. Az ilyen hibákat elvi hibáknak, néha „halálfejes hibáknak” nevezzük. Ezekért a nagy ZH-kon és a kis ZH pótlásokon 5 pontos levonások járnak. Ilyen hibák a következők:

A) Sorminták, „copy paste”-ek, macskakörmözések
... amelyek helyett triviálisan ciklus, lista, függvény lenne használható:
a = int(input())
b = –||–
c = –||–
...
print(c)
print(b)
–||– (a)

sorminta

sz = []

for _ in range(0, 10):
    sz.append(int(input()))

while sz != []:
    print(sz.pop())

lista, ciklus ismeretében

Ellenpélda. Ez nem azt jelenti, hogy bármit listában kell tárolni, amiből egynél több van. Másodfokú egyenlet együtthatói: a, b, c rendben van – ez a matematikai jelölés is. Vagy szülők adatai:

class Szulok:
    def __init__(self):
        self.papa = None
        self.mama = None
B) Függvényparaméterek és visszatérési érték helyett I/O
A feladatkiírás által kért függvényparaméterek és visszatérési értékek helyetti I/O művelet. Pl. „írj függvényt, amely megadja, hogy egy szám páros-e”:
def paros_e(szam):
    if szam % 2 == 0:
        print("paros") # ?!

nem ez a feladat

def paros_e(szam):
    return szam % 2 == 0

hanem ez

Ellenpélda. A fenti elvi hiba abban az esetben érvényes, ha a kiírás vagy beolvasás a függvény paraméterezését próbálja helyettesíteni. Például egy hibakeresési célú kiírás, esetleg hibajelzés nem ilyen.

C) Bitműveletek: lebegőpontos aritmetika és tárolók

Bitműveletes feladatban pow() függvény használata. A pow() függvény lebegőpontos számokkal dolgozik, nem egészekkel. Emiatt szinte minden egyéb elvégzett művelet, az ilyen kódban, float értékekhez fog vezetni, amiken a többi ilyenkor használatos operátor (pl. |, &) már nem is értelmezett. A lebegőpontos műveletvégzés miatt amúgy pontatlan lehet az eredmény.

Ugyanígy hibásnak számítanak az ilyen feladatoknál a biteket listába, sztringbe kicsomagoló, onnan visszacsomagoló megoldások. Ezek is mind a bitműveletek megkerülését célozzák.

D) Adatszerkezetek: jellegzetes műveletek keverése

Listát, sztringet indexelünk, bináris fa összes csomópontját rekurzióval érjük el. Ha valaki egy bináris fát úgy próbál bejárni, hogy két ciklust ír, amelyek szerinte feldolgoznák a bal és a jobb részfát; vagy megindexel egy egész számot, hátha úgy számjegyeket kap, esetleg nyitott fájlt indexel, hátha sorok érkeznek úgy – valószínű nem érti, hogyan működnek ezek az adatszerkezetek, típusok. Ezek, és hasonló mértékű félreértések elvi hibának számítanak.

7. Becsületesség és plágium

A tárgy számonkérésein elkövetett csalással nem csak magadtól veszed el a tanulás lehetőségét, hanem tisztességtelen is vagy a hallgatótársaiddal szemben.

Ebben a tárgyban minden feladatot egyénileg kell megoldani, semelyik sem teljesíthető csoportmunkával. Ettől függetlenül, bátorítunk arra, hogy a társaiddal magas szintű szakmai kérdésekről beszélgess, amíg az alábbiak teljesülnek:

  • Előbb komolyan vehető kísérletet teszel arra, hogy egyedül megoldd a feladatot.
  • A közös munkát megbeszélésre, ötletelésre korlátozzátok. Vagyis itt ne készüljenek jegyzetek, forráskódok, semmilyen olyan dolog, amit írásban magaddal viszel.
  • Ne add oda a kódod másnak, és másét se fogadd el.
  • A felhasznált forrásokat hivatkozd meg: írd le, az interneten honnan tájékozódtál, kivel beszélted meg a megoldást, és így tovább.
  • Ha egy témát általánosságban el szeretnél magyarázni valakinek, ne valamelyik beadandó feladaton keresztül tedd.

Csak saját magad által készített kódot adj be. Más kódjának módosítása nem teszi azt a sajátoddá. Lényegtelen, hogy a kód milyen úton és formában jutott el hozzád: más házijának beadása, ajándékozott vagy vásárolt megoldás, internetről letöltés, fizetett konzultáció.

Ha bizonytalan vagy benne, mi számít csalásnak, keresd meg a tárgy valamelyik oktatóját, és vázold fel a szituációt. Ha problémád van a tananyaggal, vagy nincs elég időd, esetleg bármi más okból úgy érzed, csalnod kéne – ne tedd, mert mások munkájának másolása biztosan nem a jó megoldás.

Ha nem követed a fentieket, a megszerzett eredményeidet érvénytelennek tekintjük:

  • ZH esetén nullának számít a pontszám.
  • Nagy házi esetén nem kaphatsz aláírást és jegyet a tárgyból; nincs második lehetőség.
  • Szorgalmi esetén a feladat maximális pontszámának –1-szeresét kapod meg.

A plagizált programokat évfolyam szinten, és régebbi évfolyamok házijaival is összehasonlítva, gépesítve keressük. A program forráskódok összehasonlítására van kihegyezve. Képes megtalálni azokat a programokat is, amelyek csak formázásban, változónevekben, sztringekben különböznek egymástól. A kiadott eredményeket minden esetben szemrevételezéssel ellenőrizzük. A TVSZ alapján erre a beadástól számított 15 napon belül kerül sor. A beküldött fájlok minden feladat beadási határidejétől számítanak beküldöttnek.