Feladat: S.11 Korcsoport: - Nehézségi fok: -
Füzet: 2005/október, 423 - 424. oldal  PDF  |  MathML 
Témakör(ök): Nehezebb feladat

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 világ dolgait szeretjük különböző tulajdonságok szerint csoportosítani, és a tulajdonságok között összefüggéseket keresni. Írjunk programot, amely tulajdonságok között von le logikai következtetéseket.
A program bemenetének, amit a billentyűzetről (a standard bemenetről) olvas, minden sora egy-egy állítást vagy kérdést tartalmaz; ezekre egy-egy sorban kell válaszolnia a képernyőre (a standard kimenetre).
Az állítások és kérdések különböző tulajdonságokra vonatkoznak. Az elemi tulajdonságok egyetlen szóból állnak, pl. kicsi, piros. A NINCS, LÉTEZIK, ÉS, VAGY, NEM, HA, AKKOR szavak tiltottak, de minden más szót elemi tulajdonságnak tekintünk.
Az elemi tulajdonságok tagadását úgy képezzük, hogy eléjük írjuk, hogy NEM. Például a piros tagadása az, hogy NEM piros.
Az összetett tulajdonságokat úgy képezzük, hogy néhány elemi tulajdonságot vagy elemi tulajdonságok tagadásait összekapcsoljuk az ÉS vagy a VAGY szavakkal, pl. kicsi ÉS NEM piros. A kétféle összekapcsolás kombinálását (pl. nagy ÉS piros VAGY kék) nem engedjük meg.
Háromféle állítást engedünk meg. Ezek szintaxisa:

 
LÉTEZIK  (tulajdonság)  NINCS  (tulajdonság)  HA  (tulajdonság)  AKKOR  (tulajdonság)  
 

Kérdést úgy képezünk, hogy egy állítás végére kérdőjelet írunk.
Az állításokra a program a következőket válaszolhatja:
 
ÉRTEM     ha új információt kapott  TUDOM     ha az állítás következik a korábbiakból  EZ ELLENTMOND A KORÁBBIAKNAK   (ilyenkor figyelmen kívül hagyja)  NEM ÉRTEM     ha szintaktikusan helytelen az input  
 

Hasonlóan a kérdésekre adható válaszok:
 
IGEN, illetve  NINCS     ha a kérdés igaz állításra vonatkozott  NEM, illetve  DE IGEN     ha a kérdés hamis állításra vonatkozott  NEM TUDOM     ha a válasz igaz és hamis is lehet  
 

A program addig fusson, amíg a felhasználó le nem állítja. Feltételezhetjük, hogy az elemi tulajdonságok száma legfeljebb 8, és az input legfeljebb 10 000 sorból áll. A kis- és nagybetűket tekintsük azonosnak. Minden olyan karaktert, ami nem betű vagy kérdőjel, tekintsünk a szóközzel azonosnak.
 
Példa (dőlt betűvel szedtük a számítógép válaszait):
 
HA kutya VAGY macska VAGY ló AKKOR szőrös ÉS négylábú
ÉRTEM
HA tacskó VAGY foxi AKKOR kutya
ÉRTEM
HA foxi AKKOR négylábú
TUDOM
HA szúnyog AKKOR hatlábú
ÉRTEM
HA tacskó AKKOR szőrös?
IGEN
LÉTEZIK tacskó?
NEM TUDOM
LÉTEZIK tacskó
ÉRTEM
NINCS szőrös ÉS kutya?
DE IGEN
HA négylábú AKKOR NEM hatlábú
ÉRTEM
LÉTEZIK ló ÉS szúnyog?
NEM
NINCS hatlábú ÉS tacskó?
NINCS
LÉTEZIK négylábú VAGY hatlábú ÉS NEM szőrös?
NEM ÉRTEM
 
Beküldendő a program forráskódja (s11.pas, s11.c, ...)