Az I. 238. feladat (2010. április) |
I. 238. A matematikában és a természettudományokban a kifejezések leírásához hagyományosan zárójelezést használunk.
Készítsünk programot i238 néven, amely egy zárójeles kifejezésben megkeresi az első hibás vagy hiányzó karakter pozícióját. A kifejezésben háromféle zárójeltípus, számjegy és operátor lehet. A kifejezés más helyességét most nem ellenőrizzük.
Szabályos zárójelezés:
- ha s sorozat rendesen zárójelezett (s üres is lehet), akkor (s), [s] és {s} is az,
- ha s és p sorozat szabályos, akkor sp is szabályos,
- minden más sorozat szabálytalan.
A program első parancssori argumentuma legyen egy több tesztesetet leíró adatállomány neve. A fájl első sorában \(\displaystyle N\) (\(\displaystyle 1\le N\le 100\)) a tesztesetek száma és az ezt követő \(\displaystyle N\) sorban a tesztesetek állnak, amelyek hossza 1 és 255 közötti.
A parancssor második argumentumaként megadott kimeneti állomány \(\displaystyle N\) sorban egy-egy egész számot, az első hibás vagy hiányzó karakter pozícióját adja.
Például:
Beküldendő egy tömörített i238.zip állományban a program forráskódja (i238.pas, i238.cpp, ...), valamint a program rövid dokumentációja (i238.txt, i238.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.
(10 pont)
A beküldési határidő 2010. május 10-én LEJÁRT.
Megoldásokról
A feladat a megoldóknak könnyűnek számított, ennek ellenére kevés program érkezett.
Szabó Attila (Pécs, Leőwey Klára Gimnázium) 9. osztályos tanuló megoldása alapján
A zárójelezés helyességének definícióját úgy fogalmazom át, hogy minden nyitó zárójelhez egy hozzátartozó záró zárójel tartozik.
Ennek ellenőrzésére egy verem adatszerkezet használok. A karakterverembe minden nyitó zárójelet beteszek. A kifejezés feldolgozása során amikor záró zárójelhez érek, a veremből kivett nyitó zárójelet vizsgálom. Ha a két zárójel összeillik, akkor azok megfelelő zárójelpárt határoznak meg, különben, ha a verem üres, vagy az első hibás karakter az éppen feldolgozott pozíción van és a feldolgozás véget ér.
Ha végigérünk a feldolgozáson (nincs rossz bezáró zárójel), akkor még megnézem a verem tartalmát. Amennyiben a verem üres, minden zárójel bezáródott, így a zárójelezés helyes, a kimenet 0, különben van még be nem zárt zárójel, és így a string aktuális hosszánál eggyel nagyobb pozícióról hiányzik egy karakter. Ennek megfelelően a kimenetnek a string hossza+1-nek kell lennie.
Mintamegoldás: i238.pas
Tesztállomány: zarojel1.be
Statisztika:
5 dolgozat érkezett. 10 pontot kapott: Balla Attila, Pap 999 Dávid, Szabó 928 Attila. 9 pontot kapott: Barta 111 János. 7 pontot kapott: 1 versenyző.
A KöMaL 2010. áprilisi informatika feladatai