proba

понедельник, 29 августа 2011 г.

Программирование на языке Haskell урок № 5

Определите функцию, принимающую на вход целое n и возвращающую список, содержащий n элементов, упорядоченных по возрастанию.
1) Список факториалов
2) Список степеней двойки
3) Список треугольных чисел*.
4) Список пирамидальных чисел#.
* n-е треугольное число tn равно количеству одинаковых монет, из которых можно построить равносторонний треугольник, на каждой стороне которого укладывается n монет. Нетрудно убедится, что t1=1 и tn=n+tn-1
# n-е пирамидальное число pn равно количеству одинаковых шаров, из которых можно построить пирамиду с треугольным основанием, на каждой стороне которой укладывается n шаров. Нетрудно убедится, что p1=1 и pn=tn+pn-1

Решение № 1
 list5 :: Integer -> [Integer]
 factorial 0 = 1
 factorial x = x*factorial(x-1)
 list5 0 = [ ]
 list5 x = list5 (x-1)++[factorial(x)]

Запуск:
 Main> list5 5
 [1,2,6,24,120] :: [Integer] 

Решение № 2:
 list6 :: Integer -> [Integer]
 stepen 1 = 1
 stepen x = 2*stepen(x-1)
 list6 0 = [ ]
 list6 x = list6 (x-1)++[stepen(x+1)]
  
Запуск:
 Prelude> :load "c:\\haskell\\Laba21.hs"
 Main> list6 7
 [2,4,8,16,32,64,128] :: [Integer]

Решение № 3:
 list7 :: Integer -> [Integer]
 piram 1 = 1
 piram(x) = x+piram(x-1)
 list7 0 = [ ]
 list7 x = list7 (x-1)++[piram(x)]

 Запуск:
 Main> list7 4
 Reading file "c:\haskell\Laba21.hs":
 [1,3,6,10] :: [Integer]

Решение № 4:
 list8 :: Integer -> [Integer]
 pir 1 = 1
 pir(x) = x+pir(x-1)
 p 1 = 1
 p x = pir(x) + p(x-1)
 list8 0 = [ ]
 list8 x = list8 (x-1)++[p(x)]

 Запуск:
 Main> list8 4
 [1,4,10,20] :: [Integer]
 
Если вы забыли как запускать, то вам сюда: урок № 2 п. 2

Комментариев нет:

Отправить комментарий