Nagy házi feladat – követelmények

Czirkos Zoltán, Nagy Gergely · 2018.08.22.

A nagy házi feladat követelményei. A beadással kapcsolatos tudnivalók, értékelés, pontozási táblázat.

A tárgyban kötelező egy nagy házi feladat megoldása. A feladat szabadon választott. Lehet a listából is választani, vagy azokhoz hasonló nehézségű, az elvárásoknak megfelelő saját problémák is megoldhatóak. (Egyetlen kivétel a plágiumkereső – azt nem szabad választani, mert az a minta házi.)

A nagyházi megoldásához néhány tipp és segédlet egy külön oldalon található.

1. Követelmények

A nagy házi feladat a következő követelményeknek kell megfeleljen:

  • A feladatválasztást a laborvezető jóvá kell hagyja.
  • A kész megoldás és a dokumentáció bemutatása csak személyesen történhet, legkésőbb az utolsó oktatási hét végéig.
  • Nagyobb program, amely a C nyelv lehetőségeit kihasználja: strukturált felépítés, több modulra bontás, dinamikus memóriakezelés és fájlkezelés.
  • A program mellé el kell készüljön a programozói és a felhasználói dokumentáció.

A fentiek között logikai és kapcsolat értendő: ha bármelyik hiányzik, a házi feladat nem elfogadható.

A dinamikus memóriakezelés követelményt formálisan is megadjuk. A feladat által megkívánt dinamikus adatszerkezetben az indirekciók száma legalább kettő kell legyen, azaz dinamikusan foglalt területen kell legyen dinamikusan foglalt terület címe. Ezek alapján az egydimenziós tömb nem elég – olyan feladatot kell választani, amely ennél összetettebb adatszerkezetet igényel. Az indirekciók száma az adatszerkezet működéséből kell adódjon; pl. az egydimenziós tömb, amelynek kezdőcíme céltalanul dinamikus memóriaterületen van, szintén nem teljesíti a követelményt.

A fájlkezelésben olyan adatokat kell tudni kezelni, amelyek száma változik, vagy változhatna. Nem teljesíti a követelményt pl. egy olyan program, amelyik az elindításainak számát (egyetlen egy egész számot) tárol fájlban. Teljesíti viszont egy olyan, amelyik egy játék 10 elemű dicsőséglistáját tárolja. A 10 ugyan fix, de akár változhatna is. A fájlkezelés saját programkódon kell alapuljon, pl. grafikus könyvtár által betöltött kép nem számít saját fájlkezelésnek.

2. A nagy házi részfeladatai

A hetek során az alábbi részfeladatokat kell megoldani. Az egyes részfeladatok megoldásához példákat mutat a minta nagyházi oldal.

A konkrét tárgykövetelmény az NHF 4-es (vagy pótlás esetén az 5-ös) megléte, annak elfogadása, és az elégséges pontszám elérése. A többi részfeladat ezen belül pontot ér, a nem teljesítésük esetén még lehet sikeres a nagy házi.

NHF 1. – választás
Ez a részfeladat a feladat kiválasztását jelenti. A listában szereplő feladatok közül is lehet választani, vagy saját, hasonló nehézségű feladatot is lehet hozni. A kiválasztott feladat utólag már nem lesz módosítható.
NHF 2. – specifikáció

A nagy házi választása után a portálon meghirdetett időpontig fel kell tölteni a házi feladat specifikációját. Ez a kiadott feladat részletekbe menő pontosítása. A pontosítás célja az, hogy a program megrendelője, és a programot elkészítő programozó ugyanarra gondoljon, és ne a munka végén derüljön fény a félreértésekre. Ide tartozik a program feladatának leírása, a bemenetek és a várt kimenetek rögzítése (formátumokkal együtt), a program használatának leírása is. A specifikációban még nem kell a program belső felépítésével, működésével kapcsolatos részleteket megadni.

A pontosított specifikáció részletességére jellemző, hogy ha két külön programozó elkészíti a programot ugyanabból a specifikációból, de egymástól függetlenül dolgozva, akkor kívülről nézve nagyon hasonló programoknak kell keletkezniük. Amennyiben az eredeti, rövid specifikáció bármelyik része nem egyértelmű, akkor a pontosítás során egy lehetőség mellett dönteni kell. Ebben segítenek a laborvezetők is.

NHF 3. – félkész megoldás

