Feladatok, példák

A tesztelt program (PROG) az azonosítási fázisban beküldi a feladat sorszámát, melynek kódolása a következő:

  • Páratlan sorszám mindig a feladatot azonosítja és annak lekérdezésére szolgál.
    A feladat szövege 3 különböző módon érhető el attól függően, hogy a feladat sorszámát követő sorban mit küld a PROG:
    (FONTOS, hogy ez a 3. sor CSAK a lekérdezésnél legyen jelen!)
    • PROG a standard bemenetén kapja;
      (ehhez a PROGRAM stringet kell kiküldeni)
    • E-MAIL mezőben megadott címre küldött levélben; (ehhez a MAIL stringet kell kiküldeni)
    • hftest standard kimenetén jelenik meg; (bármely más esetben)
  • Páros sorszám mindig az eggyel kisebb sorszámú feladat megoldásának tesztelését jelenti.
    Azaz ekkor az adott feladatnak megfelelő tesztadatokat küldi a hftest program, és ellenőrzi az arra adott választ.
    (Ekkor a két azonosító sor után már NE küldjön a program MAIL, vagy PROGRAM stringet, mert azt már a teszt adatra történő válasznak fogja értelmezi a hftest program!)

A következő feladatok vannak jelenleg megvalósítva:

  • Ismerkedés a program használatával. A mintaprogramban található azonosító string megfelelő átírásával az 1. feladat egyszerűen megoldható. Ennek lényege, hogy megtörténjen az első azonosítás. Íme a példa C-ben:
    #include <stdio.h>
    
    char myid[]   = "Ga'z Ge'za,1MI,1,H1g <en[at]com[dot]hu> XY123Z\n";
    char mytask[] = "Feladat = 1 ISO 8859-2\n";
    
    int main() 
    {
        setbuf(stdout, NULL);        // Kikapcsolja a bufferelest
        printf(myid); 
        printf(mytask);
        return 0; 
    }
    

    (Az ISO 8859-2 opció megadása esetén a program minden üzenete ISO-8859-2 kódolással jelenik meg. Ezt csak akkor érdemes megadni, ha biztos, hogy az adott megjelenítő eszköz ismeri ezt a kódolást.)

    Az így elkészített forrásprogramot (prog.c) az ural2 gépen pl. a következő parancsal lehet lefordítani:

    gcc -o PROG prog.c

    A lefordított C programot (PROG) az ural2-n a hftest programmal kell futtatni:

    ~szebi/HF/hftest PROG

    Sikeres azonosítás után a hftest kiírja a személyre szóló 2. feladatot.
    Ha levélben szeretnénk megkapni a feladat szövegét, akkor a második printf után még egy kiírásra szükség van:

        printf("Mail\n");
    

    Fontos figyelnie, hogy ez a kiírás már nem az azonosítás része, ezért a feladat tesztelésekor (páros sorszám), már ne küldje a "Mail" szót!
    Ha pedig PROG a standard inputon szeretné megkapni a feladat szövegét, akkor ez pl. a következő programmal érhető el:

    #include <stdio.h>
    
    char myid[]   = "Ga'z Ge'za,1MI,1,H1g <en[at]com[dot]hu> XY123Z\n";
    char mytask[] = "Feladat = 1\n";
    
    int main() 
    {
        setbuf(stdout, NULL);        // Kikapcsolja a bufferelest
        printf(myid); 
        printf(mytask);
        printf("Program\n");
        while ((ch = getchar()) != EOF)
            ch;                      // ch-ban van a következő karakter
        return 0; 
    }
    
  • A második feladat, ami az 1-es sorszámmal kérdezhető le, egy nem túl bonyolult valós értékű függvény megvalósítása, melyhez egy olyan keretprogramot kell írni, ami a standard bemenetről olvasott X értékekhez kiszámítja megfelelő függvényértéket. Az eredményt PROG a standard outputon keresztül adja vissza a hftest programnak, mire az újabb X értéket küld, vagy befejezi a tesztelést, amit PROG file vége jelként észlel. A függvényértéket legalább 1e-4 pontossággal kell kiszámítani.
  • 3-as sorszámmal kérdezhető le a 4. feladat, melyben egy adott reguláris kifejezésre illeszkedő sorokat kell kiírni a standard outputra. Ez a feladat egyszerű script-tel is megvalósítható. Javaslom, hogy próbálják ki script-tel is.
  • 5-ös sorszámmal kérdezhető le a 6. feladat. Ebben a 4. feladatban alkalmazott reguláris kifejezés szerinti minta felismerésére kell programot írni. FIGYELEM nem a reguláris kifejezés általános értelmezésére kell programot írni, hanem a reguláris kifejezés által definiált minta felismerésére.
  • 7-es sorszámmal kérdezhető le a 8. feladat. Ebben egy tetszőleges rendező algoritmust kell elkészíteni, majd főprogramot írni hozzá, ami a standard inputról beolvasott számokat rendezi majd kiíír néhány értéket a rednezet halmazból.
  • 9-es sorszámmal kérdezhető le a 10. feladat. A lekélrdezés hatására abban a katalógusban, ahol a lekérdezés történik, létrejönnek a következőállományok:
    • f10.h, f10_main.cc, f10.mak.
    • Ezek segítségével kell létrehozni az f10.cc állományt a feladat szövegének megfelelően.
    • Az f10_main.cc segíti a tesztelést, melyhez a futatható f10 nevű program a make -f f10.mak paranccsal állítható elő.
    • A kész feladat beadása a make -f f10.mak submit paraccsal lehetséges.
  • 11-es sorszámmal kérdezhető le a 12. feladat. A lekélrdezés hatására abban a katalógusban, ahol a lekérdezés történik, létrejönnek a következőállományok:
    • f12.h, f12_main.cc, f12.mak.
    • Ezek segítségével kell létrehozni az f12.cc állományt a feladat szövegének megfelelően.
    • Az f12_main.cc segíti a tesztelést, melyhez a futatható f12 nevű program a make -f f12.mak paranccsal állítható elő.
    • A kész feladat beadása a make -f f12.mak submit paraccsal lehetséges.

Az első feladatot megvalósító mintaprogram forrása más, az előadásokon bemutatott mintafeladatok forrásprogramjával együtt az ural2 gépen ~szebi/proba katalógusban érhető el.

Utolsó frissítés: 2016-02-09 14.13