Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:pp:haskell:lab-simple-funcs [2018/05/15 09:59] kkutt [Zadania] |
pl:dydaktyka:pp:haskell:lab-simple-funcs [2018/05/15 10:18] kkutt [Wprowadzenie] |
sign x | x > 0 = 1 | sign x | x > 0 = 1 |
| x == 0 = 0 | | x == 0 = 0 |
| x < 0 = -1</code> | | x < 0 = -1</code> ostatni warunek możemy też zapisać z wykorzystaniem słowa kluczowego `otherwise` (else z Javy): <code haskell>sign :: Double -> Double |
| sign x | x > 0 = 1 |
| | x == 0 = 0 |
| | otherwise = -1</code> |
* Najprostsza funkcja dodająca dwie liczby całkowite może być zdefiniowana jako: <code>sum : Z x Z --> Z : sum(m, n) = m + n</code> W Haskellu możemy ją zrealizować na co najmniej trzy podstawowe sposoby: | * Najprostsza funkcja dodająca dwie liczby całkowite może być zdefiniowana jako: <code>sum : Z x Z --> Z : sum(m, n) = m + n</code> W Haskellu możemy ją zrealizować na co najmniej trzy podstawowe sposoby: |
* Wykorzystując krotki:<code haskell>sum2a :: (Int, Int) -> Int | * Wykorzystując krotki:<code haskell>sum2a :: (Int, Int) -> Int |
- Wyobraźmy sobie eksperyment biologiczny, w którym wykorzystuje się dwa rodzaje bakterii. Co sekundę bakteria typu A dzieli się na dwie bakterie typu B, a bakteria typu B dzieli się na jedną typu A i jedną typu B. Załóżmy, że bakterie nie umierają podczas eksperymentu. | - Wyobraźmy sobie eksperyment biologiczny, w którym wykorzystuje się dwa rodzaje bakterii. Co sekundę bakteria typu A dzieli się na dwie bakterie typu B, a bakteria typu B dzieli się na jedną typu A i jedną typu B. Załóżmy, że bakterie nie umierają podczas eksperymentu. |
- Na początku eksperymentu (w momencie 0) mamy dokładnie dokładnie dwie bakterie: jedną typu A i jedną typu B. Napisz funkcję, która **wyliczy liczbę bakterii obydwu typów w czasie s sekund od rozpoczęcia eksperymentu**. | - Na początku eksperymentu (w momencie 0) mamy dokładnie dokładnie dwie bakterie: jedną typu A i jedną typu B. Napisz funkcję, która **wyliczy liczbę bakterii obydwu typów w czasie s sekund od rozpoczęcia eksperymentu**. |
- Obejrzyj wartości funkcji dla n ∈ {5, 7} \\ spodziewany wynik: <code haskell>map bakteria [5..7] = [(21,43),(43,85),(85,171)]</code> | - Obejrzyj wartości funkcji dla n ∈ {5, 7} \\ spodziewany wynik: <code haskell>map bakteria [0..7] = [(1,1),(1,3),(3,5),(5,11),(11,21),(21,43),(43,85),(85,171)]</code> |
- W jaki sposób zmienią się wyniki, jeżeli eksperyment rozpoczniemy posiadając dokładnie **dwie bakterie typu A**? Napisz drugą funkcję, która to zamodeluje. | - W jaki sposób zmienią się wyniki, jeżeli eksperyment rozpoczniemy posiadając dokładnie **dwie bakterie typu A**? Napisz drugą funkcję, która to zamodeluje. |
- Napisz funkcję liczącą wartość **supercyfry** dla zadanego argumentu. Supercyfrę dla danej liczby całkowitej x definiujemy jako:\\ - x, jeżeli x jest jednocyfrową liczbą\\ - supercyfrę od xx, gdzie xx to suma cyfr liczby x (dla x mających co najmniej dwie cyfry)\\ Przykłady: | - Napisz funkcję liczącą wartość **supercyfry** dla zadanego argumentu. Supercyfrę dla danej liczby całkowitej x definiujemy jako:\\ - x, jeżeli x jest jednocyfrową liczbą\\ - supercyfrę od xx, gdzie xx to suma cyfr liczby x (dla x mających co najmniej dwie cyfry)\\ Przykłady: |