Персональные инструменты
Вы здесь: Главная Домашние задания, весна 2012, 245 группа

Домашние задания, весна 2012, 245 группа

В табличке:

пусто - задача не сдавалась
-1 - задача нагло списана и будет заменена другой
0 - задача не зачтена
0.5 - задача решена не до конца, либо хочется что-то изменить
1 - задача зачтена

Работы, выделенные зеленым, зачтены полностью. Фамилии, выделенные зеленым, обозначают людей, набравших нужное для зачета число решенных задач.

 



Темы для докладов:

  1. Модульное тестирование с помощью HUnit (Андрей Золотин)
  2. Распараллелирование вычислений в Haskell
  3. Библиотека Parsec
  4. Библиотеки для работы с GUI
  5. Monad Transformers (Евгений Новожилов)
  6. Моноиды в Haskell

Условия задач:

Домашнее задание 1. 14.02.2012

Конспект пары
Лямбда-исчисление для самых маленьких
  1. Реализовать программу подсчета факториала
  2. Реализовать программу подсчета i-го числа Фибоначчи

Домашнее задание 2. 19.02.2012

Конспект пары
  1. Реализовать функцию обращения списка. Функция должна работать за линейное время (подсказка: конкатенация — это плохо )
  2. Реализовать функцию, которая формирует список из n последовательных степений двойки (n — аргумент функции)
  3. Реализовать функцию, которая вычисляет сумму цифр данного числа
  4. Реализовать функцию, которая выдает первую позицию вхождения заданного числа в список
  5. Реализовать функцию, проверяющую, является ли строка палиндромом

Домашнее задание 3. 26.02.2012

Конспект пары
  1. Записать следующую функцию в point-free стиле: func x l = map (\y -> y*x) l. В комментариях показать все промежуточные шаги преобразований.
  2. Реализовать функцию, генерирующую бесконечный список чисел Фибоначчи. Функция должна быть реализована с помощью "завязывания в узел". Возможно, будет полезной функция zipWith.
  3. Вывести первую позицию в списке, на которой сумма двух соседних элементов максимальна. Например, для [1, 5, 6, 2] функция должно вернуть значение 2.
  4. Посчитать высоту дерева.
  5. Посчитать минимальное расстояние в дереве от корня до листьев.
  6. Реализовать функцию, которая по произвольной строке проверяет корректность скобочной последовательности в этой строке.

Домашнее задание 4. 05.03.2012

Конспект пары
  1. Реализовать функцию поиска по некоторому условию в двоичном дереве. Условие передается в качестве параметра.
  2. Реализовать функцию свертки для бинарного дерева.
  3. Реализовать три варианта функции, подсчитывающей количество четных чисел в списке (с использованием стандартных функций map, filter, foldr). Использование рекурсии не допускается.
  4. Проверить, что все элемента списка различны
  5. Написать программу, которая в диалоговом режиме позволяет осуществлять следующие операции:
    0 - exit
    1 - add value to sorted list
    2 - remove value from list
    3 - print list
    Все операции должны сохранять сортированность. Начинаем с пустого списка.

Домашнее задание 5. 12.03.2012

Конспект пары
  1. Реализовать функцию, которая по заданному числу n выводит разложения его на положительные слагаемые (с точностью до порядка разложения)
  2. Проверить, что все элементы списка удовлетворяют некоторому условию (условие передается как параметр)
  3. Опишите функцию, которая для данного числа n возвращает список из всех строк длины n, состояших из чисел 1,2,3. Например, при n=2 функция должна вернуть список [[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3], ]
  4. С помощью оператора >>= опишите функцию, которая для данного числа n создает список из всех попарных произведений чисел от 1 до n. ( Т.е. что-то такое: [1*1, 1*2, 1*3, …, 1*n, 2*1, 2*2, …, n*n] - всего n*n элементов)
  5. Используя монадичесие функции, опишите фунцию, которая ищет в списке первый элемент, больший своих соседей (предыдущего и следующего)
  6. Дано выражение, содержащее переменную, константы, арифметические операции. Посчитать производную этого выражения по этой переменной, провести в полученном выражении для производной возможные упрощения (например, 1*x = x). Подходящий тип данных разработать самостоятельно

Домашнее задание 6. 26.03.2012

Конспект пары
  1. Для двоичного дерева, элементы которого – символы, реализовать две функции: одна по дереву строит его представление в виде строки, а вторая функция по этой строке восстанавливает исходное дерево. Дерево должно храниться в следующем формате: Empty кодируется буквой 'e', Node x left right кодируется так: сначала буква 'n', потом символ x, потом подряд без разделителей представления для left и right
  2. Описать тип, позволяющий хранить информацию о многочленах с одной переменной, и реализовать для него сложение, умножение и show
  3. Реализовать тип данных BinarySearchTree и соответствующие функции для работы с ним: добавление, удаление, поиск, размер (число элементов), высота
  4. Для типа Graph, разбиравшегося на паре, реализовать алгоритм Дейкстры поиска кратчайшего пути. Поиск пути должен производиться с использованием экземпляров класса типов Monad или MonadPlus

Домашнее задание 7. 16.04.2012

Конспект пары 09.04.12
Конспект пары 16.04.12
  1. Написать программу-телефонный справочник. Она должна уметь хранить имена и номера телефонов, в интерактивном режиме осуществлять следующие операции:
    0 - выйти
    1 - добавить запись (имя и телефон)
    2 - найти телефон по имени
    3 - найти имя по телефону
    4 - сохранить текущие данные в файл
    5 - считать данные из файла
    Формат представления данных в файле придумать самостоятельно. Все возникающие исключительные ситуации должны обрабатываться корректно.
  2. Реализовать функцию, которая заменяет значение в каждом узле дерева на случайное целое число
  3. Описать тип данных HashTable и реализовать основные функции для работы с ним: добавление, удаление, поиск в таблице
  4. Реализовать map и filter в виде функций в CPS-стиле

Действия с Документом