• A
  • A
  • A
  • ABC
  • ABC
  • ABC
  • А
  • А
  • А
  • А
  • А
Regular version of the site

Introduction to Programming

2020/2021
Academic Year
RUS
Instruction in Russian
9
ECTS credits
Course type:
Compulsory course
When:
1 year, 1, 3 module

Instructors


Боголюбский Алексей Константинович


Zobnin, Alexey


Кравчук Никита Валерьевич


Кузнецов Максим Анатольевич


Kucherenko, Demid


Лосев Владимир Александрович


Ляшко Андрей Сергеевич


Михеев Александр Георгиевич


Наймушин Вячеслав Иванович


Нигматуллин Ранис Нафисович


Нурлыбай Дархан


Погодина Екатерина Валерьевна


Popov, Maksim


Сабянин Максим Анатольевич


Филиппов Антон Сергеевич


Шаклеин Денис Андреевич


Шевченко Дмитрий Васильевич

Программа дисциплины

Аннотация

Курс состоит из двух частей. В первой части студенты изучают Python - высокоуровневый интерпретируемый язык программирования, популярный в области машинного обучения и анализа данных. Эта часть проходит в blended-формате с использованием онлайн-курса. Вторая часть посвящена основам языка C++. Курс опирается на последний стандарт C++17. Вначале изучаются контейнеры, итераторы и алгоритмы стандартной библиотеки, и лишь затем - работа с памятью и указатели. Значительное время уделяется философии работы с ресурсами в C++. Студентам предлагается большой объём практических заданий, проверяемых автоматически и затем рецензируемых вручную. Обе части курса не затрагивают многопоточность.
Цель освоения дисциплины

Цель освоения дисциплины

  • Знание и практическое применение языков Python и С++ в объёме, достаточном для реализации алгоритмов из курса "Алгоритмы и структуры данных"
Планируемые результаты обучения

Планируемые результаты обучения

  • Умеет установить интерпретатор Python и выполнить код с его помощью
  • Умеет считывать введённые пользователем данные и выводить результаты работы программы
  • Понимает структуру кода на питоне: переносы строк, отступы, разделители; знает основные операторы языка
  • Знает основные типы данных в питоне (булев тип, целые числа, числа с плавающей точкой, строки), умеет писать код, выполняющий арифметические операции и базовые операции со строками
  • Понимает концепцию работы переменных в питоне, умеет объявлять переменные и использовать их в коде
  • Понимает принципы ветвления кода, умеет писать код с использованием условного оператора
  • Понимает концепцию циклов, умеет писать код с использованием конструкций for и while
  • Понимает концепцию функций в языках программирования, умеет задавать функции, использовать аргументы в теле функций, вызывать функции
  • Понимает концепцию рекурсии и умеет использовать её для решения соответствующих задач
  • Знает основные структуры данных в питоне: кортежи, списки, множества и словари; умеет реализовывать в коде операции с ними
  • Понимает концепцию поиска в структуре данных и сортировки структуры данных, умеет подобрать правильную структуру данных для задачи, умеет реализовать алгоритмы поиска и сортировки
  • Умеет работать с файлами: читать и записывать информацию, обходить файлы на жёстком диске и работать с их именами, учитывать кодировку файла при взаимодействии с ним
  • Умеет работать со строками: искать подстроки, делать замены подстрок, объединять и делить строки, корректно учитывать кодировки строк
  • Знать основные контейнеры стандартной библиотеки C++
  • Знать основные алгоритмы стандартной библиотеки C++
  • Уметь работать с классами и объектами в C++
  • Знать модель работы с ресурсами в C++
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Язык программирования Python
    1. Целые числа и ввод-вывод. 2. Условный оператор. 3. Цикл while. 4. Вещественные числа и строки. 5. Функции и рекурсия. 6. Цикл for. 7. Списки. 8. Линейный поиск и сортировка. 9. Множества. 10. Словари. 11. Функциональное программирование. 12. Классы. 13. Знакомство со стандартной библиотекой языка Python.
  • Язык программирования C++
    1. Переменные, ввод и вывод, условный оператор, циклы, оператор switch. 2. Векторы и строки. Алгоритм sort. 3. Структуры. Классы pair и tuple. 4. Константность. Ссылки. Указатели. 5. Функции и лямбда-функции. Способы передачи и возврата параметров. 6. Ассоциативные контейнеры map и unordered_map. 7. Контейнеры list и deque. Адаптеры stack, queue и priority_queue. 8. Шаблонные функции. Алгоритмы стандартной библиотеки. 9. Битовые операции. Выражения, операторы. Перегрузка операторов. 10. Классы: публичный интерфейс и приватные детали реализации. Функции-члены. 11. Жизненный цикл объекта. Конструкторы, деструктор. Семантика перемещения. 12. Исключения. 13. Динамическая память. Динамические массивы. Null-terminated strings. 14. Работа с памятью. Сериализация и десериализация. 15. Идиома RAII. 16. Умные указатели unique_ptr и shared_ptr. 17. Одиночное наследование. Полиморфизм. Виртуальные функции. 18. Реализация шаблонного класса vector.
