Professional Documents
Culture Documents
Papírgyűjtés
Papírgyűjtés
Papírgyűjtés
E8OVK2
e8ovk2@inf.elte.hu
.csoport
Feladat
Egy általános iskola alsó tagozatán papírgyűjtő versenyt rendeztek. A verseny 2018.
szeptember 1-től, december 31-ig tartott. Feljegyezték a verseny adatait, és egy szöveges
állományban tárolták el. A fájl egy sorának felépítése: elsőként a tanuló neve szerepel (két
vagy több szóközök nélküli sztring), majd az osztálynak az azonosítója (1-4 számjeggyel
kezdődő, szóközt nem tartalmazó sztring, például 1a, 2b, 4c), majd a papírgyűjtés adatai:
dátum-súly (a dátum EEEE/HH/NN alakú sztring, a súly egy pozitív valós szám: a gyűjtött
papír súlya kilogrammban megadva) formájában. A sor dátum szerint rendezett. Az adatok
szóközökkel vagy tabulátorjelekkel vannak egy soron belül elválasztva. A szöveges állomány
sorait osztály-azonosító szerint rendezték. Feltehetjük, hogy a szöveges állomány helyesen
van kitöltve. Példa az állomány egy sorára: Nagyon Szorgalmas Eszter 4c 2018/09/10 4.5
2018/09/22 3.5 2018/11/05 1.2
(1) Listázzuk ki azokat a tanulókat (nevüket és osztályukat), akik legalább egyszer, több mint
5 kg papírt hoztak!
(2) Hány olyan osztály van, melynek minden tanulója (aki a versenyben részt vett) legalább
egyszer, több mint 5 kg papírt hozott?
Főprogram terve:
Új állapottér:
Főprogram terve
A = ( f : infile(Sor), l : 𝕃)
Sor = rec (nev : String, osztaly : String, papir : hozott*)
hozott = rec (datum : String, suly : R+)
Új állapottér:
A = ( t : enor(Osztaly), l : 𝕃)
Osztaly = rec (nev : String, hozo : 𝕃)
Ef =( t = t’)
Uf =( 𝑙, 𝑒𝑙𝑒𝑚 = 𝑺𝑬𝑨𝑹𝑪𝑯′(𝑒. hozo) ∧ 𝑙 → osztaly = 𝑒𝑙𝑒𝑚. osztaly)
𝑒∈𝑡
2
Osztályok felsorolója
1
enor(Osztaly) first(), next(), current(), end()
Állítsuk elő a soron következő Osztályt, akiről el kell dönteni, hogy vajon minden tanulója
hozott-e legalább 5 kg papírt legalább egyszer. Ehhez fel tudjuk használni az első részfeladat
megoldásához készített diák felsorolót (enor(Diak)), mely az input fájl egy sorát értelmezi, és
megadja, hogy az adott diák hozott-e több mint 5 kg papírt. A next() művelet végrehajtásakor
a Diak felsoroló (ha még nem ért a felsorolás végére) már tartalmazza azt az osztályt, és
annak első diákját, amelyet a next() feldolgoz majd, így, a tt.current() értékét már ismerjük,
ehhez nem kell sem a tt.first(), sem a tt.next(). A felsorolás csak addig tart, amíg ugyanazon
osztály diákjait „olvassuk” a tt.next() művelettel.
Tesztelési terv
Osztályok sikeressége
1. sikertelen osztály
2. sikeres osztály