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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Краткое содержание лекций)
(Контрольные работы)
 
(не показано 38 промежуточных версии этого же участника)
Строка 10: Строка 10:
  
 
== Краткое содержание лекций ==
 
== Краткое содержание лекций ==
1. Hello, world! Обзор примитивных типов. Условный оператор и циклы. Потоковый консольный ввод-вывод. Классы vector и string. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-1/01.cpp конспект 2016 года])<br/>
+
1. Hello, world! Обзор примитивных типов. Условный оператор и циклы. Потоковый консольный ввод-вывод. Классы vector и string. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/01.cpp конспект 2016 года])<br/>
 +
2. Классы string и vector (продолжение). Размер и ёмкость вектора. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/02.cpp конспект 2016 года])<br/>
 +
3. Ошибки индексации вектора. Структуры. Сортировка вектора структур. Ссылки. Константность (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/03.cpp конспект 2016 года])<br/>
 +
4. Устройство вектора в памяти. Функции. Передача параметров по ссылке и по значению. Классы pair и tuple.<br/>
 +
5. Ассоциативные массивы (map/set и unordered_map/unordered_set), двусвязный список (list) (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/04.cpp конспект 2016 года] и [https://yadi.sk/i/Piqsjkte1ZDlRQ видеозапись экрана])<br/>
 +
6. Deque, array, адаптеры stack, queue и priority_queue. Шаблонные функции. Алгоритмы стандартной библиотеки (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/05.cpp конспект 2016 года] и [https://yadi.sk/i/8U82lWQZMSgMcg видеозапись экрана])<br/>
 +
7. Алгоритмы стандартной библиотеки (продолжение). Инвалидация итераторов. ([https://yadi.sk/i/bDa2RyYIvTELPQ видеозапись экрана])<br/>
 +
8. Алгоритмы стандартной библиотеки (завершение). Классы, жизненный цикл объектов. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/10.cpp конспект 2016 года] и [https://yadi.sk/i/NQBr8kzV3MPZqw видеозапись экрана])<br/>
 +
9. Классы: конструкторы, деструктор, функции-члены, перегрузка операторов. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/07.cpp конспект 2016 года] и [https://yadi.sk/i/UfZ2ykRG5X_TOg видеозапись экрана])<br/>
 +
10. Шаблонные классы. Приватные и публичные имена. Генерация и обработка исключений. ([https://yadi.sk/i/D2z_fN9nKw396g видеозапись экрана])<br/>
 +
11. Указатели и адресная арифметика. Создание объектов и массивов в динамической памяти. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/12.cpp конспект 2016 года] и [https://yadi.sk/i/XDnr39qpnnek2A видеозапись экрана])<br/>
 +
12. Идиома RAII. Умный указатель unique_ptr. (см. [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/13.cpp конспекты] [https://github.com/alzobnin/hse-cs-prog/blob/master/2016-2/14.cpp лекций] 2016 года и [https://yadi.sk/i/-uNDqfF-GCdcnw видеозапись экрана])<br/>
 +
13. Работа с байтами и памятью. (см. [https://yadi.sk/i/jOiVDBNc8ykwlg видеозапись экрана])<br/>
 +
14. Наследование и полиморфизм.
  
 
== Регулярные домашние контесты ==
 
== Регулярные домашние контесты ==
 
1. [https://official.contest.yandex.ru/contest/16579/problems/ Контест №1]<br/>
 
1. [https://official.contest.yandex.ru/contest/16579/problems/ Контест №1]<br/>
 +
2. [https://official.contest.yandex.ru/contest/16580/problems/ Контест №2]<br/>
 +
3. [https://official.contest.yandex.ru/contest/16581/problems/ Контест №3]<br/>
 +
4. [https://official.contest.yandex.ru/contest/16582/problems/ Контест №4]<br/>
 +
5. [https://official.contest.yandex.ru/contest/16583/problems/ Контест №5]<br/>
 +
6. [https://official.contest.yandex.ru/contest/16584/problems/ Контест №6]<br/>
 +
7. [https://official.contest.yandex.ru/contest/16585/problems/ Контест №7]<br/>
 +
8. [https://official.contest.yandex.ru/contest/16586/problems/ Контест №8]<br/>
  
 
== Контрольные работы ==
 
== Контрольные работы ==
Мы напишем 4 контрольных контеста и одну теоретическую работу.
+
Мы напишем 4 контрольных контеста и одну теоретическую работу.<br/>
 +
1. [https://official.contest.yandex.ru/contest/16996/problems/ Контрольная работа №1]<br/>
 +
2. [https://official.contest.yandex.ru/contest/17293/problems/ Контрольная работа №2]<br/>
 +
3. [https://official.contest.yandex.ru/contest/17421/problems/ Контрольная работа №3]<br/>
 +
4. [https://official.contest.yandex.ru/contest/17451/problems/ Контрольная работа №4]<br/>
  
 
== Используемое ПО ==
 
== Используемое ПО ==
Строка 25: Строка 49:
 
Результат третьего модуля = 0.4 * контрольные + 0.3 * регулярные_контесты + 0.3 * экзамен
 
Результат третьего модуля = 0.4 * контрольные + 0.3 * регулярные_контесты + 0.3 * экзамен
  
 +
Итог: Округление(1/3 * результат первого модуля + 2/3 * результат третьего модуля)
  
 
== Требования к оформлению кода программ ==
 
== Требования к оформлению кода программ ==
 
 
Мы используем cpplint для проверки стиля. Вот [http://wiki.cs.hse.ru/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%D0%BF%D0%BE_%D0%BA%D1%83%D1%80%D1%81%D1%83_%D0%9E%D0%B8%D0%9C%D0%9F/C%2B%2B_check список требований].
 
Мы используем cpplint для проверки стиля. Вот [http://wiki.cs.hse.ru/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%D0%BF%D0%BE_%D0%BA%D1%83%D1%80%D1%81%D1%83_%D0%9E%D0%B8%D0%9C%D0%9F/C%2B%2B_check список требований].
  
Строка 48: Строка 72:
  
 
[https://www.coursera.org/learn/c-plus-plus-black Основы разработки на C++: чёрный пояс]
 
[https://www.coursera.org/learn/c-plus-plus-black Основы разработки на C++: чёрный пояс]
 
  
 
== Полезные ссылки ==
 
== Полезные ссылки ==
 
 
[http://en.cppreference.com/w/ cppreference.com] - полезный сайт-справочник по C++
 
[http://en.cppreference.com/w/ cppreference.com] - полезный сайт-справочник по C++
  
Строка 64: Строка 86:
 
[http://valloric.github.io/YouCompleteMe/ YouCompleteMe] - полезный плагин для Vim для автодополнения кода
 
[http://valloric.github.io/YouCompleteMe/ YouCompleteMe] - полезный плагин для Vim для автодополнения кода
  
[https://github.com/alzobnin/hse-cs-prog/tree/master/2016-1 Конспекты лекций] 2016 года (немного устарело)
+
[https://github.com/alzobnin/hse-cs-prog/tree/master/2016-2 Конспекты лекций] 2016 года (немного устарело)

Текущая версия на 18:06, 2 октября 2020

Основы и методология программирования - 2, основной поток, 2019/2020, 3 модуль

Страница первого модуля

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

Лекции: вторник и четверг, 2-я пара, R401

Телеграм-канал для объявлений: https://t.me/joinchat/AAAAAFUyg83J72MbQMOCPA

Краткое содержание лекций

1. Hello, world! Обзор примитивных типов. Условный оператор и циклы. Потоковый консольный ввод-вывод. Классы vector и string. (см. конспект 2016 года)
2. Классы string и vector (продолжение). Размер и ёмкость вектора. (см. конспект 2016 года)
3. Ошибки индексации вектора. Структуры. Сортировка вектора структур. Ссылки. Константность (см. конспект 2016 года)
4. Устройство вектора в памяти. Функции. Передача параметров по ссылке и по значению. Классы pair и tuple.
5. Ассоциативные массивы (map/set и unordered_map/unordered_set), двусвязный список (list) (см. конспект 2016 года и видеозапись экрана)
6. Deque, array, адаптеры stack, queue и priority_queue. Шаблонные функции. Алгоритмы стандартной библиотеки (см. конспект 2016 года и видеозапись экрана)
7. Алгоритмы стандартной библиотеки (продолжение). Инвалидация итераторов. (видеозапись экрана)
8. Алгоритмы стандартной библиотеки (завершение). Классы, жизненный цикл объектов. (см. конспект 2016 года и видеозапись экрана)
9. Классы: конструкторы, деструктор, функции-члены, перегрузка операторов. (см. конспект 2016 года и видеозапись экрана)
10. Шаблонные классы. Приватные и публичные имена. Генерация и обработка исключений. (видеозапись экрана)
11. Указатели и адресная арифметика. Создание объектов и массивов в динамической памяти. (см. конспект 2016 года и видеозапись экрана)
12. Идиома RAII. Умный указатель unique_ptr. (см. конспекты лекций 2016 года и видеозапись экрана)
13. Работа с байтами и памятью. (см. видеозапись экрана)
14. Наследование и полиморфизм.

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

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

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

Мы напишем 4 контрольных контеста и одну теоретическую работу.
1. Контрольная работа №1
2. Контрольная работа №2
3. Контрольная работа №3
4. Контрольная работа №4

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

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

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

Результат третьего модуля = 0.4 * контрольные + 0.3 * регулярные_контесты + 0.3 * экзамен

Итог: Округление(1/3 * результат первого модуля + 2/3 * результат третьего модуля)

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

Мы используем 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

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

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

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

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

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

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

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

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

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

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

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

Bandit - игра для освоения консольных команд Linux

Practical Vim - хороший учебник по Vim

YouCompleteMe - полезный плагин для Vim для автодополнения кода

Конспекты лекций 2016 года (немного устарело)