Institute of Computer Science
  1. Courses
  2. 2020/21 fall
  3. Programming Languages (MTAT.03.006)
ET
Log in

Programming Languages 2020/21 fall

  • Info
  • Õppekava
  • Moodle
  • Loengud & Praksid
  • Lisamaterjalid
  • Küsi abi! (Fleep)

1. Haskelli kodutöö

Lahenda järgmised ülesanded Haskelli moodulisse Kt1.

Moodle'ist leiad ka lahendusfaili malli Kt1.hs.

1. ülesanne (0.3p)

Implementeeri naiivne astendamise funktsioon

aste :: Int -> Int -> Int
aste x n = undefined

kasutades eeskirja

{$\operatorname{aste}(x,n) = \underbrace{x \cdot x \cdot \ldots \cdot x}_{n \text{ tegurit}} $}.

Kasuta rekursiooni, mitte Haskellisse sisseehitatud astendamisoperaatoreid!

2. ülesanne (0.3p)

Implementeeri permutatsioonide arvu funktsioon

p :: Int -> Int -> Int
p n k = undefined

kasutades eeskirja

{$\operatorname{p}(n,k) = \underbrace{n \cdot (n-1) \cdot \ldots \cdot (n-(k-1))}_{k \text{ tegurit}} $}

Kasuta vahetut rekursiooni, mitte faktoriaali!

Rekursiooni väljamõtlemisel võid inspiratsiooni saada 1. ülesande lahendusest.

3. ülesanne (0.3p)

Implementeeri kombinatsioonide arvu funktsioon

c :: Int -> Int -> Int
c n k = undefined

kasutades eeskirja

{$\operatorname{c}(n,k) = \binom{n}{k}, $} kus binoomkordaja avaldub reeglitega:

  • {$\binom{n}{0} = \binom{n}{n} = 1$},
  • {$\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k}, \quad\text{kui $1\leq{}k\leq n-1$ } $}.

Kasuta antud binoomkordaja rekursioonireegleid, mitte faktoriaali!

4. ülesanne (0.3p)

Implementeeri kiire astendamise funktsioon

qaste :: Int -> Int -> Int
qaste x n = undefined

kasutades eeskirja

{$\begin{align*} \operatorname{qaste}(x,n) = &{} \begin{cases} 1 & \text{kui } n = 0 \\ y \cdot y & \text{kui } \texttt{even } n \\ x \cdot y \cdot y & \text{muidu} \end{cases}\\ &\text{kus} \quad y = \operatorname{qaste}(x, n \;\texttt{`div`}\; 2). \end{align*} $}.

Trükimasina kirjas operaator `div` kirjuta/kopeeri täpselt nii rõhumärkide (backtick) vahel, et seda funktsiooni kasutada binaarse operaatorina.

Defineeri abimuutuja y kasutades where või let konstruktsiooni.

5. ülesanne (0.3p)

Implementeeri naiivne jagamise funktsioon

ndiv :: Int -> Int -> Int
ndiv x y = undefined

kasutades eeskirja

{$\begin{align*} \operatorname{ndiv}(x,y) ={} &{} f(x,0)\\ &{} \text{kus} \quad f(n,z) = \begin{cases} z & \text{kui }n < y\\ f(n-y,z+1)& \text{muidu} \end{cases} \end{align*}$}.

Defineeri abifunktsioon f kasutades where või let konstruktsiooni.

6. ülesanne (0.5p)

Implementeeri pika jagamise funktsioon

bdiv :: Int -> Int -> Int
bdiv n d = undefined

kasutades eeskirja

{$\begin{align*} \text{bdiv}(n,d) = &{} \begin{cases} \texttt{error "invalid argument" } & \text{kui } n<0 \lor d<0\\ \texttt{error "division by zero" } & \text{kui } d = 0\\ f(0, 0, \texttt{finiteBitSize n} - 1) & \text{muidu} \end{cases}\\ &\text{kus} \quad f(r, q, i) = \begin{cases} q & \text{kui } i = -1 \\ f(2*r + g(n, i)-d, q + 2^i, i-1) & \text{kui } 2*r + g(n, i) >= d\\ f(2*r + g(n, i), q, i-1) & \text{muidu} \end{cases}\\\\ &{}\text{ja}\quad g(i, n) = \texttt{shiftR i n .&. 1} \end{align*} $}.

Trükimasina kirjas avaldised kirjuta/kopeeri täpselt nii nagu antud, et kasutada vastavaid Haskelli funktsioone (error, shiftR, finiteBitSize, .&.). Viimaste kasutamiseks lisa faili päisesse import Data.Bits.

Selles ülesandes kasuta astendamiseks Haskellisse sisseehitatud operaatorit ^.

Defineeri abifunktsioonid f ja g kasutades where või let konstruktsiooni.

Kasuta where või let konstruktsiooni ka muude korduvate avaldiste korral.

  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment