Домашние задания, контрольные работы
Табличка с результатами домашних заданий и контрольных работ, условия заданий
Домашние задания:
В табличке:- - задачу не получал или не смотрел
0 - задача не зачтена
0.5 - в целом правильно, но надо кое-что поправить
1 - задача зачтена
зелёным выделены работы, зачтённые полностью
Контрольные работы:
В табличке:- - задачу не получал
0 - задача не зачтена
1 - задача зачтена
На переписывании надо решить только незачтённые задачи, то есть, например, если решены две задачи из трёх, на переписывании надо решить одну, по теме, к которой относится незачтённая задача
Темы курсовых прошлого года
Условия задач:
1. 14.02.2012
Лямбда-исчисление для самых маленьких- Посчитать факториал
- Посчитать числа Фибоначчи
2. 20.02.2012
Презентация с пары- Реализовать функцию обращения списка
- Реализовать функцию, которая формирует список из 5 последовательных степеней двойки
- Реализовать функцию, которая вычисляет произведение цифр данного числа
- Реализовать функцию, которая выдает первую позицию вхождения заданного числа в список
- Реализовать функцию, проверяющую, является ли строка палиндромом
3. 28.02.2012
Презентация с пары- Вывести позицию в списке, на которой сумма двух соседних элементов максимальна. Например, для [1, 5, 6, 2] функция должна вернуть значение 2.
- Проверить, что все элементы списка различны
- Реализовать три варианта функции, подсчитывающей количество четных чисел в списке (с использованием стандартных функций map, filter, fold). Использование рекурсии не допускается.
- Посчитать высоту дерева
- Посчитать значение дерева разбора арифметического выражения, заданного через вложенные discriminated union-ы
- Реализовать функцию, генерирующую бесконечную последовательность простых чисел.
4. 05.03.2012
Презентация с пары- Реализовать функцию, которая по произвольной строке проверяет корректность скобочной последовательности в этой строке. Скобки бывают трёх видов.
- Записать в point-free стиле func x l = List.map (fun y -> y * x) l
- Написать программу - телефонный справочник. Она должна уметь хранить имена и номера телефонов, в интерактивном режиме осуществлять следующие операции:
0 - выйти
1 - добавить запись (имя и телефон)
2 - найти телефон по имени
3 - найти имя по телефону
4 - сохранить текущие данные в файл
5 - считать данные из файла - Дано выражение, содержащее переменную, константы, арифметические операции. Посчитать производную этого выражения по этой переменной, провести в полученном выражении для производной возможные упрощения (например, 1*x = x). Выражение можно задать через вложенные discriminated union-ы
- Реализовать функцию, применяющую функцию к каждому элементу двоичного дерева и возвращающую новое двоичное дерево, каждый элемент которого --- результат применения функции к соответствующему элементу исходного дерева (map для деревьев).
5. 12.03.2012
Презентация с пары- Переписать на F# задачу про моделирование локальной сети прошлого семестра, в возможно более F#-овом стиле. Мутабельное состояние в этой задаче использовать можно. Оригинальное условие:
Смоделировать работу локальной сети:
a) в сети есть несколько компьютеров, связанных друг с другом (каким образом - можно задавать, например, матрицей смежности);
b) на каждом компе стоит ОС (Windows, Linux, etc...);
c) в сети гуляют вирусы, так что для каждой машины есть ненулевая вероятность заразиться (вероятность зависит от типа ОС), заражаются компьютеры, непосредственно соединённые с заражёнными;
d) заражения (и проверки, заразился компьютер или нет) происходят дискретно - по ходам.
Требуется периодически выводить состояние сети. - Переписать на F# задачу о двоичном дереве поиска с итератором. Оригинальное условие:
Реализовать двоичное дерево поиска и итератор для его обхода
6. 19.03.2012
Презентация с пары- Реализовать Workflow, выполняющий математические вычисления с заданной (как аргумент Builder-а) точностью. Например,
rounding 3 { let! a = 2.0 / 12.0 let! b = 3.5 return a / b }
должно возвращать 0.048
7. 02.04.2012
Презентация с пары- Написать функцию, в 100 потоков складывающую массив из миллиона единиц, чтобы каждый поток складывал свой кусок массива, получить странные результаты. Мутабельными переменными пользоваться можно.
8. 16.04.2012
Презентация с пары- Написать функцию, принимающую адрес веб-страницы, скачивающую все веб-страницы, на которые есть ссылки с указанной, и печатающую информацию о размере каждой в формате "адрес страницы --- число символов". Ссылки нужно обрабатывать только заданные в форме <a href="http://...">. Для поиска ссылок на странице могут быть полезны регулярные выражения (класс System.Text.RegularExpressions.Regex). Качать страницы надо параллельно.
Условия контрольных:
26.03.2012
- Описать функцию, которая работает как map, только для каждого значения исходного списка можно задать не одно, а несколько значений, на которые его надо заменить. Пример вызова: supermap [1, 2, 3] (fun x -> [sin x, cos x]) должно возвращать [sin 1, cos 1, sin 2, cos 2, sin 3, cos 3].
- Посчитать минимальное расстояние в дереве от корня до листьев.
- Реализовать класс "Очередь" с методами Enqueue, Dequeue и Count. При попытке получить значение из пустой очереди должно бросаться исключение. Мутабельные переменные здесь разрешены.