A KöMaL 2009. februári informatika feladatai
Kérjük, ha még nem tetted meg, olvasd el a versenykiírást.
Feladat típusok elrejtése/megmutatása:
I-jelű feladatokA beküldési határidő 2009. március 16-án LEJÁRT. |
I. 205. A sejtautomata általában sok azonos sejtből (cellából) áll. Az elemek néhány állapotot vehetnek fel. Az egyes sejtek állapotai változnak az idővel (lépésszámmal) attól függően, hogy maga a kérdéses sejt és közvetlen szomszédjai milyen állapotban vannak. Valamennyi sejt egyszerre (párhuzamosan) változtatja állapotát.
Az általunk megvalósított egydimenziós automata sejtjei két állapotot, 1-et és 0-át vehetnek fel. A sejtautomata állapotait, generációit soronként jelenítjük meg. Egy sejt következő generációbeli állapotát két szomszédjának és önmaga állapotának együttese határozza meg. (Az automata első és utolsó cellájában mindig 0 van.)
A környezeti állapot 23=8 féle lehet. Minden állapothoz megadhatjuk, hogy a következő generációra milyen eredményállapotot kapunk.
Szokásos elnevezés, hogy az Eredmény sort, mint bináris számot felfogva, megadják decimálisan az értékét, a szabályt, ezért nevezik pl. a fenti szabályt 30-asnak. A lehetséges szabályok száma 28=256. A kezdőállapot és a szabály együtt határozza meg az eredményt. Az eredmény lehet stabil végállapotú, periodikus, véletlen és egyikbe sem sorolható. Sok közöttük az önhasonló.
Készítsük el az egydimenziós sejtautomata 150 generációjának bemutatását táblázatkezelő program segítségével. A megoldáshoz két munkalapot használjunk. A szabály nevű munkalapon a környezeti állapot -- eredmény kapcsolatot adjuk meg (a fenti táblázat megfelelője található a munkalap A1:I2 tartományában), és a szimuláció lapon a sejtautomata generációit határozzuk meg másolható függvény segítségével az A1:ET150 tartományban. Az első és utolsó oszlop cellái definíció szerint 0-t tartalmaznak, az első sor tartalmazza az induló generációt. A sejtautomata generációit tartalmazó oszlopok szélességét és sorok magasságát állítsuk be úgy, hogy a cellák négyzet alakúak és láthatóak legyenek a képernyőn. A grafikus megjelenítéshez használjunk feltételes formázást.
Beküldendő a táblázatkezelő munkafüzet (i205.xls, i205.ods, ...), illetve egy rövid dokumentáció (i205.txt, i205.pdf, ...), amelyben szerepel a megoldáskor alkalmazott táblázatkezelő neve, verziószáma, valamint a megoldás rövid leírása, valamelyik érdekes ábra kezdő állapotának és szabályának megadása.
(10 pont)
I. 206. A grafikus operációs rendszerek széleskörű elterjedése előtt az ASCII-animációk, azaz karakterekből álló képek vetítése nagyon divatos téma volt a számítástechnikát tanulók körében. A filmek ebben az esetben ASCII-karakterekből felépülő képkockákból állnak. A vetítő-program a film-állományból egy-egy képkockát beolvas, a monitoron megjelenít, adott időt vár, majd a képernyőt törli, és áttér a következő képkocka megjelenítésére. Ezt addig folytatja, amíg az állomány végére nem ér.
Írjunk programot, amely a bemeneti adatállományban megadott karakterekből álló képeket levetíti. Készítsünk saját (!) ASCII-animációt.
A program parancssori argumentuma legyen az animáció képeit tartalmazó adatállomány neve. A fájl első sorában négy, szóközzel elválasztott egész szám áll, amely sorrendben: a képek száma, egy kép oszlopainak, sorainak száma és a képváltások közötti idő ezredmásodpercben. Az ezt követő sorok a képkockák sorait jelenítik meg, amelyek szóközökből és karakterekből épülnek fel.
Az f1.dat állomány a filmvetítő program kipróbálásához használható. A program kimenete a képernyőn az animáció lejátszása.
Beküldendő a lejátszó program forráskódja (i206.pas, i206.cpp, ...), és egy saját fejlesztésű animáció (i206film.dat, i206film.txt, ...) valamint a program rövid dokumentációja (i206.txt, i206.pdf, ...), amely tartalmazza a filmkészítés rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztőkörnyezetben fordítható.
(Lejátszó program 5 pont és saját film 5 pont)
(10 pont)
I. 207. A jégkorong - a válogatott sikerei hatására - egyre népszerűbb sport hazánkban. A Magyar Jégkorong Szövetség weblapjáról (www.icehockey.hu) letölthetők a magyar jégkorong válogatott mérkőzéseinek eredményei a 2008-as év utolsó mérkőzésével bezárólag. Az adatok a jeghoki.csv állományban itt is megtalálhatóak.
1. Készítsünk adatbázist i207 néven. A mellékelt tábla tartalmát, amely megadja a mérkőzések adatait, meccs néven importáljuk az adatbázisba. A forrásfájl pontosvesszővel tagolt szövegfájl.
2. Importálást követően állítsuk be a megfelelő adatformátumot és a kulcsot.
Tábla: meccs (az, datum, ellenfel, tipus, varos, orszag, lott, kapott)
A következő feladatok megoldása során lekérdezéseket kell készítenünk. Törekedjünk arra, hogy egy-egy feladat megoldását egyetlen SQL parancsban vagy azzal egyenértékű módon fogalmazzuk meg.
3. Vajon mikor aratta legnagyobb gólkülönbségű győzelmét a magyar válogatott? Lekérdezés segítségével határozzuk meg a dátumot, az ellenfél nevét és az eredményt. Ha több ilyen is van, bármelyik, de akár az összes is megadható. (3gyozelem)
4. Készítsünk lekérdezést, amely megadja, hogy melyik évben hány győzelmet aratott a magyar válogatott. (4evenkent)
5. Készítsünk lekérdezést, amely kilistázza, hogy melyik ellenfelét mikor győzte le először a válogatott. (5elso)
6. Soroljuk fel lekérdezés segítségével azokat az ellenfeleket, amelyeket még soha nem győzött le a magyar válogatott. Minden ellenfelet csak egyszer jelenítsünk meg. (6nyeretlen)
7. Labdarúgásban Ausztria volt a leggyakoribb ellenfél. Vajon így van ez jégkorong esetén is? Lekérdezéssel listázzuk ki azokat az ellenfeleket, amelyekkel többször játszott a válogatott, mint Ausztriával. (7ausztria)
8. Határozzuk meg egyetlen lekérdezés segítségével, hogy hány mérkőzésen győzött, játszott döntetlent, illetve kapott ki a válogatott. (8stat)
9. Készítsünk lekérdezést, amely a Románia ellen játszott mérkőzéseket listázza ki időrendben. Az első oszlopban a mérkőzés sorszáma jelenjen meg, mellette a dátum, a helyszín, majd a magyar válogatott által lőtt és a kapott gólok száma. (9romania)
Példaképpen a 9romania lekérdezés eredményének első néhány
Beküldendő az adatbázis (i207.odb, i207.mdb), vagy egy szöveges dokumentum (i207.txt, i207.pdf, ...), amelyben szerepel a tábla létrehozása és a lekérdezések áttekinthető SQL kódja, valamint egy rövid dokumentáció (i207dok.txt, i207dok.pdf, ...), amelyből kiderül az alkalmazott adatbázis-kezelő neve, verziószáma.
(10 pont)
S-jelű feladatokA beküldési határidő 2009. március 16-án LEJÁRT. |
S. 42. Írjunk programot, mely képes a ,,Tetris'' játék következő változatával játszani.
A játéktér egy egységnyi oldalhosszúságú cellákból felépített négyzetrács, melyet oldalról és alulról falak határolnak, felülről azonban nyitott. A játékos a végtelen magasságból véletlenszerűen, egyesével érkező, különféle alakú, egységnégyzetekből összeállított alakzatok egymásra helyezésével egy tornyot épít. Célja, hogy az alakzatokat úgy helyezze el, hogy az idő múlásával - az elemek érkezésével - a torony magassága a lehető legkisebb legyen.
Egy alakzat akkor számít szabályosan elhelyezettnek, ha egyetlen másik alakzatba sem lóg bele, az őt alkotó egységnégyzetek közül viszont legalább egy alulról érintkezik egy korábban elhelyezett alakzattal vagy az alsó fallal, valamint az alakzat elhelyezése megvalósítható egy végtelen magasságban végzett elforgatás és vízszintes eltolás, majd egy függőleges leeresztés egymásutánjaként anélkül, hogy e művelet közben az alakzat bármely más alakzattal átfedésbe kerülne.
A lehetséges hatféle alakzatot az ábécé kisbetűivel azonosítjuk:
A program futása során a standard be- és kimenetén keresztül, újsorral elválasztott szöveges üzenetek formájában interaktívan kommunikál egy főalkalmazással, mely az alakzatok sorsolását és a lépések ellenőrzését végzi. A főalkalmazás különféle események bekövetkezéséről a játékos programját a standard bemenetre küldött egy-egy üzenet formájában értesíti. Ezek szintaxisa:
start <W>
o Egyetlen egyszer, a futtatás legelején érkezik, a játéktér 3W32 szélességét adja meg. Erre a játékosnak nem kell válaszolnia.
item [ojlszi]
o Egy új elem érkezését jelzi. Paramétere a felsoroltak közül egyetlen karakter. A várt válasz egy pos üzenet.
A játékos programja egyetlen típusú üzenetet írhat a standard kimenetre, ennek szintaxisa:
pos <bal oldal pozíciója az elforgatás után> <OJE elforgatás, fok>
o Az item üzenetre várt válasz az új elem kívánt elhelyezését írja le: az elforgatás után melyik oszlopban legyen a bal széle (1 és W-s+1 közötti egész, ahol s az alakzat szélessége az elforgatás után), és mennyivel forgassuk el az elemet (értéke 0, 90, 180 vagy 270, az óramutató járásával ellentétesen, fokban).
A program a következő elemet leíró üzenetet a standard bemenetére csak azután kapja, hogy az előző elem elhelyezését leíró választ a standard kimenetre kiírta. Figyeljünk arra, hogy valóban a standard be- és kimenetet használjuk, ne a billentyűzetet és/vagy a képernyőt. Az üzenetek végén ne feledjük az újsort, a kimeneti puffert mindig ürítsük az adott válasz kiírása után. Pascal esetén ne használjuk a "Crt" modult, C/C++ esetén a conio.h állományt.
Példaképp tekintsük a mellékelt párbeszédet (dőlttel szedtük a program válaszait).
(10 pont)
Figyelem!
Az informatika feladatok megoldásait ne e-mailben küldd be! A megoldásokat az Elektronikus munkafüzetben töltheted fel.