Элементы контроля

Элементы контроля

  • неблокирующий Домашняя работа 1
  • неблокирующий Домашняя работа 2
  • неблокирующий Домашняя работа 3
  • неблокирующий Домашняя работа 4
  • неблокирующий Домашняя работа 5
  • неблокирующий Домашняя работа 6
  • неблокирующий Домашняя работа 7
  • неблокирующий Домашняя работа 8
  • неблокирующий Домашняя работа 9
  • неблокирующий Домашняя работа 10
  • неблокирующий Домашняя работа 11
  • неблокирующий Домашняя работа 12
  • неблокирующий Экзамен
  • неблокирующий Контрольная работа 1 (C++)
  • неблокирующий Контрольная работа 2 (C++)
  • неблокирующий Контрольная работа 3 (C++)
  • неблокирующий Контрольная работа 4 (C++)
  • неблокирующий Домашнее задание (C++)
  • неблокирующий Экзамен (C++)
    Студенты сдают задания через Яндекс.Контест. Наблюдение через zoom. Они прямо в Контесте будут видеть задания и либо выбирать варианты ответа, либо вводить свой ответ. С Контестом они хорошо знакомы, они сдавали туда программы на автоматическую проверку во время учебы. Будет много отдельных соревнований в контесте, чтобы разным студентам доставался немного разный набор вопросов (и порядок вопросов). Преподаватель перед экзаменом может опубликовать гугл-таблицу, по которой студент сможет найти правильную ссылку на свое соревнование. Резервная дата 11 июня - вместе со студентами ИБ МИЭМа
Промежуточная аттестация

Промежуточная аттестация

  • Промежуточная аттестация (1 модуль)
    0.05 * Домашняя работа 1 + 0.05 * Домашняя работа 10 + 0.05 * Домашняя работа 11 + 0.05 * Домашняя работа 12 + 0.05 * Домашняя работа 2 + 0.05 * Домашняя работа 3 + 0.05 * Домашняя работа 4 + 0.05 * Домашняя работа 5 + 0.05 * Домашняя работа 6 + 0.05 * Домашняя работа 7 + 0.05 * Домашняя работа 8 + 0.05 * Домашняя работа 9 + 0.4 * Экзамен
  • Промежуточная аттестация (3 модуль)
    0.05 * Домашняя работа 1 + 0.05 * Домашняя работа 2 + 0.05 * Домашняя работа 3 + 0.05 * Домашняя работа 4 + 0.05 * Домашняя работа 5 + 0.05 * Домашняя работа 6 + 0.05 * Домашняя работа 7 + 0.05 * Домашняя работа 8 + 0.1 * Контрольная работа 1 (C++) + 0.1 * Контрольная работа 2 (C++) + 0.1 * Контрольная работа 3 (C++) + 0.1 * Контрольная работа 4 (C++) + 0.2 * Экзамен
Список литературы

Список литературы

Рекомендуемая основная литература

  • Lutz, M. (2008). Learning Python (Vol. 3rd ed). Beijing: O’Reilly Media. Retrieved from http://search.ebscohost.com/login.aspx?direct=true&site=eds-live&db=edsebk&AN=415392
  • Липпман С., Лажойе Ж. - Язык программирования С++. Полное руководство - Издательство "ДМК Пресс" - 2006 - 1105с. - ISBN: 5-94074-040-5 - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/1216

Рекомендуемая дополнительная литература

  • Matthes, E. Python crash course: a hands-on, project-based introduction to programming. – No Starch Press, 2015. – 562 pp.
  • Дейл Н., Уимз Ч., Хедингтон М. - Программирование на С++ - Издательство "ДМК Пресс" - 2007 - 672с. - ISBN: 5-93700-008-0 - Текст электронный // ЭБС ЛАНЬ - URL: https://e.lanbook.com/book/1219