Personal tools
You are here: Home Members ylitvinov's Home 14-44 Домашние задания, контрольные работы, весна 2016, 244 группа

Домашние задания, контрольные работы, весна 2016, 244 группа

Табличка с результатами домашних заданий и контрольных работ, условия заданий

Домашние задания:

В табличке:
- - задачу не получал или не смотрел
0 - задача не зачтена
0.5 - в целом правильно, но надо кое-что поправить
1 - задача зачтена
зелёным выделены работы, зачтённые полностью


Контрольные работы:

В табличке:
- - задачу не получал
0 - задача не зачтена
1 - задача зачтена
зелёным выделены задачи, которые не надо переписывать




Курсовые работы предыдущего года

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

Презентация с первой пары, введение
Презентация со второй пары, ликбез по F#
Домашняя страница F#
Обучалка по F# с онлайн-интерпретатором
Хороший блог про F#

1. 19.02.2016

  1. Посчитать факториал
  2. Посчитать числа Фибоначчи
  3. Реализовать функцию обращения списка
  4. Реализовать функцию, которая формирует список из 5 последовательных степеней двойки

2. 26.02.2016

Презентация с пары
Лямбда-исчисление для самых маленьких
  1. Реализовать функцию, которая вычисляет произведение цифр данного числа
  2. Реализовать функцию, которая выдает первую позицию вхождения заданного числа в список
  3. Реализовать функцию, проверяющую, является ли строка палиндромом
  4. Проверить, что все элемента списка различны
  5. Привести к нормальной форме λ-терм ((λa.(λb.b b) (λb.b b)) b) ((λc.(c b)) (λa.a)). Решение (в виде последовательности преобразований) набрать в TeX-е и выложить файл .tex на GitHub. Может помочь www.papeeria.com.

3. 04.03.2016

Презентация с пары
  1. Вывести позицию в списке, на которой сумма текущего и следующего элементов максимальна. Например, для [1, 5, 6, 2] функция должна вернуть значение 2. Использование List.zip приветствуется.
  2. Реализовать три варианта функции, подсчитывающей количество четных чисел в списке (с использованием стандартных функций map, filter, fold). Использование рекурсии не допускается.
  3. Посчитать высоту дерева
  4. Посчитать значение дерева разбора арифметического выражения, заданного через вложенные discriminated union-ы
  5. Реализовать функцию, генерирующую бесконечную последовательность простых чисел

4. 11.03.2016

Презентация с пары
Хорошая статья про то, что такое типы (на английском)
Статья про то, почему Value restriction (тоже на английском)
  1. Реализовать функцию, которая по произвольной строке проверяет корректность скобочной последовательности в этой строке. Скобки бывают трёх видов.
  2. Записать в point-free стиле func x l = List.map (fun y -> y * x) l. Написать не только ответ, но и преобразования, которыми он был получен.
  3. Написать программу - телефонный справочник. Она должна уметь хранить имена и номера телефонов, в интерактивном режиме осуществлять следующие операции:
    0 - выйти
    1 - добавить запись (имя и телефон)
    2 - найти телефон по имени
    3 - найти имя по телефону
    4 - сохранить текущие данные в файл
    5 - считать данные из файла
  4. Дано выражение, содержащее переменную, константы, арифметические операции. Посчитать производную этого выражения по этой переменной, провести в полученном выражении для производной возможные упрощения (например, 1*x = x). Выражение можно задать через вложенные discriminated union-ы
  5. Реализовать функцию, применяющую функцию к каждому элементу двоичного дерева и возвращающую новое двоичное дерево, каждый элемент которого --- результат применения функции к соответствующему элементу исходного дерева (map для деревьев).

5. 18.03.2016

Презентация с пары
  1. Переписать на F# задачу про моделирование локальной сети прошлого семестра, в возможно более F#-овом стиле. Мутабельное состояние в этой задаче использовать можно. Оригинальное условие:
    Смоделировать работу локальной сети:
    a) в сети есть несколько компьютеров, связанных друг с другом (каким образом - можно задавать, например, матрицей смежности);
    b) на каждом компе стоит ОС (Windows, Linux, etc...);
    c) в сети гуляют вирусы, так что для каждой машины есть ненулевая вероятность заразиться (вероятность зависит от типа ОС), заражаются компьютеры, непосредственно соединённые с заражёнными;
    d) заражения (и проверки, заразился компьютер или нет) происходят дискретно - по ходам.
    Требуется периодически выводить состояние сети.
  2. Переписать на F# задачу о двоичном дереве поиска с итератором. Оригинальное условие:
    Реализовать двоичное дерево поиска и итератор для его обхода

6. 25.03.2016

Презентация с пары
Презентация про паттерны программирования на F#, в том числе и монады
  1. Реализовать Workflow, выполняющий математические вычисления с заданной (как аргумент Builder-а) точностью. Например,
        rounding 3 {
            let! a = 2.0 / 12.0
            let! b = 3.5
            return a / b
        }
    
    должно возвращать 0.048
  2. Реализовать Workflow, позволяющий вычислять арифметические выражения с числами, заданными в виде строк. Например,
    let result = strexpr {
            let! x = "1"
            let! y = "2"
            let z = x + y
            return z
        }
    
    должно возвращать Some 3, а
    let result = strexpr {
            let! x = "1"
            let! y = "Ъ"
            let z = x + y
            return z
        }
    
    должно возвращать None. В этой задаче законами монад, возможно, придётся пожертвовать. Необязательный дополнительный вопрос: как надо модифицировать условие, чтобы Workflow имел возможность удовлетворять первому закону монад, оставаясь таким же по смыслу?

7. 08.04.2016

Презентация с пары
  1. Написать функцию, принимающую адрес веб-страницы, скачивающую все веб-страницы, на которые есть ссылки с указанной, и печатающую информацию о размере каждой в формате "адрес страницы --- число символов". Ссылки нужно обрабатывать только заданные в форме <a href="http://...">. Для поиска ссылок на странице могут быть полезны регулярные выражения (класс System.Text.RegularExpressions.Regex). Качать страницы надо параллельно.

Доклады

  1. Юнит-тестирование в F# (NUnit, FsUnit, FsCheck) --- Сергей Свитков
    презентация
  2. Единицы измерения в F# --- Валерий Карнаухов
    презентация
  3. Ленивые вычисления в F# (lazy, seq) --- Андрей Кудрявцев
    презентация
  4. Active patterns --- Илья Лялинов
    презентация
  5. Code Quotations
  6. WebSharper

8. 06.05.2016

Презентация с пары
  1. Написать функцию, в 100 потоков складывающую массив из миллиона единиц, чтобы каждый поток складывал свой кусок массива, получить странные результаты. Мутабельными переменными и ref-ами пользоваться можно.
Document Actions