Программирование на языке C++. Основной поток 2026

Материал из Public ATP Wiki
Версия от 15:48, 19 июня 2026; Spirina.es (обсуждение | вклад) (Материалы курса)
Перейти к: навигация, поиск

О курсе

Первый (осенний) семестр предназначен для начинающих разработчиков на C++.

Второй (весенний) семестр даёт углублённое понимание тонкостей языка и раскрывает особенности возможностей новых стандартов. Подойдёт как для тех, у кого C++ является первым опытом программирования, так и для тех, кто переходит на C++ с других языков.

Важной особенностью курса является то, что упор делается на большое количество практики, код-ревью и устные сдачи. Данный подход позволяет выстроить сильный фундамент для дальнейшего профессионального развития как C++-разработчика, так и в любой другой IT-специальности.

Команда курса

Руководитель курса и лектор: Попов Павел Александрович Семинаристы:

    • Барсуков Сергей Евгеньевич
    • Драгун Константин Юрьевич
    • Гарбузов Николай Алексеевич
    • Русецкий Дмитрий Сергеевич
    • Вашкевич Егор Сергеевич
    • Лунга Артём Романович
    • Погадаев Никита Максимович

Ассистенты:

    • Информация будет опубликована позднее.

Программа курса

Формы контроля:

Осенний семестр — дифференцированный зачёт.

Весенний семестр — экзамен.

Осенний семестр

Неделя Тема Задачи
1 Введение. Простейшая программа. Объявления и определения, скоупы.
2 Основные типы и операции над ними. Выражения и операторы.
3 Control statements. Compile-time errors, runtime errors. Undefined behavior и unspecified behavior.
4 Указатели. Виды памяти.
5 Динамическая память. Массивы. Указатели на функции. Stack
6 Ссылки. Константы. Константные указатели и ссылки. Stack
7 Приведения типов. Классы и структуры. Модификаторы доступа. String
8 Конструкторы и деструкторы. Оператор присваивания. Правило трёх.
9 Перегрузка операторов. Const-, static-, explicit-методы. Указатели на члены. BigInteger
10 Наследование и его виды. Видимость и доступность методов при наследовании. Конструкторы и деструкторы при наследовании. Rational
11 Приведения типов при наследовании. Множественное наследование. Виртуальные функции и полиморфные типы.
12 Абстрактные классы. Pure virtual функции. RTTI и dynamic_cast. Таблицы виртуальных функций. Geometry
13 Виртуальные функции (окончание). Шаблоны. Перегрузка и специализация шаблонов.
14 Вычисления на шаблонах. Метафункции. Зависимые имена. Matrix
15 Вариативные шаблоны. Исключения. Идиома RAII.

Весенний семестр

Неделя Лекции Задачи
16 Исключения в конструкторах и деструкторах. noexcept. Exception-safety. Residue
17 Контейнеры. Внутреннее устройство vector и deque.
18 Устройство deque. Итераторы, виды итераторов, инвалидация итераторов. Внутреннее устройство list. Deque
19 Внутреннее устройство map. Классы string_view и span. Идея аллокаторов.
20 Внутреннее устройство unordered_map. Allocator traits. Allocator-aware контейнеры.
21 Выравнивания. Перегрузка new/delete. Идея move-семантики. Move-конструкторы и move-assignment операторы. List and StackAllocator
22 Определения lvalue и rvalue. Rvalue-ссылки. Reference qualifiers. Perfect forwarding. Универсальные ссылки. std::forward.
23 Реализация std::move и std::forward. xvalues, RVO, copy elision, temporary materialization. Функция move_if_noexcept.
24 Вывод типов auto, decltype. CTAD, template deduction guides. Tuples, structured bindings, tuple-like types. Unordered Map
25 unique_ptr, shared_ptr, weak_ptr, make_shared, enable_shared_from_this. Type erasure. std::any.
26 Стирание типов в shared_ptr. Шаблонное метапрограммирование. Идиома SFINAE. Реализация is_class. Метафункция enable_if. SharedPtr
27 Реализация has_method_construct, is_base_of. Спецификатор и оператор requires. Концепты.
28 Лямбды. Замыкания. Списки захвата. Захват с инициализацией. Захват this. Обобщённые лямбды. Tuple
29 Шаблонные лямбды. std::function, std::bind, std::reference_wrapper, std::invoke. Идея реализации std::function.
30 Constexpr-переменные и функции. Compile-time вычисления. Function

