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

Az I. 364. feladat (2015. január)

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)

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


Mintamegoldásként Kovács Benedek Visual Basic (i364.vb ) és Rittgasszer Ákos C# nyelvű (Program.cs) budapesti, valamint Kelkó Balázs komáromi versenyző C++ (i364.cpp) megoldását adjuk közre.


Statisztika:

16 dolgozat érkezett.
10 pontot kapott:Dombai Tamás, Fehér Balázs, Fényes Balázs, Kazal Soma, Kelkó Balázs, Kovács 246 Benedek, Mócsy Miklós, Nagy Ábel, Németh 729 Gábor, Olexó Gergely, Rittgasszer Ákos.
9 pontot kapott:Dér Leonóra, Hamrik Szabin, Kiss 107 Ádám.
8 pontot kapott:1 versenyző.
5 pontot kapott:1 versenyző.

A KöMaL 2015. januári informatika feladatai