> For the complete documentation index, see [llms.txt](https://skkv-itmo.gitbook.io/ct-c-cpp-course/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skkv-itmo.gitbook.io/ct-c-cpp-course/course-format/grading-system-lab.md).

# Лабораторные работы

### Общая информация <a href="#general" id="general"></a>

Лабораторные работы представляют собой полноценные задачи, требующие разработки решения с нуля. Код размещается в **приватных репозиториях** дисциплины, где также доступны автотесты.

#### Основные требования <a href="#reqs" id="reqs"></a>

* ❌ Запрещено использование сторонних библиотек (если явно не разрешено в условии)
* ✅ Все решения разрабатываются самостоятельно
* ✅ Прохождение не менее 25% тестов для получения допуска к code review (если все тесты открытые)
* ✅ Получение Approve как результата Code Review
* ✅ Обязательная защита работы для получения баллов

### Формула расчёта баллов <a href="#formulae" id="formulae"></a>

$$
score\_{lab\_{i}} = max\_score\_{lab\_{i}} \cdot d\_{lab\_{i}} \cdot \left( w\_quality\_{lab\_{i}} \cdot score\_quality\_{lab\_{i}} + w\_tests\_{lab\_{i}} \cdot score\_tests\_{lab\_{i}} \right)
$$

где:

| Параметр             | Описание                          |
| -------------------- | --------------------------------- |
| $$max\_{score}$$     | Максимальный балл за работу       |
| $$d$$                | Коэффициент дедлайна              |
| $$w\_{quality}$$     | Вес критерия "Качество кода"      |
| $$w\_{tests}$$       | Вес критерия "Тесты"              |
| $$score\_{quality}$$ | Оценка качества кода \[0, 1]      |
| $$score\_{tests}$$   | Оценка прохождения тестов \[0, 1] |

### Критерии оценки <a href="#criterion" id="criterion"></a>

* На защите учитываются **только решения, отправленные вовремя** и имеющие Approve как вердикт по обратной связи
* Дедлайн определяется по **последнему коммиту, подтверждённому автотестами и вердиктом обратной связи**
* ❌ **Нулевое качество кода** → **0 баллов** (независимо от тестов)
* ❌ **Не пройдены тесты на GitHub** → работа **не проверяется и не защищается**

#### Рекомендации <a href="#recs" id="recs"></a>

* Начинайте работу заранее
* Тестируйте решение через автотесты осознано, а не в режиме "1 фикс" = "1 запуск тестов"
* Используйте возможность локального тестирования для уменьшения запросов на сервер

***

## Алгоритм получения баллов по лабораторным <a href="#steps-lw" id="steps-lw"></a>

![](https://2451480259-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOevmjq55LC8hRK21xs8d%2Fuploads%2Fgit-blob-80d7bc8fcc3954b29e526374818b8d724c2ad2b5%2Flab_flow.png?alt=media)

{% stepper %}
{% step %}
**Прочитать условие**

Внимательно изучить условие. Они могут не раскрывать напрямую всех деталей реализации, и осознание происходящего потребует от вас времени.
{% endstep %}

{% step %}
**Выполнить работу**

Выполняйте добросовестно и самостоятельно.

Вы можете обратиться за помощью на практиках или в чате курса при возникновении вопросов или проблем.

Не бойтесь подходить и задавать вопросы `:)`
{% endstep %}

{% step %}
**Загрузить код**

Работа с репозиторием – [https://github.com/RonoveRaum/c-cpp-courses-mirror/tree/ct-course/course-format/grading-system-lab/repo.md](https://github.com/RonoveRaum/c-cpp-courses-mirror/tree/ct-course/course-format/grading-system-lab/repo.md "mention")

Убедитесь, что сделали это вовремя.

Крайне не рекомендуется делать это в последнюю минуту, т.к. просрочка даже на 1 минуту приведёт к снижению коэф. дедлайна.
{% endstep %}

{% step %}
**Запустить автотесты**

Инструкция по лабораторным работам – [Автотесты на GitHub](/ct-c-cpp-course/course-format-processes/autotests-github.md) и [Автотесты локально](/ct-c-cpp-course/course-format-processes/autotests-local.md)
{% endstep %}

{% step %}
**Отправить на Code review**

Дождитесь результата проверки вашего кода. После исправьте указанные замечания. По возможности рекомендуется дважды отправить работу, если после первой проверки были обнаружены замечания и ошибки.

Это улучшит качество вашего кода → баллы по работе. А также позволит получить опыт работы с review.

Допуск к защите – получение "✅ Approve" как результата review и прохождение не менее 25% тестов.
{% endstep %}

{% step %}
**\[Optonal] Повторная отправка на проверку**

Работы могут быть отправлены на проверку **до 3 раз** во время семестра.

На повторную отправку имеет смысл отправлять, если имеются комментарии в PR по code review.
{% endstep %}

{% step %}
**Защитить работу**

Защиты проходят на практиках согласно расписанию.

На защите будут как теоретические вопросы, так и вопросы по реализации. В рамках защиты от студента может потребоваться решить при принимающем задачу или модифицировать свой код, а также проанализировать ситуацию, если какая-то часть кода будет изменена.
{% endstep %}

{% step %}
**\[Optonal] Перезащита**

В случае неуспешной защиты имеется возможность перезащитить работу. Перезащит по каждой работе = 1.

Штрафов за перезащиту нет, но результаты предыдущей защиты аннулируются. При наличии возможности перезащита происходит у другого принимающего.
{% endstep %}
{% endstepper %}
