1. naloga

Dnevnik

V računalniškem sistemu imamo zabeležene dogodke in bi jih radi v strnjeni obliki shranjevali na datoteko. Vsak dogodek (kot na primer prijava ali odjava uporabnika, razne napake) je predstavljen z nizom znakov (kratko besedilo/vrstica), ne daljšim od 100 znakov. Dogodki so zapisani na vhodni datoteki, po en dogodek v vsaki vrstici.

Na voljo imamo podprogram (funkcijo) PreberiDogodek(), ki prebere naslednji dogodek z vhodne datoteke in ga vrne kot niz znakov. Če smo že na koncu vhodne datoteke in novih dogodkov ni več, ta podprogram vrne prazen niz.

Ker se nekateri dogodki včasih zgodijo večkrat zapored (ne da bi se vmes zgodil kakšen drug dogodek), jih lahko zapišemo na izhodno datoteko v skrajšani obliki: ponovitve zadnjega izpisanega dogodka le štejemo in jih ne izpisujemo. Ko se kasneje pojavi nek drugačen dogodek, izpišemo le, da se je zadnji izpisani dogodek ponovil še n-krat. V primeru, da gre le za eno dodatno ponovitev (n = 1, torej skupaj s prvo izpisano pojavitvijo dve pojavitvi, glej zgled), namesto sporočila o ponovitvi izpišemo kar sam ponovljeni dogodek, saj ne bi s sporočilom o ponovitvi nič prihranili.

Tako bi denimo naslednje zaporedje dogodkov:

aaa
bbbbb
ccc
ccc
ccc
dd
dd
aaa
aaa
aaa
aaa

izpisali v strnjeni obliki kot:

aaa
bbbbb
ccc
ponovljeno se 2-krat
dd
dd
aaa
ponovljeno se 3-krat

Napiši program, ki bo bral dogodke z vhodne datoteke in jih, takoj ko bo to mogoče, izpisoval v tukaj opisani strnjeni obliki. (Dogodke lahko bereš po svoje s pomočjo standardnih funkcij za delo z datotekami ali pa uporabiš zgoraj omenjeno funkcijo PreberiDogodek.)