Основы и методология программирования на ПМИ 2020/2021 (основной поток) 3 модуль — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
м
 
(не показано 8 промежуточных версии 2 участников)
Строка 7: Строка 7:
 
'''Лекции:''' вторник и четверг, 11:10. Лекции проходят онлайн.<br />
 
'''Лекции:''' вторник и четверг, 11:10. Лекции проходят онлайн.<br />
  
Телеграм-канал для объявлений: https://t.me/joinchat/WCcO-u6O5uBli0ON
 
 
Телеграм-группа для вопросов и обсуждений: https://t.me/joinchat/GGD7Q_iiHS9LQlfg
 
  
 
== Краткая программа курса ==
 
== Краткая программа курса ==
Строка 31: Строка 28:
 
Мы напишем 8 домашних контестов. Вот [https://gist.github.com/alzobnin/d70b26ecb3476d8c1a4daf3914fc35e1#file-rules-md правила начисления баллов и проверки контестов].<br/>
 
Мы напишем 8 домашних контестов. Вот [https://gist.github.com/alzobnin/d70b26ecb3476d8c1a4daf3914fc35e1#file-rules-md правила начисления баллов и проверки контестов].<br/>
  
В контестах используется компилятор g++-8 с опциями -Wall -Wextra -Werror -O3 --std=c++17 -g -fsanitize=address.<br/>
+
В контестах используется компилятор clang++-11 с опциями -Wall -Wextra -Werror -O3 --std=c++20 -fsanitize=address.<br/>
  
 
1. [https://official.contest.yandex.ru/contest/24031/problems/ Контест №1]<br/>
 
1. [https://official.contest.yandex.ru/contest/24031/problems/ Контест №1]<br/>
Строка 40: Строка 37:
 
6. [https://official.contest.yandex.ru/contest/24036/problems/ Контест №6]<br/>
 
6. [https://official.contest.yandex.ru/contest/24036/problems/ Контест №6]<br/>
 
7. [https://official.contest.yandex.ru/contest/24037/problems/ Контест №7]<br/>
 
7. [https://official.contest.yandex.ru/contest/24037/problems/ Контест №7]<br/>
 +
8. [https://official.contest.yandex.ru/contest/24038/problems/ Контест №8]
  
 
== Контрольные работы ==
 
== Контрольные работы ==
Строка 47: Строка 45:
 
1. [https://official.contest.yandex.ru/contest/24604/ Контрольная работа №1] состоялась 28 января. [https://gist.github.com/alzobnin/70f6250c260687cbd7eb4cfa8c4822f7 Разбор задач].<br/>
 
1. [https://official.contest.yandex.ru/contest/24604/ Контрольная работа №1] состоялась 28 января. [https://gist.github.com/alzobnin/70f6250c260687cbd7eb4cfa8c4822f7 Разбор задач].<br/>
 
2. [https://official.contest.yandex.ru/contest/25074/ Контрольная работа №2] состоялась 16 февраля.<br/>
 
2. [https://official.contest.yandex.ru/contest/25074/ Контрольная работа №2] состоялась 16 февраля.<br/>
3. [https://official.contest.yandex.ru/contest/25696/ Контрольная работа №3] состоится 9 марта.<br/>
+
3. [https://official.contest.yandex.ru/contest/25696/ Контрольная работа №3] состоялась 9 марта.<br/>
 +
4. [https://official.contest.yandex.ru/contest/24040/ Контрольная работа №4] состоялась 25 марта.<br/>
  
 
6 марта в 14:40 состоялась КР1/КР2 для студентов, пропустивших КР1 или КР2 по уважительной причине.
 
6 марта в 14:40 состоялась КР1/КР2 для студентов, пропустивших КР1 или КР2 по уважительной причине.
Зарегистрируйтесь, пожалуйста, в [https://forms.gle/JY1hkU1yPEc8q8r66 этой форме].
+
 
 +
27 марта в 14:40 состоится КР3/КР4 для студентов, пропустивших КР3 или КР4 по уважительной причине.
 +
Зарегистрируйтесь, пожалуйста, в [https://forms.gle/ZT8vaBbvAFArhiea9 этой форме].
 
Переписывание будет осуществляться по тем же [http://wiki.cs.hse.ru/КР_1_ОиМП-3_2021# правилам], что и обычная КР.<br/>
 
Переписывание будет осуществляться по тем же [http://wiki.cs.hse.ru/КР_1_ОиМП-3_2021# правилам], что и обычная КР.<br/>
  
 
== Экзамен ==
 
== Экзамен ==
В конце курса пройдёт теоретический экзамен в виде теста.
+
1 апреля пройдёт теоретический экзамен в виде теста. Начало в 11:10. Правила такие же, как и на контрольных работах.
 +
 
 +
Таблица с распределением по вариантам: https://docs.google.com/spreadsheets/d/1TFH-dtevNyM0IxlpCjx-OTSYa5R4E2AwL99A3wR1iG8/edit?usp=sharing
 +
 
 +
Форма для отправки видеозаписи: https://forms.gle/YqLGnBTnDQopP6dE6
  
 
== Требования к оформлению кода программ ==
 
== Требования к оформлению кода программ ==

Текущая версия на 11:23, 20 мая 2021

Основы и методология программирования (C++), основной поток, 2020/2021, III модуль

Страница I модуля.

Лектор: А. И. Зобнин

Лекции: вторник и четверг, 11:10. Лекции проходят онлайн.


Краткая программа курса

1. Типы данных и переменные. Операторы. Контейнеры string/vector. Функции.
2. Структуры. Классы std::pair и std::tuple. Ссылки. Указатели. Константность. Передача параметров в функции.
3. Контейнеры стандартной библиотеки (array, deque, list, map, set, unordered_map, unordered_set).
4. Шаблонные функции. Алгоритмы стандартной библиотеки.
5. Жизненный цикл объектов. Static/dynamic storage duration. Move-семантика.
6. Классы. Шаблоны классов. Обработка исключений.
7. Наследование и полиморфизм. Фабрики объектов. Класс std::variant.
8. Идиома RAII. Умные указатели.
9. Работа с байтами и памятью.
10. Сборка сложных проектов (заголовочные файлы, единицы трансляции, компоновщик, CMake).
11. Реализация стандартных контейнеров.

Конспекты лекций

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

Регулярные домашние контесты

Мы напишем 8 домашних контестов. Вот правила начисления баллов и проверки контестов.

В контестах используется компилятор clang++-11 с опциями -Wall -Wextra -Werror -O3 --std=c++20 -fsanitize=address.

1. Контест №1
2. Контест №2
3. Контест №3
4. Контест №4
5. Контест №5
6. Контест №6
7. Контест №7
8. Контест №8

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

Мы напишем 4 контрольных контеста с асинхронным прокторингом. Ознакомьтесь с инструкцией по проведению работ!
Контрольные работы будут проводиться вместо лекций в заранее объявленное время.

1. Контрольная работа №1 состоялась 28 января. Разбор задач.
2. Контрольная работа №2 состоялась 16 февраля.
3. Контрольная работа №3 состоялась 9 марта.
4. Контрольная работа №4 состоялась 25 марта.

6 марта в 14:40 состоялась КР1/КР2 для студентов, пропустивших КР1 или КР2 по уважительной причине.

27 марта в 14:40 состоится КР3/КР4 для студентов, пропустивших КР3 или КР4 по уважительной причине. Зарегистрируйтесь, пожалуйста, в этой форме. Переписывание будет осуществляться по тем же правилам, что и обычная КР.

Экзамен

1 апреля пройдёт теоретический экзамен в виде теста. Начало в 11:10. Правила такие же, как и на контрольных работах.

Таблица с распределением по вариантам: https://docs.google.com/spreadsheets/d/1TFH-dtevNyM0IxlpCjx-OTSYa5R4E2AwL99A3wR1iG8/edit?usp=sharing

Форма для отправки видеозаписи: https://forms.gle/YqLGnBTnDQopP6dE6

Требования к оформлению кода программ

Вот наш style guide. Мы используем cpplint для проверки некоторых требований. В контестах мы запускаем вот такой модифицированный скрипт, не требующий указания опций, и принимающий в качестве параметра просто проверяемый файл.

Формула оценок

У нас будет 8 регулярных домашних контестов, 4 контрольных и экзамен.

При этом контрольная будет весить как две домашки, а экзамен - как четыре домашки.

Весь курс будет весить как 20 домашек. То есть, каждая домашка будет весить 0.05, контрольная - 0.1, а экзамен - 0.2.

Если сложить вместе все домашки и контрольные и считать, что оценка за элементы контроля выставляется по десятибалльной шкале, то будет такая формула оценки за III модуль: Round(0.4 * домашки + 0.4 * контрольные + 0.2 * экзамен).

Так как курс "продолжается" с I модуля, то итоговая оценка за весь курс будет равна Round(1/3 * первый модуль + 2/3 * третий модуль).

Все округления - математические.

Используемое ПО

На лекциях мы будем работать в Linux, использовать текстовый редактор Vim и компиляторы g++ и clang. В контесте мы используем компилятор g++-8. Вы можете использовать любую среду разработки и любой компилятор.

Курсы на Курсере от разработчиков Яндекса

Основы разработки на C++: белый пояс

Основы разработки на C++: жёлтый пояс

Основы разработки на C++: красный пояс

Основы разработки на C++: коричневый пояс

Основы разработки на C++: чёрный пояс

Видеолекции курса можно посмотреть бесплатно.

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

cppreference.com - полезный сайт-справочник по C++

С++ tutorial - классический tutorial по C++ (немного устарел)

C++ Core Guidelines - рекомендации по C++ от Бьярна Страуструпа и Герба Саттера

некоторые видеолекции по C++ прошлого учебного года