A félkész megoldás lényege az, hogy a készülő program funkcionalitásának egy részét már meg kell valósítsa: már látszania kell rajta akár felhasználói, akár programozói szemmel, hogy mi készül. Nem elegendő egy „hellóvilág” programot, vagy egy menüt feltölteni. A félkész változat még nem kell hibamentes legyen, nem kell tartalmaznia az összes funkciót, sem felépítésében és használt adatszerkezeteiben nem kell a végleges programmal megegyezzen. A félkész házinak kezdetleges dokumentációt már tartalmaznia kell: legalább egy rövid, fél-egy oldalas leírást arról, hogy mi az, ami már működik, és hogy az egyes feltöltött fájloknak, függvényeknek mi a szerepe.

Néhány példa. Kukacos játék esetén félkész házi lehet egy olyan program, amelyikben a kukac feje már mozog a képernyőn, és az étkeket össze lehet gyűjteni, de a kukacnak még nincsen farka, és nem nő. Telefonkönyves házi esetén félkész változat lehet az, ahol az adatokat már be tudja kérni a program, és el tudja tárolni egy tömbben; de dinamikus adatszerkezetet még nem használ, kereséseket még nem tud végezni, vagy képernyőre írja azt, amit amúgy fájlba mentene.

NHF 4. – végleges program
Ez az elkészült, végleges program leadása, forráskódokkal és dokumentációkkal.
NHF 5. – javítás vagy pótlás
Akinek a házi feladata nem készült el időben vagy nem elfogadható, az utolsó oktatási hét végéig pótolhatja azt. Ebben az esetben kevesebb pont jár a megoldásra. Javítás esetén (ha az NHF 4-es részfeladat elfogadott) a teljes pontszám megkapható, és különeljárási díj sincsen.

3. A házi feladat beadása

NHF 1. – választás

A listából választott feladatok esetén a feladatkiírás bemásolásával választható ki a feladat. Saját feladat esetén röviden el kell magyarázni a majdan elkészülő program lényegét.

NHF 2–3–4. – programkódok és dokumentációk

A dokumentációkat és a forráskódot elektronikusan kell leadni, az adminisztrációs portálon. A megoldás forrásfájljait és dokumentációit kell feltölteni egy ZIP fájlban. A feltöltés formátumára az alábbi megkötések vonatkoznak:

  • A csomag ZIP formátumú, maximális mérete 1 MB forráskóddal és dokumentációval együtt.
  • A megoldás forrásfájljait *.c, *.h nevű szöveges fájlként kell leadni.
  • A specifikációt és a dokumentációt PDF, MD, TXT vagy HTML formátumban kell leadni.
  • A feltöltésnek ezeket a fájlokat tartalmaznia kell, emailben küldés, illetve link nem elfogadható. Ha vannak egyéb, nagy adatfájlok, azokra lehet link.

A nagy házit a 13. vagy 14. heti laborgyakorlaton személyesen is be kell mutatni a laborvezetőnek. A laborvezető a megoldás saját elkészítését ellenőrzi: a program forráskódjával kapcsolatban kérdéseket tesz fel, esetleg annak módosítását kéri. A bemutatás után a laborvezető a feltöltött programot is megnézi és pontozza. Ez jelenti a házi feladat tényleges elfogadását, aminek szükséges, de nem elégséges feltétele a bemutatás.

A javasolt PDF készítő letölthető innen: CutePDF. Telepítés után megjelenik egy fiktív nyomtató; arra nyomtatva készül a PDF fájl.

A viták elkerülése végett

  • Ha a feltöltött csomag hiányos, vagy a programban alapvető technikai hiányosságok vannak, akkor a laborvezető utólag is megtagadhatja az elfogadást. A hibás feltöltés, követelményeknek nem megfelelés nem az oktató hibája, akkor sem, ha nem jelezte azonnal. Le is tudod tölteni a beadott megoldásodat, ellenőrizd!
  • A feltöltött csomag fölösleges, különösen a fordítással automatikusan előállítható fájlokat (*.obj, *.exe stb.) nem tartalmazhat. Az ilyen feltöltéseket a portál automatikusan vissza fogja utasítani, és nem elfogadottnak minősülnek.
  • A rossz formátumban vagy hiányosan feltöltött, feltölteni próbált megoldások szintén nem elfogadhatóak. Feltöltött fájlnak a megoldást közvetlenül tartalmaznia kell. Internetes linkek, „emailben elküldve” megjegyzések, PDF-ben feltöltött forráskódok sem elfogadhatóak.
  • A házi feladat fájljaiért, mint adatvagyonért mindenki saját maga felelős. Rendszeres biztonsági mentést kell készíteni róla. „Meghalt a vinyóm, vírusos lett a gépem”, és ezekhez hasonló indokokkal sem fogadunk el késést. Javasolt Dropbox, Google Drive vagy hasonló szolgáltatások használata.
  • Ha túl nagyok a PDF-ek, akkor javasolt: a) kitörölni a felesleges és vágatlan képeket, b) nem használni rengetegféle betűtípust (a tartalmat pontozzuk, nem a díszítéseket), c) egy PDF fájlban beadni a programozói és a felhasználói dokumentációt.

