ОиМП-2015

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

Основы и методология программирования, 2015 год, базовый поток, 1-2 модули

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

Лекции: вторник (еженедельно), 1-я пара, ауд. 622;
пятница (четные недели), 1-я пара, ауд. 622.


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

Контрольная работа №2 (C++)

Работа состоится на неделе после 16 ноября.

Переписывание контрольной работы №2 состоится 5 декабря на четвёртой паре (в 13:40). Аудитории: 503, 513, 412, 327. Собираемся у аудитории 503!

Оценка за переписывание (для тех, кто уже писал основной вариант контрольной) ставится по следующей схеме:

   3 задачи - не более 7 баллов
   2 задачи - не более 6 баллов
   1 задача - не более 4 баллов

Экзамен

Экзамен по курсу состоится в среду, 23 декабря. Продолжительность экзамена - 2 часа.

Формула максимально возможной оценки: 2 + 2n (где n - количество успешно сданных в систему задач), если n > 0.

Распределение групп по аудиториям:

Первая смена: 10:00

152-1 501
152-2 503
154-1 505
154-2 513
155-1 327
155-2 301

Вторая смена: 12:20

156-1 501
156-2 503
157-1 505
157-2 513
158-1 327
158-2 301



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


Домашние задания

  • [Домашняя работа №3] Старт - 4 декабря после 1-й пары (в 10:20). Дедлайн - понедельник, 14 декабря (включительно).

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


   def generate(key, problems=4, variants=4):
       r = 0
       for c in key:
           r += ord(c)
       result = []
       for j in range(problems):
           result.append(chr(ord('A') + j) + str(r % variants + 1))
           r //= variants
       return result

В качестве ключа укажите ей свой логин от системы Яндекс.Контест + пробел + пароль от системы Яндекс.Контест.

В некоторых группах (по усмотрению преподавателей) решения следует сдавать непосредственно в систему [Anytask] (в третьем домашнем задании у файлов должно быть расширение .h). Получить инвайт для регистрации в этой системе вы можете у преподавателей своей группы.


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

  • 04.09.2015. Hello, world! Интерпретатор python в режиме калькулятора. Арифметические операции. Типы int, float, complex, bool. Функции print и input. Строки. Списки. Функция len. Срезки в строках и списках. Функции split и join. Итерация с помощью цикла for. [Код, написанный на лекции (по техническим причинам использовали python2)].
  • 08.09.2015. Цикл for. Функция range. Цикл while. Условный оператор if/elif/else. Раздел else в циклах. Кортежи, словари и множества. Задача о частотном словаре символов в строке. [Код, написанный на лекции]
  • 11.09.2015. Чтение строк из стандартного ввода с помощью sys.stdin. Задача о частотном словаре слов. Функции. Функция map. Сортировка списка по указанному ключу. Лямбда-функции. [Код, написанный на лекции]
  • 15.09.2015. Еще раз о сортировке по ключам и лямбда-функциях. Двумерные массивы (списки списков). Транспонирование матрицы. Функция zip. Функции с переменным числом аргументов и именованные параметры. [Код, написанный на лекции]
  • 22.09.2015. Модуль itertools: функции permutations, combinations, product, cycle. Генераторы и оператор yield. Модуль collections и классы defaultdict и Counter. [Код, написанный на лекции]
  • 25.09.2015. Модуль re и знакомство с регулярными выражениями. Модуль urllib.request и скачивание ресурсов из сети. Модуль datetime. Форматированный вывод с помощью str.format. [Код, написанный на лекции]
  • 29.09.2015. Пространства имен. Классы и объекты в python'е. [Код, написанный на лекции]
  • 06.10.2015. Разбор первого домашнего задания. Дзен питона.
  • 09.10.2015. C++: ввод-вывод, условный оператор, циклы, оператор switch. Знакомство с std::vector. [Код, написанный на лекции]
  • 13.10.2015. Шаблон std::vector. [Код, написанный на лекции]
  • 20.10.2015. Приоритет операторов. Функции. Передача параметров в функции по константной ссылке. [Код, написанный на лекции]
  • 22.10.2015. Структуры. Сортировка с пользовательской функцией сравнения. Оператор sizeof. Стек и динамическая память (куча). Указатели. [Код, написанный на лекции]
  • 03.11.2015. Выделение и освобождение динамической памяти. Низкоуровневые массивы. Null-terminated strings. [Код, написанный на лекции]
  • 06.11.2015. Null-terminated strings, функции strlen и strcpy. Сравнение статических массивов, динамических массивов и обёрток над ними (std::string, std::vector). [Код, написанный на лекции]
  • 10.11.2015. Итераторы и их аналогия с указателями. Контейнер std::map. [Код, написанный на лекции]
  • 17.11.2015. Разбор второго домашнего задания.
  • 20.11.2015. Шаблонные функции. Алгоритмы стандартной библиотеки. [Код, написанный на лекции]
  • 24.11.2015. Алгоритмы стандартной библиотеки (продолжение). [Код, написанный на лекции]
  • 01.12.2015. Классы. Пример: класс "Комплексное число". [Код, написанный на лекции]
  • 04.12.2015. Шаблонные классы. Пример: класс "Квадратная матрица". [Код, написанный на лекции]
  • 08.12.2015. Класс "Квадратная матрица" (продолжение). Исключения. [Код, написанный на лекции]
  • 15.12.2015. Идиома RAII. Семантика перемещения. [Код, написанный на лекции]
  • 18.12.2015. Разбор третьего домашнего задания.

