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)
- PROG a standard bemenetén kapja;
- 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.