Программа вступительного экзамена в магистратуру экономического факультета НГУ по дисциплине программирование

Вступительный экзамен по дисциплине «Программирование» состоит из письменной и устной (в форме собеседования) частей. Общая сумма баллов, которую можно набрать по экзамену – 100 баллов.

Устная часть экзамена (собеседование) содержит следующие тематические блоки
1. Образовательный бэкграунд – до 10 баллов
2. Мотивация к обучению на магистерских программах ЭФ НГУ, наличие исследовательских интересов, состояние исследований в интересующей области, профессиональный и практический опыт (при наличии), наличие идей для исследовательской и практической деятельности – до 30 баллов.

На письменной части экзамена, направленной на проверку общего уровня подготовки по программированию, можно набрать до 60 баллов.

ПРОГРАММА ДЛЯ ПОДГОТОВКИ К ПИСЬМЕННОЙ ЧАСТИ ЭКЗАМЕНА ПО ПРОГРАММИРОВАНИЮ
Содержание
Начало программирования. Программирование. Языки программирования. Язык Python. Задачи анализа данных. IDLE. Интерактивный режим. Структура программы. Строки. Комментарии. Переменные и оператор присваивания. Типы данных. Строковые литералы. Символьные последовательности. Конкатенация строк. Строки документирования. Типы числовых данных. Целые. Длинные целые. Числа с плавающей точной. Символы таблицы ASCII. Выражения. Арифметические выражения. Преобразование типов. Использование функций и модулей. Вызовы функций. Параметры и возвращаемые значения. Математический модуль. Основной модуль.
Управляющие инструкции: ветвление
Форматный вывод. Условные инструкции. Логический тип. Сравнения и логические выражения. Односторонние и многострочные условные инструкции. Блочное представление кода. Уровни вложенности программного кода. Разделители блоков. Правила оформления отступов. Логические операторы и составные логические выражения. 
Управляющие инструкции: циклы
Выполнение оператора заданное количество раз. Итераторы. Диапазоны. Циклы с параметром. Ошибки определения диапазонов. Определение шага изменения управляющей переменной цикла.  Условные итерации. Цикл с условием. Структура и поведение циклов. Принудительное завершение исполнения циклов. Случайные числа.
Строки.  Структура строк. Доступ к символам и подстрокам в строках. Срезы. Разрезание на подстроки. Шифрование данных. Строки и системы счисления. Преобразования в системах счисления. Строковые методы. 
Файлы и исключения. 
Текстовые файлы. Текстовые файлы и их формат. Запись текста и чисел в файл. Чтение данных из файла. Доступ и управление файлами и каталогами на диске. Контекстные менеджеры with/as. Обработка исключений. Инструкции try/except/else. Инструкции try/finally. Инструкции raise, assert. Вложенные обработки исключений. Идиомы исключений.
Функции как механизмы абстракции. Процедурная декомпозиция. Устранение избыточности. Скрытие сложности. Решение задач с нисходящим проектированием. Текстовый анализ. Генератор предложения. Управление пространством имен программы. Время жизни переменных. Локальные и глобальные переменные. Области видимости. Аргументы и разделяемые ссылки. Значение по умолчанию в параметрах. 
Списки и кортежи. Литералы списков. Базовые операции со списками. Списочные выражения. Индексы. Срезы. Матрицы. Методы работы со списками. Обход части последовательности. Изменение списков. Генерирование индексов и элементов. Литералы кортежей. Базовые операции с кортежами. Присваивание кортежа в цикле. Сравнительный анализ списков и кортежей. 
Множества и словари. Литералы множеств. Неупорядоченные последовательности: Множества.  Отношение между множествами и словарями. Литералы словарей. Базовые операции со словарями. Методы работы со словарями. Особенности использования словарей. Использование словарей в качестве записей. Ссылки и копии объектов. Сравнение, равенство, истина. Сравнение словарей. Объект None. Конструирование словаря. Реализации списка множеств и словарей. Анализ сложности реализаций списка множеств и словарей. Хеширование. Хеширование в реализации словарей. Хеширование в реализации множеств. Упорядоченные множества и словари.
Рекурсия. Итеративные и рекурсивные подходы. Прямая рекурсия. Косвенная рекурсия. Классические рекурсивные алгоритмы. Трассировка рекурсивной функции. Использование рекурсивных определений. Бесконечная рекурсия. Преимущества рекурсии.
Работа с файловой системой. os и os.path пути и имена. Операции с файловой системой. Применение рекурсивных алгоритмов. 
Классы и объекты. Объекты. Классы. Атрибуты. Методы. Наследование. Полиморфизм. Инкапсуляция. Множество экземпляров. Определения метода.  Метод __init__ и переменные экземпляра. Метод __str__. Время жизни объектов. Правила для определения простого класса. Примеры моделирования данных. Дерево классов. Рациональные числа. Арифметика рационального числа и перегрузка. Сравнения и метод __cmp__. Равенство и метод __eq__. Структурирование классов с наследованием и полиморфизмом. Иерархии наследования.  Полиморфные методы. Абстрактные классы. Многократное использование программного кода.
Графические интерфейсы (GUI). Событийно-управляемое программирование. Разработка простых программ с использованием GUI-интерфейса. Метки. Изображения. Кнопки и события ответа Поля ввода текста. Диалоговые окна. События по нажатию мыши. События клавиатуры.
Функциональное программирование.
Передача функций в качестве параметров. Функции внутри других функций. Функции-обертки. Функции map, filter. Анонимные функции. Примеры lambda-выражений. Модуль futctools. Использование метода partial. Работа со списочными выражениями.
Декораторы.
Назначение декораторов. Синтаксический сахар. Сложные примеры декораторов. Использование нескольких декораторов.
Генераторы.
Назначение генераторов. Механизм работы генератора. Особенности использования инструкции yield. Примеры применения генераторов. Передача параметров генератору.
Объектно-ориентированное программирование. Классы и экземпляры
Классы, объекты, экземпляры. Правила описания класса. Инициализация. Методы строкового представления. Работа с атрибутами объектов. Атрибуты классов. Строки документирования классов. Конструкторы экземпляров класса.  
Методы классов.
Объявления и вызовы методов. Методы класса @classmethod. Статические методы @staticmethod.  Декораторы методов. .setter, .getter, .deleter. Практика описания классов.
Наследование. Композиция классов.
Принципы наследования. Функция super(). Классы-наследники. Примеры композиции классов.  
Классы исключений и их обработка. Генерация исключений.
Виды исключений. Класс BaseException. Примеры AttributeError, IndexError, KeyError, TypeError. Иерархия классов исключений. Генерация исключений. Примеры исключений.
Магические методы классов. Итераторы. Контекстные менеджеры.
Назначение магических методов. Примеры использования и переопределения магических методов. Классы-декораторы. Итераторы. Контекстные менеджеры. Примеры использования итераторов и контекстных мененджеров.
Механизмы работы классов. Дискрипторы. Метаклассы.
Назначение дискрипторов. Примеры использования дискрипторов. Механизмы работы классов. Метоклассы.  
Регрессионный анализ
Построение ковариационных матриц.  Построение линейных регрессий. Оценка качества регрессии. Прогнозирование линейных регрессий, в том числе и многофакторных. 


