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 2013. szeptemberi 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ő 2013. október 10-én LEJÁRT.


I. 325. A levelezési listák az azonos érdeklődésű emberek hatékony kommunikációs felületei. Használatuknak vannak általános szabályai, amelyek közül e feladat kapcsán az a leglényegesebb, hogy ha egy levélben felvetett problémára reagálunk, akkor azt mindig válaszlevélként tesszük. Ha ezt betartjuk, akkor az adott témával kapcsolatos levelezést sok levelező program elkülönítve tudja kezelni, így könnyebben kiigazodhatunk leveleink között.

A feladatban egy ilyen levelezési lista naplóállományának egyszerűsített változatát dolgozzuk fel. A  naplo.txt állományban minden sor egy levelet ír le. A sorokban rendre egy pozitív és egy nemnegatív egész szám szerepel pontosan egy szóközzel elválasztva. Az első szám a levél feladójának azonosítója, a második pedig annak a levélnek a sorszáma, amelyre reagál. Ha egy új levélszál kezdődik, akkor a második szám 0. A feladó azonosítója legfeljebb 100 lehet, a fájl legfeljebb 2000 sort tartalmaz.

A naplo.txt állomány első néhány sora:

Írjunk programot (i325.pas, i325.cpp, ...), amely megoldja az alábbi feladatokat. Az egyes feladatok megoldása előtt jelenítsünk meg a képernyőn a feladat sorszámát tartalmazó szöveget (például: 6. feladat), a beolvasás előtt pedig a beolvasás tartalmára vonatkozó üzenetet (például: Add meg a dolgozók számát!) Az ékezet nélküli kiírás is megengedett.

1. Olvassuk be és tároljuk el a naplo.txt állomány adatait a későbbi feladatok megoldásához szükséges formában.

2. Jelenítsük meg a képernyőn, hogy hány levél adatait tartalmazza az állomány.

3. A nyitó levelek sorszámát írjuk a képernyőre, egymástól egy-egy szóközzel elválasztva.

4. Adjuk meg, hány olyan előzmény nélküli levél van, amelyre senki sem reagált.

5. Határozzuk meg, hogy ki volt az 5 legszorgalmasabb levelező. Írjuk a képernyőre a levélszám szerint csökkenő sorrendben a levélíró azonosítóját, majd tőle tabulátorral elválasztva a levelek számát. Soronként egy-egy levelező adatai jelenjenek meg. (Azonos levélszám esetén is elegendő 5 sort megjeleníteni.)

6. Kérjük be a felhasználótól egy levél sorszámát. Adjuk meg a nyitólevéltől kezdve a levelek ide vezető láncolatát. A levelek sorszámát egy sorban a záró levéltől a nyitó levélig sorrendben, egy-egy szóközzel elválasztva kell a képernyőn megjeleníteni.

7. Vannak levelek, amelyek nagy vitát váltanak ki, de offtopic, azaz a listához nem kapcsolódó tartalommal. Kérjük be egy ilyen levél sorszámát, majd írjuk a képernyőre, hogy kik szerepeltek az innen induló levélfolyamban feladóként. Minden feladó csak egyszer jelenjen meg.

8. Készítsük el a rend.txt fájlt, amely a levelek sorszámát a következőkben leírt rendezett formában tartalmazza: a sor elején a nyitó levél sorszáma szerepel, azt követően pedig külön-külön zárójelezett csoportokban az arra közvetlen reagáló levelek sorszámai jelennek meg. Az ezekre reagáló levelek újabb zárójelezett csoportokat alkotnak.

A fenti példabemenethez tartozó kimenet:

1 ( 2 ( 5 6 ) 4 )

3

...

Beküldendő egy tömörített i325.zip állományban a program forráskódja (i325.pas, i325.cpp, ...), valamint a program rövid dokumentációja (i325.txt, i325.pdf, ...), amely megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.

Letölthető fájl: naplo.txt

(10 pont)

megoldás, statisztika


I. 326. A több metróvonallal rendelkező városok térképpel és útvonaltervező szolgáltatással segítik a turisták közlekedését. Jelenleg Budapesten három metróvonal üzemel, melyeknek egyetlen közös, átszállásra alkalmas állomása van a Deák Ferenc téren.

Készítsünk útvonaltervező táblázatot, amelybe ha beírjuk az induló- és a célállomás nevét, akkor megadja a célba jutáshoz szükséges információkat. Az allomasok.txt forrásállományban rendelkezésre áll a három metróvonal állomásainak neve vonalanként, a megállók sorrendjében.

Táblázatkezelő program segítségével oldjuk meg az útvonaltervező feladatot. A megoldásban saját függvény vagy makró nem használható.

Töltsük be a tabulátorokkal tagolt, UTF-8 kódolású allomasok.txt szövegfájlt a táblázatkezelőbe a mintának megfelelően. Munkánkat i326 néven mentsük el a táblázatkezelő alapértelmezett formátumában.

Alakítsuk ki a minta szerinti táblázatszerkezetet.

Az A2 cellába az indulási és a B2 cellába a célállomást írjuk be.

