Автор: Пользователь скрыл имя, 26 Октября 2011 в 13:31, курсовая работа
Построить рекурсивную функцию для вычисления n-го члена последовательности, в которой каждый следующий четный член равен произведению двух предыдущих, а каждый следующий нечетный член равен сумме двух предыдущих, а первые 2 члена равны соответственно 1 и 2. (Например: 1 2 3 6 9 54 63 ...)
Задача № 1 3
1.1 Анализ задания и постановка задачи 3
1.2 Проектирование программы 3
1.3 Реализация программы 3
1.4 Методика и результаты тестирования 4
Задача № 2 5
2.1 Анализ задания и постановка задачи 5
2.2 Проектирование программы 5
2.3 Реализация программы 5
2.4 Методика и результаты тестирования 5
Задача № 3 6
3.1 Анализ задания и постановка задачи 6
3.2 Проектирование программы 6
3.3 Реализация программы 6
3.4 Методика и результаты тестирования 6
Задача № 4 7
4.1 Анализ задания и постановка задачи 7
4.2 Проектирование программы 7
4.3 Реализация программы 7
4.4 Методика и результаты тестирования 7
Литература 8
Министерство
образования Республики Беларусь
Учреждение образования
«Полоцкий
государственный университет»
Кафедра
технологий программирования
КОНТРОЛЬНАЯ
РАБОТА
По курсу:
«Функциональное программирование»
Группа 09-ИТз1
Зачетная книжка № 09101119
Вариант
№ 20
Выполнил
Терешков А.С.
Проверил
Кухта С.В.
Полоцк
2011
Содержание
Построить
рекурсивную функцию для
Принцип работы программы следующий. Пользователь вызывает функцию со следующими переданными параметрами: n-ый член последовательности, который необходимо вычислить; первые 2 члена последовательности, которые соответственно равны 1 и 2; и номер шага равный 1. Если текущий элемент последовательности чётный, то каждый следующий будет равен сумме двух предыдущих, в противном случае произведению двух предыдущих. Рекурсивная функция будет работать до тех пор, пока количество шагов не будет равно n-1.
func :: (Integer, Integer, Integer, Integer) -> Integer
func (n, i1, i2, i) = if i == n-1 then i2
else
else
main = func (7, 1, 2, 1)
Тесты показали стабильную работу при корректных входных данных.
Пример:
Для заданных полиномов Pn(x) и Qn(x) найти полином R - сумму полиномов P и Q. Каждый полином представить в виде списка
Принцип работы программы следующий. Пользователь с клавиатуры вводит два списка. Функция s определяет список максимальной длины и передает его в первом параметре функции suml. Далее в функции suml к элементам первого списка прибавляются элементы второго списка.
suml :: [Int]->[Int]->[Int]
suml xs ys = zipWith (+) xs ys
s a b = let n = length a;
m = length b;
c = max n m;
comp [] o = take o $ repeat 0;
comp (g:h) o = g : (comp h $ o-1) in suml
(comp a c) (comp b c)
main = s [1, 2, 3] [4, 5]
Тесты показали стабильную работу при корректных входных данных.
Составить программу, реализующую сортировку линейного числового списка на основе бинарного отсортированного дерева.
Принцип работы программы следующий. Пользователь с клавиатуры вводит список, который необходимо отсортировать. Далее происходит построение двоичного дерева и сборка результирующего массива путём обхода узлов в необходимом порядке следования ключей.
data Tree a = Leaf | Node (Tree a) a (Tree a)
insert :: Ord a => a -> Tree a -> Tree a
insert x Leaf = Node Leaf x Leaf
insert x (Node t y t') | x <= y = Node (insert x t) y t'
insert x (Node t y t') | x > y = Node t y (insert x t')
flatten :: Tree a -> [a]
flatten Leaf = []
flatten (Node t x t') = flatten t ++ [x] ++ flatten t'
treesort :: Ord a => [a] -> [a]
treesort = flatten . foldr insert
Leaf
main = (readLn::IO[Int]) >>= print . treesort
Тесты показали стабильную работу при корректных входных данных.
Найти с точностью 0.001 корни уравнения на отрезке [2.5, 3.5]: .
Принцип работы программы следующий. Пользователь с клавиатуры вызывает рекурсивную функцию, в которую передаёт начало отрезка, на котором необходимо найти корни уравнения. Далее путем вычисления функции и проверки заданной точности происходит поиск корней, если значение корня больше конца отрезка, то выводится сообщение «Net kornei», в противном случае найденный корень.
f :: Float -> Float
f x = logBase(10)(x*x+1)-2/logBase(
main = search (2.5)
search x | x > 3.5 = print ("net kornei")
search x = do if abs (f x) < 0.001 then
print (x)
else
search (x+0.001)
Тесты показали стабильную работу при корректных входных данных.