4. A végleges megoldás értékelése, pontozása

Általános követelmény a programmal szemben az, hogy a józan ész elvárásai szerint működjön. A programnak olyan magától értetődő képességekkel is kellhet rendelkeznie, amelyek a specifikációban külön nincsenek rögzítve. Például ha a specifikáció annyit mond, hogy a program egy nevet megjegyez, akkor elvárható az is, hogy a névben lehessen szóköz karakter. Vagy ha a specifikáció azt mondja, hogy a program bizonyos adatokat fájlba tud menteni, akkor elvárás az is, hogy vissza is tudja tölteni azokat.

Beadás előtt

Automatikusan elutasításra kerül

Vannak olyan elvi hibák és alapvető hiányosságok, amelyek esetén a beadás egyáltalán nem elfogadható. Érdemes a következő ellenőrzési listán végigmenni beadás előtt:

  • Nincs feltöltve a forráskód megfelelő formátumban. Esetleg csak link, megjegyzés van a forráskód helyett, vagy csak a fejlesztőkörnyezet projektfájlja.
  • Hiányzik a feladatban megkívánt dokumentáció. (Ha a felhasználói dokumentáció lényegében megegyezik a specifikációval, akkor is át kell szerkeszteni és föl kell tölteni.)
  • A program leglényegesebb funkciói nem működnek, nem valósítja meg a specifikációját.
  • Az egész program egy forrásfájlban van, nincsen több modulra bontva. A programot logikusan több modulra kell bontani, tehát több *.c és *.h forrásfájlnak kell lennie.
  • A program nem használ fájlkezelést.
  • A program nem használ kellően összetett dinamikus memóriakezelést. A programban megfelelő adatszerkezetet, pl. dinamikus tömböt (legalább két dimenziósat), láncolt listát vagy bináris fát kell használni, a feladat jellege által megkívánt módon. Lásd a követelményeknél.
  • A program a fő adatszerkezeteihez (telefonkönyvnél a nevek, kukacos játéknál a játék állapota és a kukac stb.) globális változót vagy fájlokat használ. A globális változók sokszor indokoltak lehetnek, de nem arra valók, hogy a megfelelő függvényparaméterezést és a cím szerinti paraméterátadást kiváltsák.
  • A program a függvényhívást goto-ként használja: pl. a menu() meghívja az adatbevitel()-t, az pedig visszatérés nélkül meghívja a menu()-t, hogy az meghívhassa a keres()-t, ami megint meghívja a menu()-t... stb.; esetleg indokolatlanul soha vissza nem térő függvények vannak benne (pl. játék végén exit() hívása).

Az elfogadott megoldás pontozása az alábbiak szerint történik. 20 pont a maximum, ebből 10-et el kell érni, hogy elfogadható legyen a házi (a fenti alapvető feltételek mellett). Minden felsorolásjellel jelölt elem 1 pontos.

Jegyben:
20 pont

Pontozás

Határidők betartása

  • időben kiválasztva (NHF1 elfogadva és NHF4 elfogadva)
  • specifikáció időben elkészült (NHF2 elfogadva és NHF4 elfogadva)
  • félkész házi időben elkészült (NHF3 elfogadva és NHF4 elfogadva)
  • végleges házi időben elkészült (NHF4 elfogadva)

    NHF5-tel a fenti pontok nem javíthatók és pótláskor sem adhatók meg. Vagyis ha pl. a specifikáció nem készült el időben, akkor már nem szerezhető pont utólagos beadással; illetve ha NHF4 nem volt elfogadva, akkor ezek mind elvesznek, és a maradék 16-ból kell 10-et elérni.

