Az I. 226. feladat (2009. december) |
I. 226. A sok munkatárssal működő intézményekben költségtakarékosságból sok kis nyomtató helyett inkább néhány nagy kapacitásút használnak. Előnyt jelent a nyomtató nagyobb tudása, sebessége, alacsony üzemeltetési költsége. Egyetlen számottevő hátránya van: ha többen akarnak közel egy időben nyomtatni, akkor bizony várni kell. A papírkifogyás okozta időveszteséget két, egyenlő méretű papíradagoló tálcával oldják meg. (A két tálca között automatikusan, időveszteség nélkül vált a nyomtató, az üres tálcát azonnal újratöltik.)
A beérkező nyomtatási igényeket az egyik munkanap a feladat.txt állományban rögzítik a beérkezés sorrendjében. Az első sor első száma megadja, hogy a nyomtató egy lapot hány másodperc alatt nyomtat ki, a második szám pedig a papíradagoló tálcák külön-külön vett kapacitását jelöli. A további sorokban a nyomtatási feladat beérkezésének ideje (óra, perc, másodperc), a nyomtatandó oldalak száma és a nyomtatást kérő neve szerepel. Az oldalszám értéke legfeljebb 100 lehet. A cégnél legfeljebb kéttucatnyian dolgoznak.
Például:
A 4. sor megmutatja, hogy a feladat Dominiktól 8:22:26-kor érkezett, amelyben 10 lap nyomtatását kéri. Ezen nyomtatási feladat végrehajtása 30 másodpercet igényel.
Készítsünk programot nyomtat néven, amely az alábbi kérdésekre válaszol. Ügyeljünk arra, hogy programunknak minden helyes tartalmú bemeneti állomány esetén működnie kell.
Minden részfeladat megoldása előtt írjuk a képernyőre a feladat sorszámát. Ha a felhasználótól kérünk be adatot, jelenítsük meg a képernyőn, hogy milyen értéket várunk (például a 2. feladat esetén: ,,2. feladat: Adja meg egy dolgozó nevét.''). A képernyőn megjelenített üzenetek esetén az ékezetmentes kiírás is elfogadott.
1. Olvassuk be a feladat.txt állományban talált adatokat, s azok felhasználásával oldjuk meg a következő feladatokat. Ha az állományt nem tudjuk beolvasni, az első 10 csomaghoz tartozó adatokat jegyezzük be a programba és dolgozzunk azzal.
2. Kérjük be a felhasználótól egy dolgozó nevét, majd írjuk a képernyőre, hogy az illető mikor küldött nyomtatási feladatot. Minden időpont új sorban jelenjen meg óra:perc:másodperc formában.
3. Készítsünk statisztikát, hogy az egyes órákban hány feladat érkezett. Az eredményt (az órát és a darabszámot) soronként írjuk a képernyőre. A nyomtatási feladatot nem tartalmazó órákat ne jelenítsük meg.
4. Adjuk meg azon dolgozók nevét, akik a vizsgált napon 9 óra előtt már nyomtattak. A neveket egymástól egy-egy szóközzel elválasztva, ábécé-rendben írjuk a képernyőre.
5. Listázzuk ki, mely nyomtatási feladatok megoldása közben váltott adagolót a nyomtató. A feladatok sorszámát egy-egy szóközzel elválasztva jelenítsük meg a monitoron.
6. Készítsünk kimutatást, amely feladatonként tartalmazza a feladat beérkezésének, a nyomtatás elkezdésének és a befejezésének idejét valamint a dolgozó nevét. Az adatokat soronként a kesz.txt állományba jegyezzük be.
Beküldendő a program forráskódja (i226.pas, i226.cpp, ...), valamint a program rövid dokumentációja (i226.txt, i226.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható egy tömörített i226.zip állományban.
Forrásfájl: feladat.txt
(10 pont)
A beküldési határidő 2010. január 11-én LEJÁRT.
A nyomtatással kapcsolatos érettségi feladat KöMaL szinten a könnyűek közé tartozik, mégis csupán egyetlen tökéletes megoldás született. Ez azért is meglepő, mert a hibák többsége a mintaként megadott bemeneti fájl áttanulmányozásával kiszűrhető lett volna.
A megoldókat arra buzdítjuk, fordítsanak nagyobb figyelmet a program tesztelésére, vizsgálják meg, hogy legaláb a mintabemenetre helyes eredményt ad-e a program. Az otthoni munka során erre biztosan van idő, szemben az érettségivel, amikor kb. 90 perc áll rendelkezésre.
A megoldók fele már a beolvasás során hibázott. Az utolsó értékes adatsort sorvégjel zárja. A hibázók ezen sorvégjel után is "olvastak" adatot és ez el is raktározták. Érdemes erre figyelni, mert a programozási versenyeken, de akár érettségin is felmerülhet hasonló probléma. Ennek a hibának a hatása leginkább a statiszika készítése során szúrhatott volna szemet, amikor megjelent egy 0 órás feladat is. Többeknél ezt egy másik hiba (0 óra vizsgálatának elhagyása) elfedte.
A 9 óra előtti nyomtatási feladat vizsgálata során többen nem fordítottak kellő figyelmet a ciklushatárok megválasztására, így a rendezés vagy a megjelenítés nem terjed ki minden elemre, esetleg túlnyúlt a tömbhatáron.
Az utolsó feladat megoldása során sokan túlzottan bonyolult módon dolgoztak, leginkább azért, mert az adatszerkezetet nem megfelelően választották meg. Ebben a részfeladatban nagy előny jelent, ha az időadat nem három, hanem egyetlen, másodperc formában megadott értékként szerepel. Nem kell dönteni az egyben vagy külön tárolás között, nyugodtan használható egyszerre mindkettő. A memóriával ugyan nem, de a programsorok számával és a megoldásra felhasznált idővel mindenképpen spórolunk.
Néhányan figyelmetlenségből vétettek a formai szabályok ellen, a 9 óra előtti nyomtatásoknál nem szóközzel, hanem sorvégjellel választották el az értékeket, míg az utolsó feladatban nem jelenítették meg a dolgozó nevét.
Statisztika:
10 dolgozat érkezett. 10 pontot kapott: Szabó 928 Attila. 9 pontot kapott: Balla Attila, Barta 111 János, Horváth 135 Loránd. 8 pontot kapott: 5 versenyző. 7 pontot kapott: 1 versenyző.
A KöMaL 2009. decemberi informatika feladatai