BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak
Nappali tagozat
2005/2006. tanév, tavaszi félév

Deklaratív programozás

1. Prolog kis házi feladat

V1.1, 2006. február 14.

A feladat

Egy s pozitív szám n alapú megfordítását a következőképpen definiáljuk:

Megírandó egy olyan program Cékla nyelven, amely tartalmazza az int forditottja(int s, int n){...} fő függvényt.
forditottja(s, n) == f jelentése: f az s szám n alapú megfordítása.

/* forditottja(s, n) == f, ha f az s szám n alapú megfordítása.
   Egy s szám n alapú megfordítását úgy kapjuk, hogy az s-t felírjuk az n
   alapú számrendszerben, a számjegyeit egy listával ábrázoljuk, majd a
   listát megfordítjuk és a kapott listát n alapú számnak tekintjük. */
int forditottja(int s, int n) {
  ...
}

Mintamegoldás

Az alábbi mintamegoldás csak egy- és kétjegyű számokra működik:

int forditottja(int s, int n) {
  if (s<n) return s;
  return s/n+s%n*n;
}

Példák

| * forditottja(123, 10);
321

| * forditottja(5, 2);
5
% mert 52 = 1 0 1

| * forditottja(8, 2);
1
% mert 82 = 1 0 0 0

| * forditottja(4, 2);
1
% mert 42 = 1 0 0

| * forditottja(1023, 10);
3201

| * forditottja(5, 3);
7
% mert 52 = 1 2, és 73 = 2 1
A programot Cékla nyelven kell elkészíteni, amely a C deklaratív résznyelve. Ügyeljünk arra, hogy a Céklában a C++-ban megszokott // jelölés nem használható megjegyzések jelölésére.

A jobbrekurzív függvények kevesebb memóriát igényelnek, mint az egyéb rekurzív függvények, ezért a feladat megoldása során jobbrekurzív függvények írása ajánlott, ám ez nem kötelező, a pontozásba nem számít bele.

Otthoni tesztkörnyezet

Az innen letölthető forditottja.zip archívum tartalma segíthet a fejlesztés során. A fájl tartalmaz egy minta forditottja.c-t, amit a feladat megoldása során át kell írnunk úgy, hogy mindig helyes választ adjon. Az átírás után a program kipróbálható a forditottjac.c lefordításával és futtatásával (UNIX alatt a cc forditottjac.c && ./a.out paranccsal).

A fenti fordítás azonban nem ellenőrzi, hogy a C nyelvnek csak a Céklában megengedett részhalmazát használjuk-e. Az ellenőrzéshez szükség van egy telepített SICStus Prolog-ra. A Cékla-értelmező bináris változatát a letöltött forditottja.zip tartalmazza, ceklat.sav néven. Ha a kitömörített fájlok az aktuális könyvtárban vannak, akkor egy próbafuttatás végezhető a sicstus -r ceklat.sav <forditottja.ct paranccsal. Az e parancs kimenetében található számok jelentése, négyesével csoportosítva a következő: (s; n; számolt forditottja(s,n); várt forditottja(s,n). Újabb tesztesetek a forditottja.ct, illetve a forditottjac.c módosításával vehetők fel.

A Cékla a SICStus Prolog telepítése nélkül is futtatható (bár ez nem ajánlott, mert a félév folyamán amúgy is szükség lesz SICStus-ra, ezért érdemes minél hamarabb telepíteni). A Cékla önálló programként Win32 és Linux (glibc2.2 & 2.3) alatt is fut (a linkeket követve letölthető). Jelenleg Windows alatt a Cékla rendszert olyan könyvtárba lehet csak telepíteni, amelynek elérési útvonalában nincs szóköz!

Tudnivalók a beadásról

A kis házi feladat beadása nem kötelező.

A programot az Elektronikus Tanársegéd segítségével weben keresztül lehet beadni, a HF beadás menüpont alatt. Ez az első Prolog kis házi feladat, forditottja.c néven kell beküldeni a megoldást. A névben meg kell különböztetni a kis- és nagybetűket. A beadási határidő 2006. március 1., 24:00.

A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatért plusz 1 pont jár.