Основы и методология программирования 2016/2017
Материалы первого модуля (программирование на Python'е)
Содержание
- 1 Второй и третий модули (программирование на C++)
- 2 Программа второго модуля
- 3 Примерная программа третьего модуля
- 4 Краткое содержание прочитанных лекций
- 5 Используемое ПО
- 6 Преподаватели и ассистенты
- 7 Домашняя работа
- 8 Контрольные работы
- 9 Формулы оценок
- 10 Требования к оформлению кода программ
- 11 Полезные ссылки
Второй и третий модули (программирование на C++)
Лекторы: А. И. Зобнин (С++), С. А. Объедков (алгоритмы).
Лекции: С++: понедельник, 10:30 - 11:50, ауд. 622;
Алгоритмы: четверг, 12:10-13:30, ауд. 622.
Экзаменационный контест по C++ пройдет в четверг, 30 марта.
Первая смена: начало в 10:30.
Группы: 162 (ауд. 301), 164 (ауд. 501), 165 (ауд. 505).
Вторая смена: начало в 13:40.
Группы: 166 (ауд. 301), 167 (ауд. 501), 168 (ауд. 505).
Контрольная работа по С++ состоится в понедельник, 20 марта с 10:30 до 11:50.
Студенты со своим ноутбуком могут писать контрольную работу в ауд. 622.
Студенты без своего ноутбука приглашаются в ауд. 503 (группы 162 и 164), 513 (группы 165 и 166) и 605 (группы 167 и 168).
Переписывание контрольных работ по C++ состоится в субботу, 25 марта с 13:40 до 15:00.
Студенты со своим ноутбуком приглашаются в ауд. 317.
Студенты без своего ноутбука приглашаются в ауд. 503.
Программа второго модуля
- Встроенные типы данных, std::string. Потоковый ввод-вывод. Условный оператор, циклы, switch.
- Шаблон std::vector. Структуры как POD-типы.
- Функции. Передача параметров по значению и по ссылке. Константность. Шаблоны функций.
- Контейнеры map/set, unordered_map/unordered_set. Range-based for.
- Алгоритмы стандартной библиотеки. Итераторы. Лямбда-функции.
- Битовые операции. Выражения. Приоритет операторов.
- Временные объекты. Время жизни объекта. Классы. Конструкторы, деструктор. Перегрузка операторов.
- Стек и динамическая память. Умные указатели: std::unique_ptr/std::shared_ptr.
- Исключения. Move-семантика.
Примерная программа третьего модуля
- Обработка исключений.
- Динамическая память. Указатели. Низкоуровневые массивы. С-строки.
- Идиома RAII. Контейнеры STL как воплощение идиомы RAII. Умные указатели unique_ptr/shared_ptr.
- Пример: собственная реализация unique_ptr. Move-семантика.
- Наследование. Полиморфизм. Виртуальные функции.
- Пример: собственная реализация контейнера vector.
- Единицы трансляции. Сборка программы.
Краткое содержание прочитанных лекций
31.10.2016. C++: ввод и вывод, условный оператор, циклы, оператор switch. [Код, написанный на лекции.]
07.11.2016. Векторы и строки. Структуры. [Код, написанный на лекции.]
10.11.2016. Константность. Ссылки. Функции. [Код, написанный на лекции.]
14.11.2016. Контейнеры map и unordered_map. [Код, написанный на лекции.]
21.11.2016. Контейнеры list и deque. Алгоритмы стандартной библиотеки. [Код, написанный на лекции.]
24.11.2016. Адаптеры stack, queue и priority_queue. Алгоритмы стандартной библиотеки (продолжение). [Код, написанный на лекции.]
28.11.2016. Битовые операции. Выражения, операторы. Перегрузка операторов. [Код, написанный на лекции.]
05.12.2016. Класс Date. Шаблонный класс Matrix. [Код, написанный на лекции.]
08.12.2016. Пример: итератор для класса Matrix (код будет выложен позже).
12.12.2016. Жизненный цикл объекта. Конструкторы, деструктор. Семантика перемещения. [Код, написанный на лекции.]
16.01.2017. Исключения (код будет выложен позже).
23.01.2017. Указатели. Динамическая память. Динамические массивы. Null-terminated strings. [Код, написанный на лекции.]
30.01.2017. Идиома RAII. [Код, написанный на лекции.]
06.02.2017. Умные указатели [Код, написанный на лекции.]
13.02.2017. Умные указатели (продолжение). Наследование [Код, написанный на лекции.]
20.02.2017. Виртуальные функции. [Код, написанный на лекции.]
Используемое ПО
Рекомендуется работать в Linux, использовать текстовый редактор Vim и компилятор clang 3.8.
На занятия можно приносить свой ноутбук.
Преподаватели и ассистенты
Подгруппа | Преподаватель | Учебные ассистенты | Семинары | Консультации |
---|---|---|---|---|
162-1 | Алексей Зобнин | Николай Вельдяйкин | Пн, 9:00, 501; Чт, 9:00*, 301; Чт, 10:30, 412 | |
162-2 | Василий Жовнер | Николай Вельдяйкин | Пн, 9:00, 513; Чт, 9:00*, 10:30, 327 | |
164-1 | Федор Строк | Вт, 15:10, 420; Чт, 9:00*, 10:30, 501 | ||
164-2 | Илья Макаров | Вт, 13:40, 420; Чт, 10:30*, 12:10, 416 | ||
165-1 | Евгений Салагаев | Валерия Бубнова | Чт, 9:00*, 10:30, 503; Пт, 9:00, 412 | |
165-2 | Иван Фефер | Валерия Бубнова | Пн, 9:00, 503; Чт, 9:00*, 10:30, 505 | |
166-1 | Андрей Кондратьев | Петр Жижин | Пн, 9:00, 605; Чт, 9:00*, 10:30, 513 | |
166-2 | Михаил Густокашин | Петр Жижин | Пн, 13:40, 301; Чт, 10:30*, 12:10, 301 | Чт. 13:40-16:40, 501 |
167-1 | Алексей Умнов | Никита Александров | Ср, 12:10, 503 | см. страницу семинаров |
167-2 | Дмитрий Вельтищев | Никита Александров | Пн, 9:00, 327; Чт, 9:00*, 10:30, 605 | |
168-1 | Михаил Дектярёв | Александра Рябинина | Пн, 9:00, 505; Чт, 9:00*, 411; Чт, 10:30, 432 | |
168-2 | Андрей Кашин | Александра Рябинина | Ср, 9:00, 10:30, 301; Чт, 9:00*, 416 |
Домашняя работа
Новая домашняя работа выкладывается еженедельно по средам в 9:00. Максимальная оценка за работу 1200 баллов (соответствует оценке 12). Дедлайн на выполнение домашней работы - 1 неделя (дедлайн перед контрольной - полночь). Еще в течение одной недели можно сдавать задачи и они будут получать половину баллов.
За неудачную посылку по задаче предусмотрен штраф в 1 балл, однако, если неудачных посылок очень много, но задача сдана, то она будет оценена минимум в 80% баллов.
Контест 1 (Числа, if, циклы, строки): https://official.contest.yandex.ru/contest/3156 (дедлайн 10.11.2016 9:00)
Контест 2 (Вектор, индексация строк, функции): https://official.contest.yandex.ru/contest/3202 (дедлайн 17.11.2016 9:00)
Контест 3 (Сортировка структур, контейнеры, рекурсия): https://official.contest.yandex.ru/contest/3434 (дедлайн 24.11.2016 9:00)
Внимание! В этом контесте мы будем вручную рецензировать решения ваших задач I (Поступление) и P (Сессия). Для этого всем студентам нужно зарегистрироваться в системе Anytask:
1. Зарегистрируйтесь на http://anytask.org/accounts/register/. Пожалуйста, вводите правильно свою фамилию и имя на русском языке.
2. Укажите инвайт от своей подгруппы:
162-1 | ygTQx77 |
162-2 | eYzME9f |
164-1 | 9WOeHCe |
164-2 | QjW2SVe |
165-1 | jUTAPd8 |
165-2 | 1BRstCB |
166-1 | kA3HLRk |
166-2 | H2pdqaP |
167-1 | YPXr9yn |
167-2 | 8ewB9l4 |
168-1 | aVNsHhA |
168-2 | 5cNE8fX |
3. Найдите себя в списке группы. Нажмите на ячейку в таблице в своей строке и в столбце задачи. Отправьте решения своих задач (получившие статус OK в Я.Контесте).
4. Если всё прошло успешно, вы получите ссылку на Review board (систему рецензирования) с вашим кодом. Логин и пароль для входа в Review board - такой же, как и в Anytask.
5. Ожидайте рецензии от вашего преподавателя или ассистента. Вы получите об этом автоматическое уведомление по почте. Будьте готовы исправить замечания в решении, если потребуется. За недочёты в решениях будут вычитаться баллы у соответствующих задач.
6. За нарушение правил регистрации (неправильно введены фамилия/имя, регистрация в чужой подгруппе и т. д.) мы также будем снимать баллы.
Контест 4 (Стандартные алгоритмы и структуры данных): https://official.contest.yandex.ru/contest/3485 (дедлайн 1.12.2016 0:00) - в этом контесте сложные (на наш взгляд) задачи помечены звездочкой. На рецензию в Anytask необходимо сдать задачи I (игра в пьяницу) и T (unique).
Контест 5 (Битовые операции и классы): https://official.contest.yandex.ru/contest/3517 (дедлайн 8.12.2016 9:00). Новые задачи добавляться больше не будут. На рецензию в Anytask необходимо сдать задачи H (забавная игра) и P (рациональное число).
Контест 6 разбит на две части: класс "Матрица" (https://official.contest.yandex.ru/contest/3552) и класс "Многочлен" (https://official.contest.yandex.ru/contest/3557). Дедлайн по первой части: 15.12.2016 0:00. Дедлайн по второй части: 22.12.2016 0:00. На рецензию в Anytask необходимо сдать последнюю задачу H (многочлен sparse).
Контест 7 (Исключения и динамическая память): https://official.contest.yandex.ru/contest/3714. Дедлайн продлён до 06.02.2017 23:59 из-за технических проблем с Яндекс.Контестом.
Контест 8 (Умные указатели): https://official.contest.yandex.ru/contest/3571. Дедлайн - 19.02.2017 23:59.
Контест 9 (Указатели, наследование, полиморфизм): https://official.contest.yandex.ru/contest/4017. Дедлайн - 05.03.2017 23:59.
Контест 10 (Реализация классов стандартной библиотеки): https://official.contest.yandex.ru/contest/4073. Дедлайн - 20.03.2017 23:59. Добавилась задача E. Новые задачи добавляться больше не будут.
Контрольные работы
Будут проводиться на семинарах по четвергам каждую вторую неделю (начиная с 17 ноября).
Контрольную работу можно писать только в классе!
Первая контрольная работа:
Контест для первой пары: https://official.contest.yandex.ru/contest/3442/problems/
Контест для второй пары: https://official.contest.yandex.ru/contest/3443/problems/
Вторая контрольная работа:
Контест для первой пары: https://official.contest.yandex.ru/contest/3521/problems/
Контест для второй пары: https://official.contest.yandex.ru/contest/3522/problems/
Третья контрольная работа:
Контест для первой пары: https://official.contest.yandex.ru/contest/3588/problems/
Контест для второй пары: https://official.contest.yandex.ru/contest/3589/problems/
Четвёртая контрольная работа:
https://official.contest.yandex.ru/contest/4225/problems/
Переписывание (19.12.2016):
Переписывание состоится 19 декабря с 10:30 до 11:50 вместо лекции.
Студенты со своими ноутбуками приглашаются в ауд. 622. Студенты без своих ноутбуков приглашаются в ауд. 501, 503, 513.
За переписывание будет выставлена последняя оценка (то есть, если вы переписали хуже, чем написали, то получите меньшую оценку). Считается, что студент участвовал в переписывании, если он отправил хотя бы одну посылку.
Первая контрольная: https://official.contest.yandex.ru/contest/3602/problems/
Вторая контрольная: https://official.contest.yandex.ru/contest/3599/problems/
Третья контрольная: https://official.contest.yandex.ru/contest/3603/problems/
Формулы оценок
Накопленная оценка за II-III модули = 0,4 * (Средняя оценка за домашние работы) + 0,6 * (Средняя оценка за контрольные работы)
Требования к оформлению кода программ
Мы используем cpplint для проверки стиля. Вот список требований.
Флаги для cpplint: --filter=-,+build/include,-build/include_order,+build/include_what_you_use,+build/storage_class,+readability/alt_tokens,+readability/braces, +readability/casting,+readability/inheritance,+runtime/casting,-runtime/explicit,+whitespace/blank_line,+whitespace/braces,+whitespace/comma, +whitespace/comments,+whitespace/empty_conditional_body,+whitespace/empty_loop_body,+whitespace/end_of_line, +whitespace/ending_newline,+whitespace/forcolon,+whitespace/indent,+whitespace/line_length,+whitespace/newline, +whitespace/operators,+whitespace/parens,+whitespace/semicolon,+whitespace/tab --linelength=100
Вот скрипт, в котором уже включены эти флаги (и который можно запускать без дополнительных параметров): https://yadi.sk/d/vRnvWsAlxzyaG
Полезные ссылки
Bandit - игра для освоения консольных команд Linux
Practical Vim - хороший учебник по Vim