Programkód minősége

  • nyelvi elemek helyes használata (ne legyen felsorolt típus helyett egész vagy sztring, helyes vezérlési szerkezetek, ne legyen fölösleges dinamikus memóriakezelés stb.)
  • nincsenek indokolatlanul újraimplementált szabványos függvények
  • helyes forrásfájl/fejlécfájl használat (pl. nincs include-olt .c fájl, nincs definíció .h fájlban)
  • modulokra bontás minősége (tipikusan a main.c+fuggvenyek.c nem elég; pl. lehet láncolt lista kezelő modul, grafika modul, különféle menüket megjelenítő modul stb.)
  • funkcionális dekompozíció minősége (ne legyenek túl nagy függvények, és ne hívják egymást következetlen módon, pl. beolvasás a menüt)
  • adatszerkezetek, típusok használata (tipikusan: struktúrákba bekerültek, amik összetartoznak; nem int szamlalo, nevezo, hanem struct Tort; nem rajzol(char **p, int sz, int m), hanem rajzol(struct Palya *p); általában a túl sok paraméterű függvényekből látszik, hogy baj van)
  • szerep szerinti változónevek, függvénynevek (nem a betűk száma a lényeg, lehetnek 1 betűsek; int vmi, bool logikai – ezek nem)
  • következetesen indentált forráskód (0-nál nagyobb indentálás, a stílus tetszőleges)
  • 1. feladatfüggő pont, a feladat jellege alapján (tipikusan kisebb hibáért, hatékonytalanságért levonható, laborvezető indokolja)
  • 2. feladatfüggő pont, mint a fenti

Dokumentáció általában

  • a dokumentációk nincsenek felfújva (16-os betűméret, 4 cm margó, dupla sorköz, egyéb terjedelemnövelő technikák)

Programozói dokumentáció

  • szükséges környezet, külső könyvtárak leírása, továbbá a fordításhoz szükséges lépések leírása (pl. grafikus könyvtár; ha nem igényel szabványos könyvtárakon kívül semmit, akkor ez a tény)
  • a projekt felépítése (melyik fájl mit tartalmaz)
  • adatszerkezetek dokumentációja, tervezési megfontolások leírása (melyik adatszerkezet és típus mire való, mit tárol, miért arra esett a választás)
  • a függvények dokumentációja (feladat, paraméterek, visszatérés, esetleg körülmények, pl. xy nem lehet NULL)

Felhasználói dokumentáció

  • program feladata, célja; milyen bemenetek, kimenetek vannak, játéknál hogyan kell irányítani

5. A plágiumról

A nagy házi egyéni feladat. A plágiumot a TVSZ bünteti. A plágiumot elkövető hallgatók ellen hivatalból fegyelmi eljárást kell indítani.

A tárgyban plágiumnak minősül más szellemi termékének minden forrásmegjelölés nélküli felhasználása. Ez független attól, hogy a házi feladatként beadott anyag milyen úton és formában jutott el az eredeti tulajdonostól a beadóhoz. Ide értjük többek között más házijának (módosított) beadását, a házi feladat megoldások ajándékozását és vásárlását, az Internetről letöltést is. Kivételt képeznek a tárgy honlapjáról letölthető kódrészletek (előadás, gyakorlat, labor feladatok megoldásai), továbbá a tárgy oktatóinak tanácsai, iránymutatásai.

Plágiumteszt

A plagizált programokat évfolyam szinten, és régebbi évfolyamok házijaival is összehasonlítva, gépesítve keressük a minta nagyháziban bemutatott plágiumkeresőhöz hasonló szoftverrel. A kiadott eredményeket minden esetben szemrevételezéssel ellenőrizzük.

A program (SIM) a 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 stb. különböznek egymásból:

lepes=0;
while(megtalalt<parok)
{
    printf("\n\nLepesek szama: %d\n", lepes);
    printf("\n\nMelyik legyen az elso kartya? \nSor: ");
    scanf("%d", &m);
    printf("Oszlop: ");
    scanf("%d", &sz);
    while (m<1 || m>height || sz<1 || sz>width || keptabla[m-1][sz-1]==' ')
    {
        tablarajzolas();
        printf("\n\nLepesek szama: %d\n", lepes);
        printf("\n\nMelyik legyen az elso kartya? \nSor: ");
        scanf("%d", &m);
        printf("Oszlop: ");
        scanf("%d", &sz);
    }
    keptabla[m-1][sz-1]=tabla[m-1][sz-1];

    tablarajzolas();

    printf("\n\nLepesek szama: %d\n", lepes);