A B4:B9 cellákba írassuk ki a tájékoztató információkat. A megoldás során az irányokat a végállomások nevével adjuk meg. Az átszállásra alkalmas közös állomás és a végállomások nevét előre ismertnek tekintjük.

A G oszloptól jobbra, illetve a 22. sortól lefelé végezhetünk segédszámításokat, amelyeket lássunk el magyarázó szöveggel.

A B4 cellában függvény segítségével határozzuk meg az induló metróvonal jelzését.

A B5 cellában képlet segítségével határozzuk meg a felszállás irányát.

A B6 cellában írjuk ki, hogy hány megállót kell utazni a célig vagy az átszállásig.

A B7 cellában határozzuk meg, hogy melyik metróvonalra kell átszállni, ha szükséges. Ha átszállás nem szükséges, akkor a B7:B9 cellákat jelenítsük meg üresen.

A B8 cellában írjuk ki, hogy átszállás után melyik irányba kell felszállni.

A B9 cellában határozzuk meg, hogy hány megállót kell még utazni a célig.

Formázzuk a táblázatot az alábbi leírás és a minta szerint:

a. Az első sor celláit igazítsuk középre vízszintesen és függőlegesen.

b. Az első sorban található oszlopneveket és szövegeket állítsuk félkövér betűstílusúra.

c. Az A4:A9 tartomány cellák tartalmát igazítsuk jobbra.

Beküldendő a táblázatkezelő munkafüzet (i326.xls, i326.ods, ...), illetve egy rövid dokumentáció (i326.txt, i326.pdf, ...), amelyben szerepel a megoldáskor alkalmazott táblázatkezelő neve, verziószáma.

Letölthető fájl: allomasok.txt

(10 pont)

megoldás, statisztika


I. 327. A tavaly kitűzött S. 76. feladatban az ott leírtaknak megfelelő vasúti pályát kellett készíteniük a versenyzőknek. A pályát létrehozó program a kereszteződések, az egyenes és az íves elemek száma alapján egy karaktersorozatot adott meg, pl. az 1 2 8 bemenetre az XEJEJJBJXBBB kimenetet. Készítsük el a programoktól helyes vagy helytelen kimenetként kapható karaktersorozatok alapján a vasúti pályák rajzát Logo nyelven. Fejlesztői környezetként javasoljuk az Imagine Logo rendszert, mely letölthető a http://logo.sulinet.hu oldalról.

A pálya rajzát egy s76 nevű függvény készítse el, mely bemenetként a pályaelemek karaktersorozatát kapja. A rajzon a kereszteződések legyenek pirosak, az egyenesek kék és az íves elemek zöldek. Az egyenes elem mérete legyen 40 egység. Az eljárás a rajzoláson kívül írja ki, hogy a pálya megfelelő-e, vagy sem. Ha a pálya nem záródik önmagába vagy nem kereszteződésben metszik egymást az elemek, úgy hibaüzenetet írjunk ki, de a pályát rajzoljuk meg a karaktersorozat leírása szerint. A többszörösen hibás pályáknál elég egy hibát megadni.

A megoldáshoz csak egymást és önmagukat hívó eljárásokat és függvényeket használjunk, ne alkalmazzunk ciklusokat és változókat. Beküldendő a megoldást tartalmazó Imagine Logo projekt (i327.imp).

(10 pont)

megoldás, statisztika


S-jelű feladatok

A beküldési határidő 2013. október 10-én LEJÁRT.


S. 82. Adott egy N×N-es sakktábla, és N (N\le 1\;000\;000) darab bástya. El szeretnénk helyezni őket a sakktáblán úgy, hogy semelyik kettő ne üsse egymást. Két bástya akkor és csak akkor üti egymást, ha egy oszlopban, vagy egy sorban vannak. Ez így nagyon egyszerű lenne, de vannak megkötéseink: az i. bástyát csak az (ai,bi) bal felső, és (ci,di) jobb alsó koordinátájú téglalapba helyezhetjük. Az a kérdés, hogy megoldható-e ez? Ha nem, írjuk ki, hogy NEM, ha megoldható, akkor adjunk is meg egy megoldást: minden bástya sor, illetve oszlopkoordinátáit írjuk ki külön sorba. A bástyák elhelyezését olyan sorrendben kell kiírni, amilyenben a téglalapok voltak, tehát az első sorba az első bástya koordinátái kerüljenek.

A program olvassa be a standard input első sorából N-et, majd a következő N sorból az ai, bi, ci, di szóközzel elválasztott egészeket, és írja a standard output első sorába a NEM szót, vagy pedig a bástyaelhelyezéseket.

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. A megoldáshoz weboldalunkon találhatóak példa be- és kimenetek, amelyekkel érdemes letesztelni a programot.

Részpontszámok a következőkre kaphatóak:

- a program N\le12-re megoldást ad;

- minden téglalap 1×2-es, vagy 1×3-as;

- minden téglalap 1×2-es, vagy 2×2-es.

Beküldendő egy tömörített s82.zip állományban a program forráskódja (s82.pas, s82.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 (s82.txt, s82.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.

Tesztbemenetek letöltése: teszt.zip

(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.