Упражнение №13 за гр.2
Зад.1. Нека имаме дефиниран type Point = (Double, Double) - точки в равнината с реални координати. Да се напише функция maxDistance, която намира максималното евклидово разстояние между някои две точки от даден списък:
maxDistance [(-1.1, 1), (1.8, 2), (3, 1), (-1, -2)] -> 5 Бонус: да се напише версия на тази функция, която приема за аргумент и функция за разстояние между две точки - напр. декартово, манхатъново, шахматно и т.н.
Зад.2. Нека имаме дефиниран type Item = (String, Integer) – информация за артикул с име и оставащ срок на годност в дни. Ако срокът на годност е отрицателното число x, значи този артикул е изтекъл преди |x| дни. Да се напише функция със сигнатура expiringItems :: [Item] → (String, Integer, String), която по списък с такива данни връща наредена тройка от името на артикула с най-кратък оставащ срок на годност (без да се броят тези, чиито срок е изтекъл), броят артикули с изтекъл срок на годност и името на артикула с най-отдавна изтекъл срок на годност:
expiringItems [("Milk",3), ("Bread",1), ("Yoghurt",-3), ("Butter",5), ("Cheese",-1), ("Pasta",2)] → ("Bread", 2, "Yoghurt")
-- два негодни артикула: "Yoghurt" и "Cheese", като от тях "Yoghurt" е с по-отдавна изтекъл срок.
Зад.3. Да се напише функция maxSumPath, която приема за аргумент двоично дърво с числа във възлите и намира максималната сума на числата по някой път от корен до листо.
Зад.4. Да се напише функция prune, която по дадено двоично дърво t връща ново дърво t', което представлява t, в което всички листа са премахнати.
Зад.5. Да се напише функция bloom, която по дадено двоично дърво t връща ново дърво t', което представлява t, в което на всички листа са добавени по два наследника - нови листа. Стойността в тези нови листа да е същата, като в оригиналното листо, от което са излезли.
Зад.6. Да се дефинира тип BST, който да представлява двоично наредено дърво, съдържащо стойности от произволен тип във възлите си. Да се дефинират следните функции към него: - bstinsert :: (Eq a, Ord a) => a -> BST a -> BST a - добавяне на стойност в дървото - bstsearch :: (Eq a, Ord a) => a -> BST a -> Bool - търсене на стойност в дървото - bstvalues :: BST a -> [a] - получаване на списък със всички стойности в дървото - bstsize :: BST a -> Integer - брой стойности, съдържани в дървото
Зад.7. Да се дефинира тип Map, който да представлява структурата от данни map, реализирана с двоично наредено дърво. Да се дефинират следните функции към нея: - mapinsert :: (Eq k, Ord k) => k -> v -> Map k v -> Map k v - вмъкване на ключ със стойност в дървото. Ако стойност за този ключ съществува, нека тя да бъде заместена с новата. - mapsearch :: (Eq k, Ord k) => k -> Map k v -> Maybe v -- (!) търсене на стойност по ключ в дървото (обърнете внимание на върнатия тип)
Last modified: Tuesday, 10 January 2017, 10:11 AM