Difference between revisions of "FP Laboratory 2/cs"

From Marek Běhálek Wiki
Jump to navigation Jump to search
(Created page with "* Funkce která ověří, že zadaný rok je přestupný (rok je přestupný když je dělitelný 4 a zároveň není dělitelný 100. Pokud je dělitelný 400, je to přestup...")
(Created page with "* Implementujte dvě funkce, které vrátí maximální hodnotu ze dvou respektive tří čísel. Ty budou zadány jako parametry.")
Line 48: Line 48:
 
* Funkce která ověří, že zadaný rok je přestupný (rok je přestupný když je dělitelný 4 a zároveň není dělitelný 100. Pokud je dělitelný 400, je to přestupný rok).
 
* Funkce která ověří, že zadaný rok je přestupný (rok je přestupný když je dělitelný 4 a zároveň není dělitelný 100. Pokud je dělitelný 400, je to přestupný rok).
 
<syntaxhighlight lang="Haskell">leapYear :: Int -> Bool</syntaxhighlight>
 
<syntaxhighlight lang="Haskell">leapYear :: Int -> Bool</syntaxhighlight>
* Implement two functions that returns a maximum from 2 respectively 3 given parameters.
+
* Implementujte dvě funkce, které vrátí maximální hodnotu ze dvou respektive tří čísel. Ty budou zadány jako parametry.
 
<syntaxhighlight lang="Haskell">
 
<syntaxhighlight lang="Haskell">
 
max2 :: Int -> Int -> Int
 
max2 :: Int -> Int -> Int

Revision as of 08:53, 10 October 2019

Types

  • V interpretu GHCi lze použít příkaz :info k zjištění typu funkce nebo operátoru, zjistěte typ následujících elementů: +, sqrt, succ, max
  • Zjistěte informace o typech následujících výrazů a vyhodnoťte je. K tomuto slouží příkaz :type. Je možné zapnout, aby interpret standardně vypsal typ výrazu. Toto jde příkazem :set +t (tuto funkci lze vypnout :unset +t).
5 + 8 
3 * 5 + 8
2 + 4
sqrt 16 
succ 6
succ 7
pred 9
pred 8
sin (pi / 2)
truncate pi
round 3.5
round 3.4 
floor 3.7 
ceiling 3.3
mod 10 3
odd 3
  • Na přednáškách byly diskutovány některé základní datové typy: Int, Double, Bool, Char. Přiřaďte předcházejícím výrazům nejvhodnější z těchto základních datových typů. Váš tip je možné ověřit využitím operátoru ::. Například, pro první výraz předpokládejme, že jeho výsledný typ je Int. Můžeme manuálně přetypovat výsledek na celé číslo a toto ověřit.
Prelude> :type (5 + 8) :: Int
(5 + 8) :: Int :: Int

Pokud provedeme nekorektní konverzi na Char, dostaneme následující výsledek.

Prelude> :type (5 + 8) :: Char

<interactive>:1:2: error:
    * No instance for (Num Char) arising from a use of `+'
    * In the expression: (5 + 8) :: Char

Pro tento výraz je platná konverze také na typ Double.

Prelude> :type (5 + 8) :: Double
(5 + 8) :: Double :: Double

Jednoduché funkce

Implementujte následující funkce:

  • Funkce která spočítá faktoriál zadaného čísla.
factorial :: Int -> Int
  • Funkce která spočítá n-tý člen ve Fibonacciho sekvenci.
fib :: Int -> Int
  • Funkce která ověří, že zadaný rok je přestupný (rok je přestupný když je dělitelný 4 a zároveň není dělitelný 100. Pokud je dělitelný 400, je to přestupný rok).
leapYear :: Int -> Bool
  • Implementujte dvě funkce, které vrátí maximální hodnotu ze dvou respektive tří čísel. Ty budou zadány jako parametry.
max2 :: Int -> Int -> Int
max3 :: Int -> Int -> Int -> Int
  • Term combination is a selection of items from a collection, such that (unlike permutations) the order of elements in this selection does not matter. Compute the number of possible combinations if we are taking k things from the collection of n things.
combinations :: Int -> Int -> Int
  • Implement a function that computes the number of solutions for a quadratic equation. This quadratic equation will be given using standard coefficients: a, b, c.
numberOfRoots :: Int -> Int -> Int -> Int
-- To simplify the solution, let construct can be used
f x y = let a = x + y
        in a * a
  • Implement a function that computes greatest common divider for two given numbers.
gcd' :: Int -> Int -> Int
  • Implement a function that compute, if a given number is a prime number.
isPrime :: Int -> Bool