Skip to content

Студенческий репозиторий курса C++ Школы разработчика компании Прософт-Системы

Notifications You must be signed in to change notification settings

psds-cpp/psds-cpp-2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Курс С++

Это репозиторий курса по C++, который читается в Школе разработчика компании Прософт-Системы.

Настройка окружения

Инструкции по настройке окружения представлены в SETUP.md.

Структура проекта:

psds_cpp_2025/
├── 01_week/            # Папка рабочей недели
│   ├── tasks/          # Задачи для решения
│   ├── examples/       # Примеры кода лекции
│   ├── 01_<name>.md    # Конспект лекции в формате Markdown
│   ├── 01_<name>.pdf   # Конспект лекции в формате PDF
│   └── CMakeLists.txt  # Файл сборки CMake для текущей недели
...
├── cmake/              # Файлы конфигурации CMake
├── .gitignore          # Игнорирование файлов в Git
├── CMakeLists.txt      # Главный файл сборки CMake
└── main.cpp            # Для экспериментов

Структура задачи

Каждую неделю в репозитории появляются задачи. Задача помещается в отдельную папку внутри папки ##_week/tasks/.

Как правило, папка с задачей содержит минимальный набор файлов:

  • README.md - файл с описанием задачи и требованиям к выполнению.
  • CMakeLists.txt - файл для сборки непосредственно данной задачи.
  • <task_name>.cpp - файл требующий реализации данного задания.
  • test.cpp - файл тестов для задачи.

Разрешено изменять только файлы реализации *.cpp. В задачах, где можно создавать несколько файлов с расширениями .h и .cpp самостоятельно, будет отмечена такая возможность в условиях.

Также в удаленный репозиторий следует отправлять только изменения файла реализации. Остальные изменения будут игнорироваться.

При отправке задачи она тестируется, при этом в случае успеха задача засчитывается.

Файл тестов test.cpp может включать не все тесты. Тесты на сервере могут быть расширены.

При сборке задачи будут установлены флаги компиляции:

  g++ ./task.cpp -O3 -std=c++20 -fsanitize=address,undefined -Wall -Werror -Wextra
  • следовательно, целесообразно проверять своё решение с данными флагами.

Система оценивания

Каждая задача имеет заданную ценность в баллах. За правильное выполнение задачи в срок до дедлайна начисляется 100 %. За выполнение после дедлайна до окончания курса начисляется 30 % баллов. Дедлайн, если не оговорено иное, устанавливается в пятницу 23:59 по МСК следующей недели после старта задачи.

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

При обнаружении списывания, баллы обнуляются у всех участников списывания.

Для выживания в Школе разработчика необходимо к окончанию последнего дедлайна набрать 60 % от максимального балла.

Сборка

Ниже приведена инструкция для сборки из терминала. Современные IDE также работают с CMake и при установке плагинов могут автоматически собрать проект и все тесты будут доступны. Для простоты можете использовать бесплатную IDE VS Code. Но поскольку у всех IDE разные, то при возникновении проблем: думайте сами, решайте сами. Но, конечно, не возбраняется спросить преподавателей или сокурсников в чате.

Сборка осуществляется с помощью CMake. Для этого в корне репозитория присутствует файл CMakeLists.txt содержащий соответствующие инструкции и, включающий вложенные файлы CMakeLists.txt в подпапках проекта.

По умолчанию опция сборки примеров (*/examples/<name>.cpp) отключена, что позволяет не загромождать рабочее пространство IDE и сосредоточится на задачах.

Сборка проекта представляет собой сборку тестов для задач. Все задачи включены в один проект. Для сборки проекта в папке build/ из корня репозитория осуществляются следующие команды:

  1. Настроить проект в папке build/ и подготовить файлы для сборки:
  cmake -B build
  • в логах команды следует убедиться, что всё прошло хорошо и используется нужная версия компилятора
  1. Собрать проект используя файлы из папки build/:
  cmake --build build
  • ввиду отсутствия реализации решений, при сборке проекта целиком, могут возникать ошибки. Поэтому часто будет удобно собрать только одну решенную задачу. При этом при сборке необходимо указать конкретный исполняемый файл.

Запуск тестов

Для сборки отдельной задачи и запуска тестов необходимо выполнить следующую команду:

  cmake --build build --target test_<task_name>
  ./build/tasks/test_<task_name>
  • <task_name> - имя задачи, которую требуется собрать.

Ручной запуск теста

При необходимости можно экспериментировать с флагами компиляции. Чтобы запустить тест вручную, можно выполнить следующую команду из корня репозитория:

    g++ ./01_week/tasks/addition/test.cpp -lgtest -lgtest_main && ./a.out
  • при этом библиотека GoogleTest уже должна быть собрана.
  • аналогичную команду можно применить, если используется clang++

В тестирующей системе запуск производится со следующими флагами:

  g++ ./01_week/tasks/addition/test.cpp -O3 -std=c++20 \
      -fsanitize=address,undefined -Wall -Werror -Wextra \
      -lgtest -lgtest_main \
  && ./a.out

Запуск примеров

Примеры рекомендуется запускать из терминала, так будет удобнее.

Находясь в корневой папке репозитория для запуска примера из терминала необходимо выполнить одну из комманд:

    g++ ./01_week/examples/hello_cpp.cpp -std=c++20 -Wall -Wextra && ./a.out
    clang++ ./01_week/examples/hello_cpp.cpp -std=c++20 -Wall -Wextra && ./a.out

При необходимости можно убрать, добавить или поменять флаги компилятора.

Порядок примеров в соответствии с ходом лекции можно найти в рабочей папке соответствующей недели 01_week/ в файле CMakeLists.txt. Цели обозначенные командой add_examle(...) упорядочены последовательно.

Сборка и запуск с санитайзерами

Обратите внимание, что на сервере осуществляется тестирование с включенными санитайзерами, которые проверяют наличие неопределенного поведения и некорректной работы с памятью в программе. Осуществить такую сборку можно следующими командами:

  cmake -B build-asan -DCMAKE_BUILD_TYPE=Asan
  cmake --build build-asan --target test_<task_name>
  ./build-asan/tasks/test_<task_name>

Отправка решения

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

Для этого необходимо выполнить следующие команды git из корня репозитория:

  git add ./01_week/tasks/addition/addition.cpp
  git commit -m "add (solution): add <task_name> task"
  git push origin main
  • сообщение коммита должно быть адекватным, для удобства рекомендуется использовать префиксы add, fix, ref.

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

About

Студенческий репозиторий курса C++ Школы разработчика компании Прософт-Системы

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •