Программирование на C++, часть 1

Санкт-Петербург, осень 2020

Описание

Первая часть курса дает базовые знания и навыки для написания программ с помощью С++. Для освоения курса необходимо быть уверенным пользователем вашей любимой ОС и иметь базовое представление о системе контроля версий git.

C++ знаменит своей производительностью, которая дается, в том числе, и ценой уменьшения безопасности: например, нет проверки выхода индекса за границы массива. Тем не менее, C++ активно развивается в последнее время, и это явно указывает о заинтересованности IT-сообщества в нем. C++20 стандарт готов, а ведущие компиляторы поддерживают почти все требования, описанные в нем. Стандарт C++20 будет рассмотрен во второй части курса, а в первой мы сконцентрируемся на стандартах C++11, C++14, C++17, так как именно они активно используется для разработки в настоящее время.

Примерный список тем, которые будут рассмотрены в первой части курса:

  • препроцессор, компиляция, линковка и исполнение программ
  • встроенные типы, основные конструкции языка
  • глобальные и локальные переменные, области видимости
  • массивы, указатели, ссылки
  • функции, способы передачи аргументов в функцию, указатель на функцию, перегрузка, inline, static, конвенции вызова, RVO и NRVO
  • объявление и определение, ODR, внутренняя и внешняя линковка
  • работа с памятью
  • перечисления, объединения
  • классы: поля, методы, области видимости, операторы, наследование, динамический полиморфизм
  • пространства имен
  • анонимные функции
  • шаблонные функции и классы
  • move-семантика, категории значений выражений

Активности и оценки

Лекции

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

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

Семинары

Семинары обязательны для студентов ИТМО и опциональны для студентов CSC.

Студентам CSC дается время на подтверждения участия в семинаре. Если студент CSC подтверждает свое участие в семинаре, то оценки за дорешки и контрольные работы будут учитываться в итоговой оценке за курс, в ином случае они учитываться не будут. Отказ от семинаров после дедлайна подтверждения участия наказывается штрафом в 1 балл из итоговой оценки за курс.

Дорешки

Семинары рассчитаны на более глубокий разбор тех или иных практических вопросов языка. Обычно семинар состоит из разбора задач прошлого семинара, небольшого обзора тем для новых задач и решение задач с возможностью задать вопросы преподавателю. На семинарах выдается неcколько небольших задач. Решения проходят два этапа ревью, которые помогут вам с написанием идиоматичного кода и поиском распространенных ошибок.

Подробнее о том, как происходит процесс оценивания дорешек описано здесь.

Итоговая оценка за дорешки формируется следующим образом:

  • Рассчитывается относительный балл: балл_за_дорешку / максимальный_балл_за_дорешку
  • Отбрасывается худшая дорешка
  • Рассчитывается средний относительный балл avgR
  • Итоговая оценка: 2 + 3 * avgR

Примечание: бонусные коэффициенты и задачи со звездочками не учитываются в максимальном балле за дорешку

Контрольные работы

Примерно каждый 4-5 семинар проводится контрольная работа. За семестр будет проведено 3-4 контрольные работы. Решения контрольных работ проходят ревью единожды.

Итоговая оценка за контрольные работы формируется следующим образом:

  • Рассчитывается относительный балл: балл_за_кр/ максимальный_балл_за_кр
  • Отбрасывается худшая контрольная
  • Рассчитывается средний относительный балл avgR
  • Итоговая оценка: 2 + 3 * avgR

Большие домашние задания

Домашние задания обязательны для всех студентов курса.

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

О том как формируются сроки сдачи домашних работ описано здесь

За домашнее задание можно получить либо зачет (1 балл), либо незачет (0 баллов).

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

Итоговая оценка за домашние задания: MIN(баллы_за_дз + 2, 5)

Допуск к экзамену

Экзамен опционален для студентов CSC

Студент считается допущенным к экзамену, если он имеет >= 2.5 балла за каждую из активностей.

Если имеется < 2.5 баллов только за одну из активностей, то ее можно досдать на экзамене.

Экзамен

Экзамен состоит из 3 блоков: теормин, теория, задача. Каждый из них оценивается по 5-бальной шкале.

Если оценка за каждый из блоков >= 2.5, то оценка за экзамен рассчитывается как среднее оценок этих 3 блоков, иначе 2.

Оценка за курс

CSC

Оценка за активности:

activities = with_seminars ? AVG(домашние, контрольные, дорешки) : (домашние)

Итоговая оценка:

with_exam ? MAX(activities, AVG(activities, exam)) : activities

ITMO

Если оценка за экзамен < 2.5, то оценка 2.

Иначе, AVG(AVG(дорешки, контрольные, домашние), exam).

Полезные ссылки

  • Общая ведомость (В случае отсутствия доступа, запросите его, указав Фамилию, Имя и ник на github.com)

Преподаватели

Список лекций

Лекция 1. Intro

Организационные вопросы. История языка С++. Философия языка. Минимальный набор языковых конструкций. Заголовочные файлы.

Лекция 2. Fundamentals

Фундаментальные типы. Литералы. Операторы. Указатели. Массивы. Основные конструкции: if-else, switch, while, do-while, for, range-based for. Функции. Глобальные переменные. Области видимости. Объявление и определение. Внешняя и внутренняя линковка.

Лекция 3. Statements. References. Heap. Linkage.

Основные конструкции. Ссылки. Инициализация константных ссылок. Выделение и освобождение памяти на куче. Динамические массивы. Функции: static, передача by-value, by-reference. Глобальные переменные. Объявление и определение. External/Internal Linkage.

Лекция 8. Namespaces. Unions

Static members, Namespaces, Unions

Лекция 9. Classes: Inheritance II

Множественное наследование, Виртуальное наследование, RTTI