C.Ю.Соловьев
Программирование
для студентов третьего курса факультета математики ГУ-ВШЭ
"Программирование" - базовый курс программирования на языках высокого уровня для студентов, специализирующихся в области математики.
Его пререквизиты - курсы дискретной математики, линейной алгебры и математического анализа. Курс преподается на русском языке.
Акцент в курсе делается на практическом освоении программирования на языке С++.
Основные конструкции языка иллюстрируются на примерах классических вычислительных задач.
Кроме того, значительное внимание в курсе уделяется технологиям программирования, вообще, и объектно-ориентированному программированию в частности.
Содержание курса
- Введение в программирование
- Устройство компьютера: схема, устройства ввода и вывода, внутренняя и внешняя память, центральный процессор.
- Оперативная память: ячейки, адреса ячеек, размер ячеек.
- Машинное представление данных: представление целых и вещественных чисел, точность представления целых и вещественных чисел, представление символьной информации.
- Машинная программа: смысл и формат команд, система команд.
- Введение в язык программирования C++
- Язык C++: история, назначение, области применения, стандарт языка.
- Программы на языке С++: запись программ, имена, переменные и константы, стиль записи программ.
- Вывод на экран, ввод с клавиатуры.
- Практикум:
- Среда программирования.
- Компилирование и выполнение программ.
- Программа "Hello World".
- Вычисления на языке C++
- Арифметические и логические операции.
- Операция присваивания.
- Отношения.
- Условный оператор if-else.
- Битовые и адресные операции.
- Приоритеты и ассоциативность операций.
- Практикум:
- Вычисления по формулам.
- Программа вычисления корней квадратного уравнения.
- Тестирование программ.
- Итерационные вычисления на языке C++
- Операторы цикла: while и do-while.
- Составной оператор
- Операторы break, continue и return.
- Практикум:
- Программа решения уравнений методом касательных.
- Программа решения уравнений методом хорд.
- Матричные и векторные вычисления на языке C++
- Массивы: определение и размещение в памяти, индексация элементов массива.
- Оператор цикла for
- Практикум:
- Алгоритмы суммирования, поиска и сортировки.
- Алгоритмы решения систем линейных уравнений.
- Алгоритмы вычисления собственных значений.
- Алгоритмы вычисления обратной матрицы.
- Обзор операторов языка С++
- Оператор/операция присваивания: ++, += и т.д.
- Оператор-выражение vs. Cоставной оператор.
- Метки.
- Управляющие операторы goto и switch.
- [повт] Условный оператор if-else.
- [повт] Операторы цикла while, do-while и for.
- [повт] Операторы break, continue и return.
- Структурное программирование.
- Функции в языке С++
- Объявление функции: имя функции, аргументы функции, тип результата.
- Вызов функции.
- Необязательные аргументы функции, значения по умолчанию.
- Определение функции: заголовок функции, тело функции, оператор return.
- Стандартные функции языка С++.
- Рекурсивные функции.
- Практикум:
- Схема Горнера для вычисления значения полинома.
- Алгоритм численного интегрирования методом прямоугольников.
- Алгоритм численного интегрирования методом трапеций.
- Рекурсивная функция sin(x).
- Производные типы данных
- [повт] Массивы.
- Структуры; битовые поля.
- Объединения.
- Указатели: массивы и указатели, адресная арифметика, бестиповый указатель, нулевой указатель.
- Строки и литералы.
- Распределение памяти: автоматическое, статическое, динамическое.
- Ссылки: распределение памяти при передаче аргументов функции, правила передачи аргументов.
- Практикум:
- Структуры данных для представления бинарных деревьев поиска.
- Сложность алгоритмов
- Оценка сложности алгоритмов в худшем случае и в среднем.
- Операции поиска, вставки и удаления в деревьях поиска.
- Сложность операции поиска в деревьях поиска.
- Построение дерева поиска.
- Сбалансированные деревья поиска; сложность операций вставки и удаления.
- AVL-деревья; сложность операций вставки и удаления.
- Практикум:
- Алгоритм построения дерева поиска.
- Алгоритм поиска в дереве поиска.
- Алгоритм построения AVL-дерева.
- Принципы объектно-ориентированного программирования
- Понятие объекта: имя объекта, данные и методы.
- Конструкторы и деструкторы.
- Принципы объектно-ориентированного программирования:
- Инкапсуляция - совмещение / сокрытие в одном объекте данных и методов их обработки.
- Наследование - создание новых объектов, автоматически приобретающих данные и методы определённых ранее объектов.
- Полиморфизм - переопределение семантики операций в иерархии объектов.
- Средства поддержки инкапсуляции.
- Средства поддержки наследования.
- Средства поддержки полиморфизма.
- Практикум:
- Объект для представления комплексных чисел.
- Объектно-ориентированное программирование в языке C++
- Класс, тип и объект в языке C++.
- Контроль доступа к объекту; доступ по чтению и по записи.
- Оптимизация записи простых методов.
- Переопределение операций.
- Производные классы, наследование: виртуальные методы, преобразование базового и производного классов, внутреннее и защищенное наследование.
- Абстрактные классы.
- Инициализация объектов.
- Множественное наследование; виртуальное наследование.
- Практикум:
- Система объектов для геометрических фигур.
- Управление объектами в языке С++
- Операции new и delete.
- Преобразования типов: явные преобразования типов, стандартные преобразования типов, преобразования указателей и ссылок, преобразования типов, определенных в программе.
- Динамическое определение типов.
- Указатели на элементы класса.
- Практикум:
- Вычисления на графах.
- Ввод-вывод в языке С++
- Потоки; манипуляторы и форматирование ввода-вывода.
- Строковые потоки.
- Ввод-вывод файлов.
- Практикум:
- Алгоритмы обработки текстовых файлов.
- Шаблоны в языке С++
- Функции-шаблоны.
- Шаблоны классов; задание свойств класса.
- Практикум:
- Программирование для баз данных.
- Библиотеки классов в языке С++
- Многократное использование функций и классов.
- Принципы построения библиотеки классов.
- Библиотека классов Tools.h++
- Стандартная библиотека шаблонов STL: коллекции и алгоритмы, итераторы, моделирование концепций.
- Стандартная библиотека языка Си++.
- Классы исключительных ситуаций.
- Стандартная библиотека ввода-вывода потоков.
- Практикум:
- Программирование веб-приложений.
Основная литература
- Страуструп Б. Язык программирования С++. Специальное издание. - СПб.: Бином, Невский диалект, 2008.
- Марченко А.Л. C++. Бархатный путь. - М.: Горячая линия - Телеком, 2005.
- Фридман А.Л. Основы объектно-ориентированного программирования на языке Си++. - М.: Горячая линия - Телеком, Радио и связь, 1999.
- Форд А.Р., Теори Т.Дж. Практическая отладка в С++. - М.: КУДИЦ-ОБРАЗ, 2002.
Дополнительная литература
- Страуструп Б. Дизайн и эволюция С++. - СПб.: ДМК-Пресс, 2006.
- Культин Н.Б. C/C++ в задачах и примерах. - СПб.: БХВ-Петербург, 2009.
- Тан К.Ш., Стиб В.-Х., Харди Й. Символьный С++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования. - М.: Мир, 2001.
- Топп У., Форд У. Структуры данных в С++. - М.: ЗАО "Издательство БИНОМ", 2000.
- Давыдов В.Г. Технологии программирования. С++. - СПб.: БХВ-Петербург, 2005.
- Мейерс С. Эффективное использование C++. - М.: ДМК Пресс; СПб.: Питер, 2006.
- Березин И.С., Житков Н.П. Методы вычислений. т.1,2 - М.: Гос. изд-во физ-мат литературы, 1962.
- Кристофидес Н. Теория графов. Алгоритмический подход. - М.: Мир, 1978.
Вопросы?