Az I. 339. feladat (2014. január) |
I. 339. A Prolog egy funkcionális programozási nyelv, melyben tényeket és logikai állításokat fogalmazhatunk meg. Ezek a formulák tartalmazhatnak konkrét adatokat és ismeretlen mennyiségeket. Például egyszerűen megfogalmazhatjuk, hogy melyik tanár, melyik napon és órában milyen tantárgyat tanít: tanít(kovács,fizika,szerda,4). A formulákban szereplő és kisbetűvel kezdődő szövegek konkrét tényeket, míg a nagybetűvel kezdődőek változót, ismeretlent jelentenek. Az állításokban szereplő ismeretlenek a program végrehajtása során kapnak értéket. A végrehajtás egy állítás igazságának a megkeresésével indul, melyet célállításnak hívunk. Ha például a célállítás a tanít(Ki,Mit,szerda,4), akkor a Prolog rendszer igaznak értékeli a tanít formulát úgy, hogy az ismeretlenek helyére Ki=kovács és Mit=fizika értékeket adja. A Prologról bővebben olvashatunk például Márkusz Zsuzsanna: Prologban programozni könnyű című könyvéből.
A Visual Prolog (ingyenesen letölthető és tanulásra használható a Personal Edition) Prolog programozási környezet, melynek PIE projektjében egyszerűen megfogalmazhatjuk állításainkat. A Visual Prologról és a PIE-ról bővebben olvashatunk a www.visual-prolog.com oldalon a Fundamental Visual Prolog #1 és #2 online tananyagban.
Prologban listák is használhatók, melyekkel a funkcionális nyelvekben megszokott műveletek végezhetők. Segítségükkel több információ is elhelyezhető egy tényállításban. Az alábbi lista feladatunk alapadatait tárolja, és azt mutatja meg, hogy az adott megoldást beküldő versenyző valamely KöMaL pontverseny adott számú feladatára hány pontot kapott:
pont( [ [kiss_tamás,i,330,5], [benedek_andrea,b,4500,0], ...,[kiss_tamás,i,340,10] ] ).
A lista alapján válaszoljunk a következő kérdésekre úgy, hogy elkészítjük a megadott nevű és paraméterű Prolog formulákat:
1. Hányan küldték be az I. 330. feladat megoldását - beküld_i330(DB)?
2. Hány nem 0 értékű megoldást küldtek be összesen a P pontversenyben - hány_nemnulla(P,DB)?
3. Hány pontot kaptak az egyes versenyzők a B. 4500. feladatra - pontok_b4500(V,Pont)?
4. Kik versenyeznek a C pontversenyben (az eredmény a nevek listája, amelyben minden név csak egyszer fordul elő) - kik_c(Lista)?
5. Melyik pontverseny melyik feladatának megoldásával szerezték a beküldő versenyzők összesen a legkevesebb pontot, és mennyit - legkevesebb(P,F,Pont)?
Beküldendő i339.pro néven egy a PIE rendszerben végrehajtható Prolog forrásprogram.
(10 pont)
A beküldési határidő 2014. február 10-én LEJÁRT.
A feladat megoldását a következő állomány tartalmazza: i339mo.pro.
Statisztika:
1 dolgozat érkezett. 10 pontot kapott: Kiss 107 Ádám.
A KöMaL 2014. januári informatika feladatai