Программирование

244 группа

Юрий Литвинов

Студент TODO №1 №2 №3 №4 №5 №6 №7 Тест 1
341 1 2 3 4 1 2 3 1 2 3 4 1 2 3 1 2 3 1 1 2 1 2 3
Zhilkin Fedor 16
Алексей Гирин 16
Андреев Сергей 19
Асеева Серафима 16
Афанасов Артем 17
Балашов Илья 12
Гуданова Варвара 16
Ивашева Валерия 13
Камкова Екатерина 17
Короткий Иван 22
Коёкин Ярослав 16
Мартынович Максим 23
Мендалиев Роман 13
Мишуров Илья 22
Панфилёнок Дмитрий 16
Пиккио Полина 23
Пономарёв Егор 17
Попок Артем 16
Смирнов Александр 16
Холодаева Екатерина 15

Задачи

Тест 1. 12.04.19
  1. Найти сумму всех чётных чисел Фибоначчи, не превосходящих миллиона. Конструкции императивного программирования использовать нельзя.

  2. Описать функцию, которая для данного числа n печатает квадрат из * со стороной n. Например, для n = 4 надо напечатать:

    ****
    *  *
    *  *
    ****
    

    Конструкции императивного программирования использовать нельзя.

  3. Реализовать класс "Очередь". При попытке получить значение из пустой очереди должно бросаться исключение. Конструкции императивного программирования использовать можно.

Домашняя работа 7. 05.04.19
Вычислительные выражения в 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 = calculate {
            let! x = "1"
            let! y = "2"
            let z = x + y
            return z
        }
    

    должно возвращать значение, содержащее 3, а

    let res = calculate {
            let! x = "1"
            let! y = "Ъ"
            let z = x + y
            return z
        }
    

    должно возвращать значение, указывающее на отсутствие результата.

Домашняя работа 6. 29.03.19
Объектно-ориентированное программирование в F# (слайды)
  1. В объектно-ориентированном стиле смоделировать работу локальной сети:

    • в сети есть несколько компьютеров, связанных друг с другом (каким образом - можно задавать, например, матрицей смежности);
    • на каждом компе стоит ОС (Windows, Linux, etc...);
    • в сети гуляют вирусы, так что для каждой машины есть ненулевая вероятность заразиться (вероятность зависит от типа ОС), заражаются компьютеры, непосредственно соединённые с заражёнными;
    • заражения (и проверки, заразился компьютер или нет) происходят дискретно - по ходам.

    Требуется периодически выводить состояние сети.

    Необходимы также юнит-тесты, проверяющие корректность работы алгоритма заражения: если вероятность заражения всегда 1, вирус должен вести себя как обход в ширину, если вероятность 0 --- никто не должен заражаться. Могут быть полезны mock-объекты.

Домашняя работа 5. 22.03.19
Генерики в F# (слайды)
  1. Реализовать функцию, которая по произвольной строке проверяет корректность скобочной последовательности в этой строке. Скобки бывают трёх видов.

  2. Записать в point-free стиле func x l = List.map (fun y -> y * x) l. Выписать шаги вывода и проверить с помощью FsCheck корректность результата

  3. Написать программу - телефонный справочник. Она должна уметь хранить имена и номера телефонов, в интерактивном режиме осуществлять следующие операции:
    1. выйти
    2. добавить запись (имя и телефон)
    3. найти телефон по имени
    4. найти имя по телефону
    5. вывести всё текущее содержимое базы
    6. сохранить текущие данные в файл
    7. считать данные из файла

Домашняя работа 4. 15.03.19
Нетипизированное λ-исчисление (слайды)
  1. Выполнить бета-редукцию λ-терма ((λa.(λb.b b) (λb.b b)) b) ((λc.(c b)) (λa.a)). Решение (в виде последовательности преобразований) набрать в TeX-е и выложить файл .tex на GitHub. Может помочь www.papeeria.com

  2. Докажите, что S K K = I. Доказательство набрать в TeX-е и выложить на GitHub. Делать надо самостоятельно, это известное (и несложное) упражнение, так что гуглить нечестно.

  3. Реализовать интерпретатор лямбда-выражений, выполняющий бета-редукцию по нормальной стратегии. Лямбда-выражения задаются через размеченные объединения. Должна поддерживаться альфа-конверсия для избежания захвата свободных переменных.

Домашняя работа 3. 01.03.19
Продолжение про F# (слайды)
Продолжение про F# (конспект)
Пример репозитория со сборкой на AppVeyor и Travis
  1. Реализовать три варианта функции, подсчитывающей количество четных чисел в списке (с использованием стандартных функций map, filter, fold). Использование рекурсии не допускается.

  2. Реализовать функцию, применяющую функцию к каждому элементу двоичного дерева и возвращающую новое двоичное дерево, каждый элемент которого --- результат применения функции к соответствующему элементу исходного дерева (map для деревьев)

  3. Посчитать значение дерева разбора арифметического выражения, заданного через вложенные discriminated union-ы

  4. Реализовать функцию, генерирующую бесконечную последовательность простых чисел

    Ко всем задачам обязательны комментарии и юнит-тесты

Домашняя работа 2. 22.02.19
Введение в F# (слайды)
Введение в F# (конспект)
  1. Реализовать функцию, которая выдает первую позицию вхождения заданного числа в список

  2. Реализовать функцию, проверяющую, является ли строка палиндромом

  3. Написать mergesort: функцию, которая принимает список и возвращает отсортированный список

    Юнит-тесты ко всем задачам обязательны и должны быть в отдельном проекте. Сборка в CI тоже обязательна.

Домашняя работа 1. 15.02.19
Введение (слайды)
Введение (конспект)
Хороший блог про F#
Домашняя страница F#
Онлайн-интерпретатор, умеющий F#
  1. Посчитать факториал

  2. Посчитать числа Фибоначчи (за линейное время)

  3. Реализовать функцию обращения списка (за линейное время)

  4. Реализовать функцию, которая принимает на вход n и m и возвращает список из элементов [2n; 2n + 1; ...; 2n + m]

© 2014-2019 HwProj