Код, написанный на лекциях, доступен также [здесь].


Контесты для семинаров

Обратите внимание, в последних контестах включен чекер cpplint проверки кода на соответствие стилю.

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

Часто задаваемые вопросы

Можно ли использовать на семинарах свой ноутбук?
Да, мы этого не запрещаем.

В какой среде лучше писать программы для python'а?
В компьютерных классах можно запустить PyCharm (выбирайте при создании проекта python 3!), ipython3 notebook, IDLE (под Windows), а также просто написать код программы в произвольном текстовом редакторе (например, vim :) и запустить из терминала с помощью python3 <имя_файла>. Выбирайте любую среду на свой вкус.


Расписание семинаров

Подгруппа Преподаватель Расписание семинаров Учебные ассистенты
152-1 Зобнин Алексей Игоревич вторник, 2-я пара, ауд. 501;
пятница, 1-я пара, ауд. 501 (нечетные недели);
пятница, 2-я пара, ауд. 501
Андрей Атанов
152-2 Кондратьев Андрей Владимирович понедельник, 2-я пара, ауд. 513 (нечетные недели);
понедельник, 3-я пара, ауд. 513;
вторник, 2-я пара, ауд. 503
Валерий Гиркин
154-1 Макаров Илья Андреевич понедельник, 5-я пара, ауд. 505;
четверг, 3-я пара, ауд. 503;
четверг, 5-я пара, ауд. 503 (нечетные недели)
Владимир Гончаров
154-2 Умнов Алексей Витальевич вторник, 3-я пара, ауд. 501;
среда, 3-я пара, ауд. 501;
среда, 4-я пара, ауд. 501 (нечетные недели)
Олег Конопля
155-1 Дектярев Михаил Владимирович понедельник, 2-я пара, ауд. 503;
среда, 1-я пара, ауд. 503 (нечетные недели);
среда, 2-я пара, ауд. 503
Александр Тиунов
155-2 Мельничук Павел Владимирович понедельник, 2-я пара, ауд. 505;
среда, 1-я пара, ауд. 301 (нечетные недели);
среда, 2-я пара, ауд. 301
Александр Тиунов
156-1 Синицын Филипп Геннадьевич среда, 2-я пара, ауд. 605;
среда, 3-я пара, ауд. 301 (нечетные недели);
четверг, 1-я пара, ауд. 501
Максим Сабянин
156-2 Умнов Алексей Витальевич вторник, 4-я пара, ауд. 501;
вторник, 5-я пара, ауд. 501 (нечетные недели);
среда, 2-я пара, ауд. 327
Олег Конопля
157-1 Густокашин Михаил Сергеевич понедельник, 2-я пара, ауд. 501;
вторник, 3-я пара, ауд. 327;
вторник, 4-я пара, ауд. 327 (нечетные недели)
Валерий Гиркин
157-2 Цетлин Сергей Витальевич вторник, 4-я пара, ауд. 301;
вторник, 5-я пара, ауд. 505 (нечетные недели);
четверг, 3-я пара, ауд. 327
Андрей Атанов
158-1 Вельтищев Дмитрий Николаевич среда, 1-я пара, ауд. 513;
среда, 2-я пара, ауд. 420 (нечетные недели);
четверг, 1-я пара, ауд. 513
Максим Сабянин
158-2 Строк Федор Владимирович четверг, 1-я пара, ауд. 505;
суббота, 1-я пара, ауд. 513;
суббота, 2-я пара, ауд. 513 (нечетные недели)
Владимир Гончаров


Список студентов с разбиением по группам: http://www.hse.ru/ba/ami/studentlist