BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
1999/2000. tanév, tavaszi félév
|
Deklaratív programozás
1. Prolog kis házi feladat, 1.2 változat
2000. március 21.
A feladat
Állítsa elő egy N nem negatív egész szám B alapú
számrendszerben vett jegyeinek listáját (B > 1 egész)! Írjon
egy Prolog eljárást, amely a legnagyobb helyiértékű jegyet helyezi a lista
elejére, és egy másik eljárást, amely a legkisebb helyiértékű jeggyel kezdi
a listát.
A segédeljárásokat feltétlenül lássa el fejkommenttel!
Törekedjék arra, hogy a megoldás hatékony legyen (az eljárások
legyenek jobbrekurzívak, append-et, reverse-et ne használjon)!
Vigyázzon arra is, hogy a megoldás ne sikerüljön többszörösen!
% szam(Szám, Alap, Jegyek): A Szám >= 0 szám
% Alap > 1 alapú számrendszerben balról jobbra
% vett jegyeinek listája Jegyek.
% :- pred szam(int::in, int::in, list(int)::out).
% fszam(Szám, Alap, Jegyek): A Szám >= 0 szám
% Alap > 1 alapú számrendszerben jobbról balra
% vett jegyeinek listája Jegyek.
% :- pred fszam(int::in, int::in, list(int)::out).
Példák
| ?- szam(0, 2, Jk).
Jk = [0] ? ;
no
| ?- fszam(0, 2, Jk).
Jk = [0] ? ;
no
| ?- szam(6, 2, Jk).
Jk = [1,1,0] ? ;
no
| ?- fszam(6, 2, Jk).
Jk = [0,1,1] ? ;
no
| ?- szam(1266, 100, Jk).
Jk = [12,66] ? ;
no
| ?- fszam(1266, 100, Jk).
Jk = [66,12] ? ;
no
| ?-
Egyéb követelmények és tudnivalók
Ez az első Prolog kis házi feladat, ezért khf-pl1.pl
néven kell beküldeni a megoldást.
A beadási határidő 2000. március 27., hétfő, 24:00
óra.
A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen
megoldott kis házi feladatért plusz 1 pont jár (a 100 pontból).
A házi feladat tesztelése
A beküldött házi feladat futásáról az alábbi formában kapnak választ:
Test results for __Dr_BuboBubo.3 on March 21, Tuesday, 2000, at 11:04:59.
Test was done on kempelen (SunOS).
Testing your homework
=====================
Testing case #1
---------------
{loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...}
{module dp_test imported into user}
{loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...}
{module lists imported into dp_test}
{loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 20 msec 20440 bytes}
Goal: szam(0,7,A), all solutions in A: expected [[0]], got [[0],[]]; test failed
>>>>> Normal program termination: FAILURE
Testing case #2
---------------
{loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...}
{module dp_test imported into user}
{loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...}
{module lists imported into dp_test}
{loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes}
Goal: szam(17,3,A), all solutions in A: expected [[1,2,2]], got [[1,2,2]]; test OK
>>>>> Normal program termination: SUCCESS
Testing case #3
---------------
{loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...}
{module dp_test imported into user}
{loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...}
{module lists imported into dp_test}
{loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes}
Goal: fszam(0,7,A), all solutions in A: expected [[0]]
>>>>> Timed out.
Testing case #4
---------------
{loading /home/pp/dp/dp-shw/homeworks/00s/recent/_SzerediPeter-pl1/pl1-eval.ql...}
{module dp_test imported into user}
{loading /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po...}
{module lists imported into dp_test}
{loaded /usr/local/sicstus/lib/sicstus-3.8.1/library/lists.po in module lists, 10 msec 20440 bytes}
Goal: fszam(17,3,A), all solutions in A: expected [[2,2,1]]
{EXISTENCE ERROR: seged(17,3,_2045): procedure user:seged/3 does not exist}
>>>>> Exception occurred.
--------------------------------------------------------------------
1 good solutions out of 4.
--------------------------------------------------------------------
Results of test cases
(1: success, 0: failure, t: timeout, e: error/exception, i: internal error)
0 1 t e
Itt az első futás hibás volt, mert az elvárt egy megoldás
{0]
mellett még egy második megoldást, a
[]
-t is adott. A második futás sikeres, a harmadik
időtúllépés miatt állt le (feltehetően végtelen ciklus), míg az utolsó
egy nem-definiált eljárás meghívásakor hibára futott (kivételt
dobott).
Használható beépített eljárások
A feladat megoldásához szüksége lehet a következő beépített eljárásokra (de természetesen nem kötelező ezeket használni):