Литература:
1. Шелудько, В.М. Язык программирования высокого уровня Python: функции, структуры данных, дополнительные модули / В.М. Шелудько ; Министерство науки и высшего образования РФ, Южный федеральный университет, Институт компьютерных технологий и информационной безопасности. – Ростов

-на-Дону ; Таганрог : Южный федеральный университет, 2017. – 108 с. : ил. – Режим доступа: по подписке. – URL: https://biblioclub.ru/index.php?page=book&id=500060 (дата обращения: 12.11.2020). – Библиогр. в кн. – ISBN 978-5-9275-2648-2. – Текст : электронный.

2. Шелудько, В.М. Основы программирования на языке высокого уровня Python : учебное пособие / В.М. Шелудько ; Министерство науки и высшего образования РФ, Южный федеральный университет, Инженерно-технологическая академия. – Ростов-на-Дону ; Таганрог : Южный федеральный университет, 2017. – 147 с. : ил. – Режим доступа: по подписке. – URL: https://biblioclub.ru/index.php?page=book&id=500056 (дата обращения: 12.11.2020). – Библиогр. в кн. – ISBN 978-5-9275-2649-9. – Текст : электронный.

3. Буйначев, С.К. Основы программирования на языке Python : учебное пособие / С.К. Буйначев, Н.Ю. Боклаг ; Уральский федеральный университет им. первого Президента России Б. Н. Ельцина. – Екатеринбург : Издательство Уральского университета, 2014. – 92 с. : табл., ил. – Режим доступа: по подписке. – URL: https://biblioclub.ru/index.php?page=book&id=275962 (дата обращения: 12.11.2020). – Библиогр. в кн. – ISBN 978-5-7996-1198-9. – Текст : электронный.

4. Густокашин М. Основы программирования на Python / М: Высшая школа экономики, 2017 (URL: https://www.coursera.org/learn/python-osnovy-programmirovaniya)

5. Эконометрия : учебник для студентов высших учебных заведений, обучающихся по направлению "Экономика" / В.И. Суслов, Н.М. Ибрагимов, Л.П. Талышева, А.А. Цыплаков ; отв. ред. Г. М. Мкртчян ; М-во образования и науки Рос. Федерации, Федер. агентство по образованию, Новосиб. гос. ун-т, [Экон. фак.], Нац. фонд подгот. кадров .— Новосибирск : Изд-во СО РАН, 2005 .— 743 с. (53 экз.). Рекомендовано УМО по классическому университетскому образованию в качестве учебника для студентов высших учебных заведений, обучающихся по направлению «Экономика».

Формат письменной части экзамена.
Письменная часть экзамена предполагает использование компьютера. Абитуриенту будут даны условия задачи и исходные данные. Нужно будет используя любые языки программирования решить задачи и приложить ответ и код, приводящий к решению.