Основы и методология программирования 2016/2017 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Домашняя работа)
(Преподаватели и ассистенты)
Строка 56: Строка 56:
 
| 162-2 || Василий Жовнер || Николай Вельдяйкин || Пн, 9:00, 513; Чт, 9:00*, 10:30, 327 ||  
 
| 162-2 || Василий Жовнер || Николай Вельдяйкин || Пн, 9:00, 513; Чт, 9:00*, 10:30, 327 ||  
 
|-
 
|-
| 164-1 || Федор Строк || Никита Попов || Вт, 15:10, 420; Чт, 9:00*, 10:30, 501 ||
+
| 164-1 || Федор Строк || || Вт, 15:10, 420; Чт, 9:00*, 10:30, 501 ||
 
|-
 
|-
| 164-2 || Илья Макаров || Никита Попов || Вт, 13:40, 420; Чт, 10:30*, 12:10, 416 ||
+
| 164-2 || Илья Макаров || || Вт, 13:40, 420; Чт, 10:30*, 12:10, 416 ||
 
|-
 
|-
 
| 165-1 || Евгений Салагаев || Валерия Бубнова || Чт, 9:00*, 10:30, 503; Пт, 9:00, 412 ||
 
| 165-1 || Евгений Салагаев || Валерия Бубнова || Чт, 9:00*, 10:30, 503; Пт, 9:00, 412 ||

Версия 12:28, 6 декабря 2016

Материалы первого модуля (программирование на Python'е)

Второй модуль (программирование на C++)

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

Лекции: понедельник (еженедельно), 1-я пара (10:30 - 11:50), ауд. 622;
четверг (10 и 24 ноября, 8 декабря), 1-я пара (9:00-10:30), ауд. 622.

Консультации лектора: четверг, 12:10, ауд. 607.

Текущие оценки

Программа второго модуля

  1. Встроенные типы данных, std::string. Потоковый ввод-вывод. Условный оператор, циклы, switch.
  2. Шаблон std::vector. Структуры как POD-типы.
  3. Функции. Передача параметров по значению и по ссылке. Константность. Шаблоны функций.
  4. Контейнеры map/set, unordered_map/unordered_set. Range-based for.
  5. Алгоритмы стандартной библиотеки. Итераторы. Лямбда-функции.
  6. Битовые операции. Выражения. Приоритет операторов.
  7. Временные объекты. Время жизни объекта. Классы. Конструкторы, деструктор. Перегрузка операторов.
  8. Стек и динамическая память. Умные указатели: std::unique_ptr/std::shared_ptr.
  9. Исключения. Move-семантика.


Краткое содержание прочитанных лекций

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. [Код, написанный на лекции.]

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

Рекомендуется работать в 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, 513; Чт, 10:30*, 301; Пт, 15:10, 505 см. страницу семинаров
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 (рациональное число).

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

Будут проводиться на семинарах по четвергам каждую вторую неделю (начиная с 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/

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

Накопленная оценка за 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