На каждую задачу:

срок сдачи в контест — 3 недели (2 недели без штрафа);

срок прохождения ревью (в том числе устного) — 4 недели с момента релиза задачи и 3 попытки;

Коммуникация

Ссылка на чат курса в мессенджере (будет опубликована ближе к старту семестра).

Прогресс студентов

Ссылка на таблицу студентов с оценками (будет опубликована ближе к старту семестра).

Критерии оценивания и формы контроля успеваемости

Осенний семестр

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

Итоговая оценка по задачам считается так:

  • формула: (кол-во баллов по сданным задачам - штрафы за скат) / кол-во баллов за все задачи * 7
  • финальная контрольная работа является блокирующей и приносит от 0 до 3 баллов (при баллах ниже порога, который считается после сдачи кр, зачет считается не сданным и переходит в ранг пересдачи)
  • Итоговая оценка складывается из максимальных баллов (7 за задачи + 3 за к.р. + 1 от семинариста) и итог округляется вниз.


Весенний семестр

1. Баллы за сданные задачи ограничивают оценку таким образом:

  • учитываются 6 задач с коэффициентом (о нем ниже) + баллы за задачу reze
  • нормировка выглядит следующим образом
       1) 1 задача -> ее баллы * 1.0
       2) 2 задачи -> их баллы * 1.1
       3) 3 задачи -> их баллы * 1.2
       4) 4 задачи -> их баллы * 1.3
       5) 5 задачи -> их баллы * 1.4
       6) 6 задачи -> их баллы * 1.5
  • чтобы иметь возможность получить оценку уд. необходимо сдать 1-2 задачи (не учитывая Residue) + сумма баллов всех сданных задач 250-449.
  • чтобы иметь возможность получить оценку хор. необходимо сдать 3-4 задачи (не учитывая Residue) + сумма баллов всех сданных задач 450-749.
  • чтобы иметь возможность получить оценку отл. необходимо сдать 5-6 задачи (не учитывая Residue) + сумма баллов всех сданных задач 750-1000+.
  • финальная сумма баллов переводится в оценку по формуле баллы / 100. Например, 740 баллов переходят в оценку 7, а 755 в оценку 8 по правилу округления.

2. Сам процесс сдачи экзамена:

  • при сдаче на уд. - отвечаются 2 билета на уд.
  • при сдаче на хор. - отвечаются 2 билета на уд. и 2 билета на хор.
  • при сдаче на отл. - отвечаются 2 билета на хор и 2 билета на отл.

3. Если у вас одна из следующих ситуаций, то есть возможность повысить оценку:

  • 2 (не учитывая Residue) задачи и больше 500 баллов, то можно ответить на оценку хор 5 (для этого необходимо успешно ответить все билеты на оценку уд. и затем 2 дополнительных билета на хор.)
  • 4 (не учитывая Residue) задачи и больше 800 баллов, то можно ответить на оценку отл 8 (для этого необходимо успешно ответить все билеты на оценку хор. и затем 2 дополнительных билета на отл.)

4. При успешной сдаче 3+ задач (то есть вы успешно сдали 4-6 задач) в семестре (не учитывая Residue) билеты на уд. отвечать не обязательно.

5. При успешной сдаче 4+ задач (то есть вы успешно сдали 5-6 задач, не учитывая Residue), есть возможность вытянуть 3 билета на хор и 3 билета на отл, но выбрать из каждого множества по 2 для ответа на экзамене.

Крайне рекомендуем досдать все задачи как можно раньше, чтобы идти на экзамен с максимально возможным количеством баллов))))

Пример расчёта баллов. Сиксевенов Пабло Ильич решил за семестр Residue на 90 баллов, list на 180, tuple на 200. Получаем такую формулу расчёта его баллов: (180 + 200) * 1.1 + 90 = 508. - Ему необходимо ответить 2 билета на уд тк на уд достаточно решено задач и баллов. Если все успешно, он может попробовать сдать на хор, тк у него 500+ баллов, для получения оценки хор 5 ему необходимо успешно ответить 2 билета на хор.

Материалы курса

Видеолекции


программа экзамена