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

144 группа

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

Студент TODO №1 №2 №3 №4 №5 №6 №7 №9 Тест 1 №10 №11 Тест 2
164 1 2 3 4 5 1 2 3 1 2 1 2 1 1 2 1 2 1 1 1 1 Доклады 1
Бабич Никита 2
Белошапкин Михаил 8
Говорова Диана 11
Карташев Матвей 23
Куликов Михаил 1
Литвинов Степан 23
Минкашев Талгат 3
Мосягин Олег 5
Паустовская Александра 22
Плоскин Александр 2
Пугачёва Анна 18
Романов Алексей 21
Салтыков Павел 10
Усманов Артур 10
Шумаков Антон 3
Эйрих Михаэль 2

Задачи

Тест 2. 22.05.20
  1. Реализовать кодирование алгоритмом Move-To-Front строк английского алфавита. На вход программе подаётся строка, на выход — закодированная MTF последовательность чисел. Например, по строке banana должна выдаваться кодовая последовательность [1,1,13,1,1,1]. Обязательны комментарии, CI и юнит-тесты.

Домашняя работа 11. 15.05.20
Тестирование пользовательского интерфейса, Coded UI и White
Сравнение платформ .NET Core, .NET Framework, Mono
Fuzzing C#
Unity
  1. Необязательная задача, которой можно закрыть любую домашнюю работу из предыдущих:
    Сделать с помощью Unity очередной клон компьютерной игры SCP-087 (https://ru.wikipedia.org/wiki/SCP-087). Игра в жанре сурвайвал-хоррор должна представлять собой спуск с фонариком по тёмной бесконечной лестнице, при этом с вероятностью N% (где N передаётся как параметр командной строки) на очередной лестничной клетке появляется ужасное нечто и убивает главного героя, на чём игра заканчивается, показав сообщение, что игрок проиграл. Моделировать главного героя не требуется, "летающей камеры" достаточно, в качестве ужасного нечто можно использовать любую достаточно ужасную 3д-модель (шар, куб или чайник вполне подойдут). Желательно (хотя и не обязательно) звуковое сопровождение, создающее гнятущую атмосферу экзистенциального ужаса, и соответствующие текстуры на стенах. См. также http://scpfoundation.net/scp-087.

  2. Доклады

    Сюда надо загрузить презентацию

Домашняя работа 10. 24.04.20
Визуальное моделирование, UML (слайды)
Визуальное моделирование, UML (текст)
  1. Нарисовать на UML диаграмму классов для игры "реверси", с несколькими видами "ботов", которые могли бы играть вместо человека. Диаграмма должна быть довольно подробным проектом системы. Реализовывать этот проект не нужно. Желательно пользоваться средствами визуального моделирования наподобие Visual Paradigm (https://www.visual-paradigm.com/download/community.jsp), присылать скриншоты с диаграммой и исходники (файлы .vpp в случае Visual Paradigm)

Тест 1. 17.04.20
  1. Реализовать программу с пользовательским интерфейсом: на форме есть кнопка и индикатор прогресса, при нажатии на кнопку индикатор прогресса должен начать заполняться (сам увеличивая своё значение через равные промежутки времени), после того, как он достигнет 100%, должна появиться кнопка, позволяющая закрыть форму.

Домашняя работа 9. 10.04.20
Контейнеры и генерики (слайды)
Контейнеры и генерики (текст)
Ссылка на митинг в Zoom (начало в 15:25)
  1. Создать генерик-класс, реализующий АТД "Множество". Множество должно реализовывать интерфейс System.Collections.Generic.ISet. Ожидается асимптотическая трудоёмкость основных операций не хуже в среднем логарифмической (то есть несбалансированное двоичное дерево тоже пойдёт). Проверить в тестах, что по множеству можно ходить foreach.

Домашняя работа 8. 03.04.20
Правила написания хорошего кода (слайды)
Ссылка на митинг в Zoom (начало в 15:25)
Правила написания хорошего кода (текст)
Домашняя работа 7. 27.03.20
Пользовательский интерфейс (слайды)
Пользовательский интерфейс (текст)
Ссылка на митинг в Zoom (начало в 15:25)
  1. Написать калькулятор с пользовательским интерфейсом (по примеру стандартного виндового калькулятора)

  2. Сделать часы (приложение, показывающее текущее системное время) со стрелками (часовой, минутной и секундной). Здесь юнит-тесты можно не писать.

Домашняя работа 6. 20.03.20
Событийно-ориентированное программирование (слайды)
Событийно-ориентированное программирование (текст)
  1. Реализовать функции Map, Filter и Fold:

    • Map принимает список и функцию, преобразующую элемент списка. Возвращаться должен список, полученный применением переданной функции к каждому элементу переданного списка. Например, Map(new List<int>() {1, 2, 3}, x => x * 2) должен возвращать список [2; 4; 6].
    • Filter принимает список и функцию, возвращающую булевое значение по элементу списка. Возвращаться должен список, составленный из тех элементов переданного списка, для которых переданная функция вернула true.
    • Fold принимает список, начальное значение и функцию, которая берёт текущее накопленное значение и текущий элемент списка, и возвращает следующее накопленное значение. Сама Fold возвращает накопленное значение, получившееся после всего прохода списка. Например, Fold(new List<int>() {1, 2, 3}, 1, (acc, elem) => acc * elem) работала бы так: сначала в acc клался бы 1, потом умножался бы на 1, потом результат (1) умножался бы на 2, потом результат (2) умножался бы на 3, потом результат (6) возвращался бы в качестве ответа.

    Если умеете генерики, подумайте, как сделать тип функций наиболее общим.

  2. На базе класса, генерирующего события по нажатию на клавиши управления курсором (EventLoop с пары), реализовать консольное приложение, позволяющее управлять персонажем, перемещающимся по карте. Карта состоит из свободного пространства и стен, и должна грузиться из файла. Приложение должно отображать карту и персонажа (символом @) в окне консоли, и позволять персонажу перемещаться по карте, реагируя на клавиши управления курсором. Будут полезны свойства Console.CursorLeft и Console.CursorTop.

Домашняя работа 5. 13.03.20
Экосистема open source проектов (слайды)
Экосистема open source проектов (текст)
  1. Настроить сборку на AppVeyor одной из предыдущих домашек. В качестве решения приложить ссылку на успешно собранный пуллреквест с appveyor.yml.

Домашняя работа 4. 06.03.20
Исключения и обработка ошибок (слайды)
Исключения и обработка ошибок (текст)
  1. Решить задачу о вычислении выражения по дереву разбора из прошлого семестра. Реализовать иерархию классов, описывающих дерево разбора, используя их, реализовать класс, вычисляющий значение выражения по дереву. Классы, представляющие операнды и операторы, должны сами уметь себя вычислять и печатать.

    Исходное условие:

    По дереву разбора арифметического выражения вычислить его значение. Дерево разбора хранится в файле в виде (<операция> <операнд1> <операнд2>), где <операнд1> и <операнд2> сами могут быть деревьями, либо числами. Например, выражение (1 + 1) * 2 представляется в виде (* (+ 1 1) 2). Должны поддерживаться операции +, -, *, / и целые числа в качестве аргументов. Требуется построить дерево в явном виде, распечатать его (не обязательно так же, как в файле), и посчитать значение выражения обходом дерева. Может быть полезна функция ungetc (если не '(', возвращаем символ в поток и читаем число fscanf-ом). Можно считать, что входной файл корректен. Пример - по входному файлу (* (+ 1 1) 2) может печататься ( * ( + 1 1 ) 2 ) и выводиться 4.

  2. Унаследовавшись от класса список, реализовать класс UniqueList, который не содержит повторяющихся значений. Реализовать классы исключений, которые генерируются при попытке добавления в такой список уже существующего или при попытке удаления несуществующего элемента.

Домашняя работа 3. 28.02.20
Модульное тестирование (слайды)
Модульное тестирование (текст)
Статья про XML Documentation
Пример проекта с юнит-тестами
Про то, как надо именовать тесты
  1. Написать юнит-тесты к задаче 3 из предыдущего задания

  2. Модифицировать хеш-таблицу из задачи 2 предыдущей работы так, чтобы хеш-функцию можно было менять в зависимости от выбора пользователя, причём хеш-функцию должно быть можно передавать из использующего хеш-таблицу кода в виде объекта некоторого класса, реализующего некоторый интерфейс. Хеш-функцию должно быть можно менять во время работы. Юнит-тесты и коментарии в формате XML Documentation обязательны.

Домашняя работа 2. 21.02.20
Объектно-ориентированное программирование (слайды)
Объектно-ориентированное программирование (текст)
  1. Написать связный список в виде класса. От списка хочется:
    - Добавлять/удалять элемент по произвольной позиции, задаваемой целым числом
    - Узнавать размер, проверять на пустоту
    - Получать или устанавливать значение элемента по позиции, задаваемой целым числом

  2. Написать хеш-таблицу в виде класса с использованием класса-списка из первой задачи. Должно быть можно добавлять значение в хеш-таблицу, удалять и проверять на принадлежность

  3. Реализовать стековый калькулятор (класс, реализующий выполнение операций +, -, *, / над арифметическим выражением в виде строки в постфиксной записи). Строка уже дана в обратной польской записи (например, 1 2 3 + *). Стек реализовать двумя способами (например, массивом или списком) в двух разных классах на основе одного интерфейса. Стековый калькулятор должен знать только про интерфейс стека. В Main надо спросить у пользователя, какой из вариантов стека он хочет, в зависимости от выбора создаётся объект одной из двух реализаций и передаётся калькулятору.

Домашняя работа 1. 14.02.20
Введение, C# (слайды)
Введение, C# (текст)
  1. Посчитать факториал

  2. Посчитать числа Фибоначчи

  3. Отсортировать массив какой-либо из сортировок

  4. Дан массив размерностью N x N, N - нечетное число. Вывести элементы массива при обходе его по спирали, начиная с центра

  5. Отсортировать столбцы матрицы по первым элементам

© 2014-2020 HwProj