Основы и методология программирования 2016/2017 пилотный поток/161-2

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Контакты семинариста

Почта finisterra@yandex.ru
VK vk.com/finisterra
Телефон +7(915)004-91-33
Telegram lastearth

Контакты ассистента

Почта tiunovas@mail.ru
VK https://vk.com/id144882148
Telegram astiunov

Контест с дополнительными задачами: https://official.contest.yandex.ru/contest/2868/enter/.

Семинар 05.09.2016

HelloWorld на C++. Знакомство с linux. Основные команды, которые следует освоить:

  • ls
  • cd
  • vim
  • g++

Также стоит посмотреть на команды

  • man
  • cat
  • less
  • grep

и попрактиковаться в перенаправлениях потоков.

Семинар 07.09.2016

Решение задач.

  • числа Фибоначчи
  • ASCII-таблица
  • Треуголник Паскаля
  • Быстрое возведение в степень
  • Непарное число

Типичные ошибки и замечания по style guide'у:

  • именование переменных
  • инициализация переменных при создании

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

Семинар 12.09.2015

Решение задач.

  • Утилита head (ввод-вывод)
  • gcd (работа с функциями)
  • Частоты символов (ввод-вывод и вектор)
  • Транспонирование матрицы (вектора векторов)

К среде надо подготовиться к контрольной по вводу-выводу, базовым конструкциям языка, циклам и функциям. Также советую познакомится с интерфейсом Яндекс.Контеста на примере тренировочного набора задач.

Семинар 14.09.2015

Контрольная работа №1

Домашнее задание: разбиться на пары и прислать мне на почту ревью кода напарника по всем отправленным на КР задачам. Принимается вплоть до полуночи воскресенья, то есть до конца недели.

ФИО Оценка Прислал ревью
Алейкин Сергей Дмитриевич 10 +
Бобровский Артемий Андреевич 6 +
Васильев Олег Юрьевич 10
Грицаев Матвей Григорьевич 4 +
Дрынкин Роберт Робертович 6
Ершов Олег Владиславович 6 +
Кочергин Владислав Константинович 8 +
Лавренов Николай Артемович 10 +
Лавритов Дмитрий Ильич 6 +
Семенов Михаил Александрович 4 +
Усов Федор Андреевич 6 +
Якунчева Ирина Юрьевна 8 +


Семинар 19.09.2016

Ассоциацивные массивы. Языковая статистическая модель. N-граммы.

Код, написанный на семинаре.

Дома попробуйте обучить модели по словам, а не по буквам. Также можно поэкспериментировать со смешением распределений по разным N.


Семинар 21.09.2016

Написание структур. Специализация std::less, std::equal_to, std::hash для своих структур. Шаблонные параметры std::map, std:set, std::unordered_map, std::unordered_set.

Задачи

  • поиск наиболее популярного квадрата на клетчатой плоскости по набору точек
  • обработка запросов "содержится ли точка хотя в одном отрезке из фиксированного набора"
  • проверка наличия вертикальной оси симметрии у набора точек


Семинар 26.09.2016

Написание шаблонных функций. Специализация шаблонных функций. Шаблонные параметры по умолчанию. Написание алгоритмов, аналогичных <algorithm>.

Задачи

  • transform
  • partition на ForwardIterator'ах
  • merge
  • lower_bound

В среду 28 сентября на первой паре, как всегда, будет контрольная по пройденным материалам.

Семинар 28.09.2015

Контрольная работа №2

Результаты контрольной:

ФИО Оценка Прислал ревью
Алейкин Сергей Дмитриевич 8
Бобровский Артемий Андреевич 6
Васильев Олег Юрьевич 0
Грицаев Матвей Григорьевич 6
Дрынкин Роберт Робертович 8
Ершов Олег Владиславович 6
Кочергин Владислав Константинович 8
Лавренов Николай Артемович 6
Лавритов Дмитрий Ильич 6
Семенов Михаил Александрович 8
Усов Федор Андреевич 4


Домашнее задание: как в прошлый раз, разбиться на пары и прислать мне на почту ревью кода напарника по всем отправленным на КР задачам. Принимается вплоть до полуночи воскресенья, то есть до конца недели.

Семинар 03.10.2016

Класс для работы с рациональными числами (не шаблон и шаблон). Конструкторы, список инициализации, const, перегрузка операторов, friend.

