Практические задания
Практическое задание выполняется индивидуально или в команде из двух человек.
Вариант задания и состав команды должны быть предварительно согласованы с преподавателем. Факт согласования отражается в таблице. Несогласованные практические задания не принимаются!
В случае командной работы задание разделяется на две части:
- базовая часть, которая совместно выполняется всеми участниками команды.
- индивидуальная часть, которая представляет собой расширение функционала базовой части и выполняется самостоятельно каждым участником команды.
Во время выполнения задания настоятельно рекомендуется следовать методическим указаниям.
По результатам работы должен быть составлен письменный отчёт, состоящий из следующих частей:
- Постановка задачи, основной функционал приложения.
- Модули, на который разделён проект, их взаимосвязь. Для каждого модуля должно быть указано:
- предназначение модуля (например, работа с графикой, искусственный интеллект для игры и т.д.);
- основные типы данных и функции, реализованные в модуле.
- Используемые библиотеки.
- Сценарии работы с приложением и примеры использования.
Попробуйте использовать LaTeX. Это даст вам отличную возможность освоить ещё один полезный навык, который скоро вам пригодится для написания курсовых и выпускных работ.
🚩🚩🚩 Фатальные недостатки
Ниже приведён список фатальных недостатков программы, при нахождении которых программа не может быть принята до их устранения (как бы хорошо она ни работала):
- наличие предупреждений при компиляции (обнаружить их можно, используя флаги
-Wallи-Werror); - использование транслита и/или русского языка в идентификаторах и/или комментариях;
- отсутствие проверки корректности входных данных (конфигурационные файлы, ввод из
stdin, аргументы командной строки и т.д.) - программа должна не аварийно "падать", а выводить человеко-читаемое сообщение об ошибке; - строчки кода длиной больше 100 символов;
- использование магических констант (исключением могут быть только константы, используемые для отрисовки: размеры объектов, RGB-значения для цвета и т.д.);
- использование функций
undefinedиunsafePerformIO.
Сроки сдачи
Базовая часть:
- 24 февраля: выбор варианта и постановка задачи;
- 10-17 марта: основные типы и функции (только сигнатуры);
- 24 марта: реализация основных функций;
- 7 апреля: рабочее приложение;
- 14 апреля: отчёт (только для тех, кто выполнял задание индивидуально).
Индивидуальная часть (только для тех, кто выполнял задание в команде):
- 14 апреля: основные типы и функции;
- 21 апреля: рабочее приложение;
- 28 апреля: отчёт (должно входить описание как базовой, так и индивидуальных частей).
Варианты заданий
Можно выбрать один из предложенных вариантов или придумать интересную для себя задачу!
Две различные команды не могут выбрать один вариант практического задания. Два участника одной команды не могут выбрать одну индивидуальную часть одного задания.
Если несколько студентов собираются индивидуально (не в команде) писать один вариант, то это возможно только при следующих ограничениях:
- один вариант могут писать не более чем n+1 человек, где n — количество индивидуальных частей в варианте;
- студент, который раньше всех занял вариант, пишет только базовую часть;
- остальные студенты должны выполнить также одну из индивидуальных частей, но у всех они должны быть разные;
- постановка индивидуальной задачи должна быть дополнительно согласована.
Возможные варианты заданий:
- Интерпретаторы
- Моделирование
- Игры
- Головоломки
- Kanban-доска
Если вы собираетесь выполнить другое задание по своему выбору, необходимо составить краткое описание базовой и дополнительных частей и зафиксировать эту информацию (письмо преподавателю, файл README в проекте).
Шаблон проекта
Ознакомиться с шаблоном проекта можно в репозитории cmc-haskell-2022/project-template.
Важными частями проекта являются:
- директория
src/, содержащая исходный код общей, библиотечной части; здесь вы будете писать всю логику проекта, а также реализовывать индивидуальные части; - директория
app/с исходным кодом исполняемого модуля; - директория
test/c автоматическими тестами для вашего проекта; - файл
stack.yamlс указанием версии компилятора и зависимостей; - файл
package.yamlс описанием проекта, его зависимостей и опций компилятора; - файл
README.mdс базовым описанием проекта и указаниями по сборке и запуску.
Остальные файлы — это дополнительные полезные настройки:
- файл
.gitignore, указывающий Git не обращать внимания на временные файлы; - файл
.ghciдля более чистого вывода интерпретатора GHCi.
Работа с GitLab
Выполнение практического задания, особенно в команде, — отличная возможность научиться пользоваться системой контроля версий Git. Для хранения проектов рекомендуется использовать GitLab, тогда для вашего задания будет создан репозиторий в группе cmc-haskell-2022. Чтобы получить доступ, зарегистрируйтесь и сообщите имя своего аккаунта.
Репозитории всех проектов будут доступны всем участникам группы. Вы можете посмотреть, как идёт разработка ваших однокурсников, установить их проект на свой компьютер, запустить примеры и поиграть с приложением. Кроме того, вы можете посмотреть исходный код и обнаружить идеи для реализации своего практического задания. Или вы можете найти ошибки в чужом проекте и сообщить о них. Таким образом, открытый, публично доступный проект имеет больше шансов быть проверенным (в том числе преподавателем) и своевременно получить отзывы и замечания.
Перед сдачей очередной стадии проекта не забудьте отправить исходный код в репозиторий. Это сделает процесс сдачи быстрее и эффективнее.