BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
2005/2006. tanév, tavaszi félév
|
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) { ... }
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; }
| * 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 1A 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.
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!
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.