Код, написанный на семинаре.

Семинар 05.10.2016

Дополнительные применения шаблонов, классы типов, sfinae.

Код, написанный на семинаре.

Консультация 06.10.2016

Некоторые нововведения C++11. std::initializer_list, constexpr. Семантика перемещения: rvalue ссылки, move, forward.

Разобранное на консультации.

Домашняя работа

Распределение по вариантам:

ФИО A B C
Алейкин Сергей Дмитриевич 2 2 2
Бобровский Артемий Андреевич 1 1 1
Васильев Олег Юрьевич 2 1 2
Грицаев Матвей Григорьевич 1 2 2
Дрынкин Роберт Робертович 2 1 1
Ершов Олег Владиславович 1 2 2
Кочергин Владислав Константинович 1 2 2
Лавренов Николай Артемович 1 2 1
Лавритов Дмитрий Ильич 2 2 2
Семенов Михаил Александрович 1 1 2
Усов Федор Андреевич 2 2 1


Семинар 10.10.2016

Наследование. Базовый вариант наследования. Наследование от шаблонного класса. Реализация Singleton, DFSVisitor. Задачи:

  • ZeroInit
  • SerializableSet

Дома попробуйте реализовать иерархию классов для игры кошки-мышки. Должен быть базовый класс TGameObject, от него унаследованы TCat и TMouse. Объекты будут лежать в std::vector<TGameObject *>. Для отправки по сети они будут сериализовываться в строку и десериализовываться оттуда. Надо реализовать удобный механизм сериализации/десереализации для отправки объектов по сети. То есть по вектору объектов должно быть легко и удобно построить строку, содержащую их полное описание, а потом из строки собрать их обратно.

Hint: советую сделать в базовом классе три чисто виртуальных метода GetClassID, Serialize и Deserialize, а в детях их реализовать и продумать механизм их использования.

В среду на первой паре, как водится, будет контрольная по пройденному материалу.


Семинар 12.10.2016

Контрольная работа №3

ФИО Оценка
Алейкин Сергей Дмитриевич 7
Бобровский Артемий Андреевич 6
Грицаев Матвей Григорьевич 2
Дрынкин Роберт Робертович 6
Ершов Олег Владиславович 4
Кочергин Владислав Константинович 7
Лавренов Николай Артемович 7
Лавритов Дмитрий Ильич 6
Семенов Михаил Александрович 7
Синицын Богдан Игоревич 6
Усов Федор Андреевич 6
Якунчева Ирина Юрьевна 0

Разбор контрольной и реализация вектора. Код, написанный на семинаре: https://yadi.sk/d/wldfvEMfwgyh9

В субботу 15ого октября на второй паре в аудитории 503 будет переписывание контрольной. Допуск на переписывание выдает семинарист. Без допуска приходить нельзя. Если вы хотите переписать контрольную, свяжитесь со мной и согласуйте это.


Семинар 17.10.2016

Умные указатели, unique_ptr, shared_ptr, простая реализация shared_ptr. Юнит-тесты в коде. GTest: https://github.com/google/googletest

Код, написанный на семинаре: http://pastebin.com/bv7MzKJv

Результаты

Студент КР1 КР2 КР3 ДЗ Ауд. Накопл. Накопл. округл.
Алейкин Сергей Дмитриевич 10 8 7 10 10 9,17 9
Бобровский Артемий Андреевич 6 6 6 3 8 5,50 6
Грицаев Матвей Григорьевич 4 6 6 4 10 5,87 6
Дрынкин Роберт Робертович 6 8 6 0 8 4,93 5
Ершов Олег Владиславович 6 6 6 8 8 7,00 7
Кочергин Владислав Константинович 8 8 7 10 10 8,83 9
Лавренов Николай Артемович 10 6 7 9 10 8,53 9
Лавритов Дмитрий Ильич 6 6 6 4 8 5,80 6
Семенов Михаил Александрович 8 8 7 7 6 7,13 7
Синицын Богдан Игоревич 0 0 6 10 8 5,60 6
Усов Федор Андреевич 6 4 6 6 8 6,07 6
Халиков Даниил Альбертович 0 0 0 0 4 0,80 1
Якунчева Ирина Юрьевна 8 0 0 0 4 2,13 2