Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

A KöMaL 2015. januá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ű feladatok

A beküldési határidő 2015. február 10-én LEJÁRT.


I. 364. Egy \(\displaystyle n\times n\)-es négyzetekből (mezőkből) álló pályán egy robotot irányítunk. A robot a pálya üres mezőin tud mozogni egyenesen fölfelé, lefelé, jobbra és balra. A pályát mind a négy oldalról fal veszi körbe, ugyanakkor a belső négyzetek egy része is akadály, melyeken a robot nem tud áthaladni. A robotot az F, L, J, B nagybetűk sorozatával lehet irányítani, és úgy mozog, hogy a betű hatására elindul az aktuális helyéről a jelzett irányba és addig megy, amíg szabad előtte a pálya, majd megáll az első útjába eső akadály vagy fal mellett. Példaként tekintsük az ábrán látható, \(\displaystyle n=10\) értékhez tartozó pályát.

Készítsünk programot i364 néven, amely megoldja a következő feladatokat:

1. Olvassuk be a palya.txt szöveges állományból a pálya adatait. A szöveges állomány első sorában \(\displaystyle 1\le n\le 20\) értéke található, a következő sorában a pályán megtalálható akadályok száma, majd minden ezt követő sorban az akadályok oszlop és sor koordinátái szóközzel elválasztva.

2. Rajzoljuk ki a beolvasott pályát karakterekkel úgy, hogy a sarkokat és a belső akadályokat nagy X betűvel, a falakat mindegyik oldalon a sor és oszlop koordináták utolsó számjegyével jelöljük.

3. Kérjünk be a felhasználótól egy oszlop és egy sor koordinátát, és adjuk meg, hogy a pályán szabad-e az így megadott mező. A kimenet például a következő: ,,A (3,5) mező szabad.''

4. Válasszunk véletlenszerűen egy szabad mezőt a pályáról, és tároljuk el a koordinátáit a többi programrész megoldásához, és írjuk ki a képernyőre: ,,A robot induló helye a (6,4) mező.''

5. Adjuk meg azoknak a mezőknek a koordinátáit, amelyekre az előbb választott induló mezőről egy lépésben el lehet jutni. A fenti példában a kimenet: ,,Egy lépésben elérhetőek a (6,3), (6,7), (3,4), (10,4) mezők.''

6. Kérjünk be a felhasználótól egy karaktersorozatot, amely a robotnak adott parancsokat jelenti. A szövegből csak az irányokat jelző kis- vagy nagybetűket értelmezzük, a többi karaktert hagyjuk figyelmen kívül. Írjuk a mozgas.txt szöveges állományba a kiinduló helynek és azoknak a pontoknak a koordinátáit, amelyeken megáll a robot a parancssorozat végrehajtása közben. A robot mozgatása a 4. feladatban kisorsolt mezőről induljon. Példaként legyen a bekért karaktersorozat ,,FFjLeBF''.

7. Az előbb bekért parancssorozatot javítsuk és egyszerűsítsük úgy, hogy csak a megfelelő irányok nagybetűit tartalmazza, és hagyjunk el belőle minden olyan lépést, amely az adott pályán nem változtatja meg a robot helyét. A kimenet a példában legyen: ,,A javított lépéssorozat: FJLBF''.

