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. 325. feladat (2013. szeptember)

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)

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


A 16 megoldó 7 különböző programozási nyelven oldotta meg a feladatot. 4-4 C++ és FreePascal, 3 C#, 2 Java, 1-1 C, Python, Visual Basic megoldás érkezett.

Az utolsó feladat túlmutatott az érettségin kitűzhető feladatok szintjén, de a versenyzők fele tökéletesen megoldotta, míg 5 fő nem is próbálkozott vele. Ezen részfeladat megoldásához egy rekurzív függvényt praktikus készíteni: ez zárójelezve jeleníti meg az összes közvetlen reagálás sorszámát, közben minden megtalált levélre meghívja önmagát. A zárójelezésre praktikus figyelni.

Típushibának számított, hogy a megoldók nem kezelték azt a helyzetet, amikor a levélírók száma nem éri el az ötöt.

Az értékelési útmutató: levlistaertekeles.pdf

A megoldások közül Kovács Balázs Marcell munkáját közöljük: i325.cpp és egy versenyen kívül érkezett megoldást annak rövidsége miatt: levlista.cxx


Statisztika:

16 dolgozat érkezett.
10 pontot kapott:Fényes Balázs, Kovács Balázs Marcell.
9 pontot kapott:Csernák Tamás, Fehér Balázs, Kiss 107 Ádám, Németh 123 Balázs, Uzonyi 000 Ákos.
8 pontot kapott:1 versenyző.
7 pontot kapott:3 versenyző.
6 pontot kapott:3 versenyző.
4 pontot kapott:2 versenyző.

A KöMaL 2013. szeptemberi informatika feladatai