Az I. 316. feladat (2013. március) |
I. 316. Egy logikai kifejezés elemi állításait az angol ábécé nagybetűivel jelöljük. A logikai kifejezés leírása során a nem, az és, a vagy és az implikáció műveleteket használjuk, amelyeket rendre a !, &, |, > karakterekkel jelöljük. A műveletek végrehajtási sorrendjét zárójelezéssel módosíthatjuk.
Írjunk programot, amely a kifejezés kiértékelésének lépéseit mutatja be a következő módon. Keressük meg az egyik legelőször kiértékelhető részét a kifejezésnek, majd nevezzük el az angol ábécé egy kisbetűjével. Az eredeti kifejezésbe helyettesítsük be ezt a betűt, majd kezdjük elölről. A folyamat végén a kifejezés az angol ábécének csupán egyetlen kisbetűjét fogja tartalmazni.
A bemeneti fájl egyetlen sora tartalmazza a feldolgozandó logikai kifejezést, amely legfeljebb 80 karakter hosszú. A kimeneti fájl sorai a kiértékelés lépéseit mutatják be. Minden sor két részből áll. Az első rész az angol ábécé egy, még nem használt kisbetűjével kezdődik, majd az egyenlőségjelet követően a kifejezés első kiértékelésre kerülő részével folytatódik. Egy szóközt követően a kifejezést írjuk át úgy, hogy abba - a kiértékelésre kerülő rész helyére - a sorbeli kisbetűt írjuk.
A program első parancssori argumentuma a bemeneti fájl, a második argumentuma pedig a kimeneti fájl neve legyen.
Beküldendő a program forráskódja (i316.pas, i316.cpp, ...), valamint a program rövid dokumentációja (i316.txt, i316.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ő 2013. április 10-én LEJÁRT.
A logikai kifejezések kezelését váró program meglepően nehéznek bizonyult.
A legtöbb beküldő nem nézett utána, hogy a logikai kifejezések kiértékelése hogyan történik. A logikai műveletek prioritása a következő sorrendben növekszik: ekvivalencia, implikáció, vagy, és, tagadás. Az azonos prioritású műveleteket balról jobbra haladva kell feldolgozni.
Az értékelésnél az alábbi tesztfájlt használtuk: teszt316.zip
A dokumentáció tartalmi része; az előírásoknak megfelelően működő program; az 1-6 esetből legalább kettő helyes; az 1-6 esetből legalább mind helyes; a 7-12 esetből legalább kettő helyes; a 7-12 esetből legalább mind helyes; a többi teszteset 1-1 pontot ért.
Versenyzői észrevétel érkezett, hogy a bemeneti fájlokban az első sor végén található sorvégjel miatt ad hibás eredményt a programja. (A feladatban "első és egyetlen sor" megfogalmazás szerepelt.) Ezért a megoldásokat a sorvégjel nélküli tesztesetekkel teszt316b.zip is megvizsgáltuk, mivel a megoldás tartalmilag ilyekor is lehet helyes.
Az eredmények ennek megfelelően módosultak.
Az összes tesztesetre csak Fényes Balázs programja adott helyes választ: i316fenyes.cs
Statisztika:
7 dolgozat érkezett. 9 pontot kapott: Fényes Balázs. 7 pontot kapott: 2 versenyző. 3 pontot kapott: 2 versenyző. 2 pontot kapott: 1 versenyző. 1 pontot kapott: 1 versenyző.
A KöMaL 2013. márciusi informatika feladatai