Beküldendő egy tömörített i364.zip állományban a program forráskódja (i364.pas, i364.cpp, ...) az .exe és más, a fordító által generált állományok nélkül, valamint a program rövid dokumentációja (i364.txt, i364.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.

(10 pont)

megoldás, statisztika


I. 365. Egy terménykereskedelemmel és raktározással foglalkozó vállalkozás egyetlen nagy telephellyel rendelkezik, amelynek 5 teherkapuja van. A vállalkozás egyféle terménnyel foglalkozik, amit 10 kamionnal szállít a termelőktől a raktárba, illetve a raktárból a vevőkhöz. A kamionok, a rakodási idők hosszúsága miatt, a kapukon óránként legfeljebb egyszer haladhatnak át. A raktárnál az a szabály, hogy a kamionok bármelyik kapun ki és be közlekedhetnek, de áthaladáskor meg kell állniuk, amíg a rendszámukat, az áthaladás időpontját (1-100), irányát (Be vagy Ki), a kapu sorszámát (1-5) és a jármű súlyát (0,0-100,0) elektronikusan rögzítik.

Példa a kapuknál rögzített adatokra:

A honlapunkról letölthető az i365.zip állományban az 5 kapunál rögzített adatok listája a kapu1.txt, kapu2.txt, ..., kapu5.txt fájlban és a kamionok adatai a teherautok.txt fájlban (tabulátorokkal tagolt, UTF-8 kódolású szövegállomány).

A megoldás során vegyük figyelembe a következőket:

- A megoldás során törekedjünk képlet, függvény, hivatkozás használatára.

- A megoldás során az E oszloptól jobbra végezhetünk segédszámításokat.

- A megoldásban saját függvényt vagy makrót nem használhatunk.

1. Nyissuk meg táblázatkezelő program segítségével a kapuknál rögzített adatok fájljait és tartalmukat másoljuk egy Raktár nevű munkalapra, közös táblázatba. Ügyeljünk, hogy a táblázatnak csak egy fejléce legyen, a feleslegeseket töröljük. A táblát mentsük a táblázatkezelő saját formátumában i365 néven.

2. Helyezzük el a Teherautók nevű munkalapon a kamionok adatait úgy, hogy az első beolvasott adat az A1-es cellába kerüljön.

3. Rendezzük Raktár munkalapon az adatokat a kamionok rendszáma és azon belül a kapun való áthaladás órája szerint.

A további kérdésekre a válaszokat a Teherautók munkalapon jelenítsük meg úgy, hogy minden meghatározott érték előtti cellában, vagy az oszlopok feletti cellában a tartalomra utaló felirat legyen.

4. Határozzuk meg, hogy a vizsgált időszakban a kamionok külön-külön mennyi terményt szállítottak be a raktárba, illetve szállítottak ki. (Egy kamion által szállított termény súlya a kapunál mért és az önsúly különbsége.)

5. Adjuk meg annak a kamionnak a rendszámát, amely a legtöbb termést szállította be a raktárba.

6. Írassuk ki, hogy a kamionok az első kapun történő áthaladása előtt a telepen vagy azon kívül voltak-e.

7. Olvassunk be egy időpontot a megadott időszakban és írjuk ki, hogy hány kamion van a telepen éppen ekkor. A megadott órában átlépőket már ne vegyük figyelembe.

8. Írjuk ki, hogy az adatok alapján legalább hány kamion szabálytalanul nem állt meg a kapunál az adatok rögzítéséhez.

9. Határozzuk meg, hogy melyik óra volt a legforgalmasabb.

Beküldendő egy tömörített állományban (i365.zip) a táblázatkezelő munkafüzet (i365.xlsx, i365.ods, ...), illetve egy rövid dokumentáció (i365.txt, i365.pdf, ...), amelyben szerepel a megoldáskor alkalmazott táblázatkezelő neve, verziója.

Letölthető fájl: i365.zip

(10 pont)

megoldás, statisztika


I. 366. A mellékelt logót számtalanszor láttuk már a weblapon, a Facebookon, a papíralapú kiadáson. A weblapon látható változatot animált megjelenítéssel szeretnénk megújítani. A megoldásban ugyanazon alakzatokat használjuk, mint a statikusban, de az eredménynek nem feltétlenül kell teljes mértékben egyeznie az eredetivel.

Az animációs műveletek között legyen mozgatás, forgatás, méretváltoztatás és színváltoztatás. Fontos, hogy az összbenyomás elegáns, visszafogott legyen. A feladat megoldásához az SVG kapcsán javasoljuk a következő lapokat is:

\(\displaystyle \bullet\) http://svg.elte.hu/.

\(\displaystyle \bullet\) http://tutorials.jenkov.com/svg/index.html.

Beküldendő HTML dokumentumban (i366.html) a megoldás, amelyben az animáció egy svg tagben szerepel. A HTML dokumentumban szerepeljen azon weblapok linkje is, amelyek segítséget nyújtottak a probléma megoldásában.

(10 pont)

megoldás, statisztika


S-jelű feladatok

A beküldési határidő 2015. február 10-én LEJÁRT.


S. 95. Gézának van öt csomag kártyapaklija, mindegyikben ugyanazok a kártyák találhatók. Minden kártyán áll egy egész szám, de egyik pakliban sem áll ugyanaz a szám két kártyán. Így ha egy bizonyos számú lap szerepel az egyik pakliban, akkor az összes többiben is szerepel pontosan egyszer. Géza szereti, ha a kártyái szép sorrendben vannak, ezért elrendezte a paklikban a kártyákat valamilyen sorrendben, mind az öt pakliban azonos módon.

Éjszaka jött egy gonosz manó, és megpróbálta Gézát átverni a következő módszerrel: fogott egy paklit, és abból kiválasztott néhány kártyát. Kivette őket a pakliból, majd valahogy visszatette őket (nem feltétlen a helyükre, de ugyanabba a pakliba). Ugyanezt a műveletet megismételte a maradék négy paklival is. Viszont egy bizonyos számú kártyát csak egy pakliban mozgatott át, tehát a többi pakliban az ugyanolyan számú kártyához nem nyúlt. Géza reggel nagyon összezavarodott, mindenképp vissza szerette volna állítani a paklik eredeti sorrendjét. Segítsünk neki.

A program olvassa be a standard input első sorából \(\displaystyle N\)-et (\(\displaystyle 1\le N\le 50\;000\)), majd a következő \(\displaystyle 5\cdot N\) sorból az \(\displaystyle a_i\) szóközzel elválasztott egészeket. Az első \(\displaystyle N\) szám jelenti az első pakli átrendezett sorrendjét, a következő \(\displaystyle N\) szám a következő pakli sorrendjét stb. Írjuk a standard output első \(\displaystyle N\) sorába a paklik közös eredeti sorrendjét. (Helytakarékosság miatt most mind a bemenetben az \(\displaystyle 5\cdot N\), mind a kimenetben az \(\displaystyle N\) sorban lévő számokat egy sorba írtuk, a sorvégeket egy / jellel jelöltük.)

Pontozás és korlátok: A programhoz mellékelt, a helyes megoldás elvét tömören, de érthetően leíró dokumentáció 1 pontot ér. A programra akkor kapható meg a további 9 pont, ha bármilyen hibátlan bemenetet képes megoldani az 1 mp futásidőkorláton belül.

Beküldendő egy tömörített s95.zip állományban a program forráskódja (s95.pas, s95.cpp, ...) az .exe és más, a fordító által generált állományok nélkül, valamint a program rövid dokumentációja (s95.txt, s95.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.

(10 pont)

megoldás, statisztika


Figyelem!

Az informatika feladatok megoldásait ne e-mailben küldd be! A megoldásokat az Elektronikus munkafüzetben töltheted fel.