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. SML kis házi feladat

V1.0, 2006. március 18.

A feladat

Kisfejűnek nevezünk egy (vezető nullákat nem tartalmazó) számsorozatot, amelynek első eleme kisebb az utolsónál, második eleme kisebb az utolsó előttinél s.í.t. Pontosítva: Egy a1, a2, ..., an számsorozat kisfejű, ha a1 > 0, és minden i-re, amelyre 1 ≤ in div 2 (ahol div az egészosztást jelenti), ai < an+1-i. Példák kisfejű sorozatokra: 1 2; 4 2 5 3 5; 1 2 3 4 3 2. Ellenpéldák: 1 1; 4 2 5 3 4; 1 2 3 3 1 0.

Írjon olyan SML-függvényt kisfeju néven, amely kielégíti az alábbi specifikációt:

(* kisfeju : int -> int
   kisfeju a = b, ahol 'b' >= 2 a legkisebb olyan természetes szám, amelyre
   a 'b' alapú számrendszerben felírt 'a' szám kisfejű számsorozatot ad eredményül
*)
Segédfüggvényeket definiálhat. A jobbrekurzív függvényekből generált számítási folyamatok kevesebb tárterületet használnak, mint a nemjobbrekurzív függvényekből generáltak, ezért ajánljuk, hogy jobbrekurzív függvényeket írjon, ám ez nem kötelező, a pontozásba nem számít bele.

Példák

kisfeju 4   = 5 (* mert 45 = 4 kisfejű, de 44 = 1 0, 43 = 1 1, 42 = 1 0 0 nem az *)

kisfeju 11  = 3 (* mert 113 = 1 0 2 kisfejű, de 112 = 1 0 1 1 nem az *)

kisfeju 145 = 7 (* mert 1457 = 2 6 5 kisfejű, de ... *)

kisfeju 293 = 3 (* mert 2933 = 1 0 1 2 1 2 kisfejű, de ... *)
Megjegyzés: a példákban dr a d decimális szám r számrendszerbeli megfelelőjét jelenti.

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ő SML kis házi feladat, a megoldást khf-ml1.sml néven kell beküldeni. A névben meg kell különböztetni a kis- és nagybetűket. A beadási határidő 2006. március 31., péntek, 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.