Feladat: I.325 Korcsoport: - Nehézségi fok: -
Füzet: 2013/szeptember, 356 - 358. oldal  PDF  |  MathML 

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

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:
 


 

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