Методическое обеспечение курса «Технология программирования»
Курс переработан, и его страница перемещена по адресу
https://vk.com/mpei_uii_sdt.
Данная страница не обновляется и сохранена для удобства.
-
09.01.2014:
Напоминаем, что время присутствия преподавателей публикуется на соответствующей странице online журнала. К зачету следует готовиться.
-
23.12.2013:
Обновлен журнал и уточнены условия получения зачета.
-
16.12.2013:
Опубликованы бригадные задания на ЛР № 5 «Шаблоны С++ и стандартная библиотека шаблонов (STL)».
-
30.11.2013:
Опубликовано общее задание на ЛР № 5 «Шаблоны С++ и стандартная библиотека шаблонов (STL)».
-
28.11.2013:
- Опубликованы условия получения зачета.
- Добавлены иллюстрации операций над односвязным списком в помощь при выполнении ЛР № 4.
-
18.11.2013:
Опубликовано задание на ЛР № 4 «Структуры данных» и разобранная на занятии задача.
-
16.11.2013:
Опубликованы материалы лекции № 8 «Средства автоматизации разработки программ».
-
12.11.2013:
Опубликован авторский конспект лекции № 6 «Динамические структуры данных».
-
11.11.2013 00:15:
При выполнении ЛР № 3 допускается использовать код, представленный на занятии (копия), но тогда его необходимо пояснить комментариями:
- указать назначение всех методов от 3-х строк и более;
- привести случаи, когда может потребоваться конструктор копирования и оператор присваивания.
При неудовлетворительных объяснениях будут заданы дополнительные вопросы.
-
08.11.2013:
Опубликован авторский конспект и раздаточный материал к лекции № 7 «Шаблоны С++ и стандартная библиотека шаблонов».
-
26.10.2013:
Общее задание на ЛР № 3 уточнено во избежание непонимания (версия с подсвеченными изменениями). Для сдавших или начинавших сдавать решения по старому варианту: ваши решения будут приняты, но п. 3 задания должен быть реализован уже с учетом уточнений.
-
25.10.2013:
Опубликованы материалы к лекции № 5 по алгоритмам сортировки.
-
20.10.2013:
правила переписки по электронной почте иллюстрированы примерами.
-
18.10.2013:
опубликованы материалы лекции № 4.
Условия получения зачета:
- На оценку «отлично» необходимо целиком выполнить ЛР № 1—5.
- На оценку «хорошо» необходимо целиком выполнить ЛР № 1—4.
- На оценку «удовлетворительно» необходимо выполнить:
- ЛР №№ 1—3 целиком;
- по одному заданию, общему или бригадному, из ЛР № 4 и 5 (например, общее задание ЛР № 4 и бригадное задание ЛР № 5).
- При невыполнении требований на оценку «удовлетворительно» решение о приеме зачета выносится преподавателем на основе рейтинга успеваемости, формируемого по совокупности сданных заданий.
- Актуальный рейтинг успеваемости — в online журнале.
Организация
Курс посвящен языку C++, практическим аспектам программирования, алгоритмам и структурам данных.
- Будут лекции (8 шт. первую половину семестра) и лабораторные работы (8 шт. раз в 2 недели по 2 пары).
- В конце семестра будет крупное лабораторное задание в качестве зачета.
- Оценка за весь курс пойдет в диплом.
- Посещения лекций отмечаются, но во внимание принимаются только знания на лабораторных работах.
Об этой странице
На странице курса размещаются все нужные методические материалы: пособия, задания, списки литературы, актуальная информация. Обновления отмечаются «новостями» под заголовком. Если вы хотите предложить что-то добавить — сообщите преподавателям. Посещайте страницу регулярно, особенно в день перед занятиями, и знакомьтесь со всеми публикуемыми материалами.
Комментарии и предложения с благодарностью принимаются.
Нашли ошибку или опечатку? Выделите её и нажмите Ctrl + Enter. Спасибо!
Учебный процесс
Добавлен итоговый рейтинг и время приема зачетов. На случай опечаток оставлен доступ к старой версии.
Материалы для загрузки
Просматривать PDF можно online, если на рабочей станции нет Acrobat Reader. Перенос большей части материалов сразу на Google Docs планируется.
Лекции
-
Знакомство с языком C++ и его основы
-
Динамическая память и указатели. Ссылки. Строки C
-
Объектно-ориентированное программирование (ООП) в C++
-
Обработка ошибок и механизм исключительных ситуаций в C++
-
Алгоритмы сортировки
-
Динамические структуры данных
Авторский конспект
-
Шаблоны С++ и стандартная библиотека шаблонов (STL)
-
Средства автоматизации разработки программ
Лабораторные работы
-
Введение в язык C++ и его основы. Интегрированная среда разработки Code::Blocks
-
Динамическая память и указатели. Ссылки. Строки C
-
Объектно-ориентированное программирование (ООП) в C++
-
Демонстрационные проекты:
Strings
— основной пример для знакомства с ООП.
Expressions
— потребуется позже для одного из вариантов бригадных заданий. Пример объектно-ориентированной архитектуры.
PointersToMembers
— пример из авторского конспекта лекции.
- Общее задание
-
Бригадные задания
Для вариантов 14, 15 и 16 требуется подключение библиотек
libcurl
7.32.0,
libxml2
2.7.8 (также понадобится zlib1.dll
из архивов)
и libiconv
1.9.2 соответственно.
Ссылки даны на версии для ОС семейства Windows и компилятора GCC из состава MinGW (32 бита).
Для подключения библиотек в Code::Blocks следуйте инструкции (c примером).
-
Код с лабораторных занятий:
- А-02-11, от 11 октября 2013. Создан класс
Account
для представления банковского счета. Реализованы конструктор, деструктор и конструктор копирования. Мы остановились на том, что операция присваивания работает не так, как нужно, и требуется перегрузить её подобно копированию.
- А-01-11, от 18 октября 2013. Оператор присваивания, недостававший в предыдущем варианте, корректно перегружен. Создан класс
CreditAccount
и на его примере демонстрируется полиморфизм и виртуальные методы. В качестве примера чисто абстрактного класса (интерфейса) заведен тип Printable
.
Если брать этот код за основу для общего задания, перемещайте реализацию методов в отдельный файл Account.cpp
, а объявление класса — в Account.h
(на занятии мы просто экономили время и место), и так для всех классов.
-
Структуры данных
-
Шаблоны и STL
Требования
Сдача заданий и защит
Работа считается сданной, если за нее в журнале стоит оценка. Повышать оценку можно, досдавая и исправляя задания в течение семестра (но если по каким-либо причинам оценка ограничена сверху, это сохраняется). Зачетная оценка учитывает и текущую оценку, и оценку в срок.
По первой лабораторной работе необходимо сдать индивидуально защиту, включающую:
- Решение теоретической задачи.
-
На выбор, одно из двух:
- ответ на 2 теоретических вопроса;
- решение практической задачи и пояснение кода.
Членам бригады желательно выбрать разное, чтобы не мешать друг другу.
Студент получает номера вопросов (вариантов) из заранее опубликованных списков и может готовиться при помощи любых средств.
По каждой следующей лабораторной работе необходимо:
- Выполнить практическое задание (для бригады).
- В устной беседе пояснить решение практического задания (индивидуально).
К лабораторной работе не допускаются бригады, в которых хотя бы у одного участника не сдано две и более прошедших работы (кроме пропусков по уважительной причине, конечно же).
При пропуске предшествующего занятия или при опоздании более, чем на 30 минут, для участия в занятии требуется допуск из деканата.
Оформление кода
Предъявляемый для проверки код должен быть аккуратно и единообразно оформлен: переменным даны осмысленные имена, блоки кода выделены отступами и т. п. Правила, как именно это делать, называются соглашениями о кодировании. Вот некоторые популярные:
Неряшливо оформленный код проверяться не будет!
Средства разработки
Рекомендованные
GNU Compiler Collection (gcc) — компилятор и компоновщик
GCC — это бесплатный и открытый кросплатформенный набор средств для компиляции и отладки для различных языков программирования. Установка в ОС семейства *nix описана в документации на сайте (обычно уже есть в системе). В ОС семейства Microsoft Windows рекомендуется установка в составе MinGW или Cygwin.
Code::Blocks — интегрированная среда разработки
Code::Blocks — это бесплатная интегрированная среда разработки (ИСР; англ. integrated development environment, IDE) с открытым исходным кодом для ОС Windows и Linux. Версия для Windows поставляется как в редакции со встроенным компилятором GCC (достаточно установить Code::Blocks), так и без компилятора.
Инструкция по установке рекомендованных средств разработки для ОС Microsoft Windows XP и файл default.conf
c минималистичным набором настроек и схемами подсветки кода. Для Windows 7 и 8 рекомендуется устанавливать Code::Blocks с интегрированным MinGW.
Пользуйтесь англоязычными версиями! Локализованные в индустрии практически не применяются, и вам будет сложно найти помощь.
Альтернативные
Можно пользоваться любыми средствами разработки при условиях:
- Вопросы настройки выбранной среды и работы с ней решаются самостоятельно.
- Если ваши средства разработки бесплатные, работают в Windows XP, и вся бригада желает их использовать, можно договорится установить ПО в лаборатории.
- Нельзя использовать нестандартные расширения языка C++. Запрещается использовать библиотеки Qt, VCL и т. п.
Некоторые альтернативные средства разработки:
- Eclipse — бесплатная кроссплатформенная IDE с открытым исходным кодом, популярная в индустрии. Разработка на C++ осуществляется, как правило, при помощи расширения C/C++ Development Tools (CDT). Установить и настроить можно по инструкции с поправкой на версию Eclipse.
- Microsoft Visual Studio 2012 (MSVS) — популярная в индустрии IDE с собственным компилятором для Windows 7 и выше. Редакция Express бесплатна для некоммерческого использования — её возможностей достаточно для учебного курса. Внимание: стандарт C++11 поддерживается MSVS не полностью (на сентябрь 2013).
Вспомогательные
Статические анализаторы кода:
Для использования расширения интеграции CppCheck в Code::Blocks необходимо указать путь к испольняемому файлу в настройках: Settings / Environment / CppCheck, например, C:\Program Files (x86)\CppCheck\cppcheck.exe
.
Генераторы документации
Для использования Doxygen с Code::Blocks при помощи расширения DoxyBlocks нужно:
- Загрузить и установить Doxygen.
- В диалоге, вызываемом из пункта меню DoxyBlocks / Open Preferences…, указать путь к исполняемым файлам Doxygen.
-
При дальнейшей работе:
- Чтобы сгенерировать документацию, выбрать в меню пункт DoxyBlocks / Extract documentation.
- Просмотреть полученную документацию можно, выбрав в меню пункт DoxyBlocks / Run HTML (если была выбрана документация HTML, как по умолчанию).
Анализаторы производительности
- Intel VTune Amplifier XE
-
GNU Profiler (GProf):
- Руководство пользователя для утилиты командной строки
grof
, где описано значение столбцов таблицы-результата.
-
Для профилирования программы в Code::Blocks:
- в опциях компилятора указать опцию «Profile code when executed» (
-pg
);
- выполнить запуск программы (вплоть до ее завершения);
- отобразить результаты профилирования из меню Plugins / Code profiler.
Системы контроля версий
Содержание курса
Темы приводятся ориентировочно, могут быть изменены, исключены или добавлены.
-
Язык C++
- Основы языка
- Работа с динамической памятью и строками C
- Объектно-ориентированное программирование (крупная тема)
- Обработка ошибок и механизм исключительных ситуаций
- Шаблоны (вкратце). Стандартная библиотека шаблонов (STL)
- Средства автоматизации разработки ПО (анализ кода и производительности, контроль версий и т. п.)
-
Алгоритмы и структуры данных
- Структуры данных: массив, списки, очередь, стек, дек, деревья
- Алгоритмы: поиск, сортировка. Алгоритмическая сложность.
Будет также рассмотрена отладка программ, работа с внешними программными библиотеками. Курс воспитывает активную самостоятельную работу с литературой и документацией.
Дополнительные материалы
Литература
Стандарты языка C и C++
В курсе преподается C++11 (стандарт ISO/IEC 14882:2011).
Доступ к стандартам ISO и ANSI платный (порядка 200–250 $ за документ). Однако, бесплатно доступны черновики (drafts) стардартов, минимально отличающиеся от окончательной редакции. Язык стандартов — только английский.
Печатные издания
Язык C++
- The C++ Programming Language, 4th Edition by Bjarne Stroustrup, July 10 2013
- Стивен Прата. Язык программирования C++. Лекции и упражнения, 6-е издание / перевод с англ. Корниенко Ю. и Моргуновой А. (C++ Primer Plus (6th Edition). — М.: Вильямс. — 2012 г. — 1248 с.
Алгоритмы и структуры данных
- Томас Кормен и др. Алгоритмы. Построение и анализ / пер. с англ. (Introduction to Algorithms) — М.: Вильямс. — 2012 г. — 1296 с.
- Роберт Седжвик. Фундаментальные алгоритмы на С++, 2-е издание / пер. с англ. (Algorithms in C++). — М.: DiaSoft — 2001 г. — 688 с.
- Стивен Скиена. Алгоритмы. Руководство по разработке, 2-е издание / пер. с англ. (The Algorithm Design Manual, Second Edition) — СПб.: БХВ-Петербург. — 2011 г. — 720 с.
Электронные ресурсы
- Сайт C++ Reference — неофициальный, но подробный справочник, достаточно авторитетный в профессиональных кругах.
- Конспект лекций по C & C++ Чибизовой Натальи Владимировны, доцента кафедры Прикладной математики НИУ «МЭИ».
- Сайт Stack Overflow — система обмена знаниями между специалистами в форме вопросов и ответов (напоминает одновременно форум и открытый FAQ). Очень популярен, содержит развернутые решения практически всех типичных проблем. Перед использованием рекомендуется научиться правильно задавать вопросы. Благодарим Бориса Вишнякова за рекомендацию Stack Overflow.
- Сайт Ideone.com — бесплатный online компилятор для быстрой проверки небольших программ.
Преподаватели
Дербенев Николай Викторович
Ведет: лекции.
Связь: см. страницу на сайте кафедры.
Козлюк Дмитрий Александрович
Ведет: лабораторные работы.
Связь:
ОСЭП,
электронная почта,
«ВКонтакте»,
373-337-709,
Dmitry.Kozliuk
Правила общения по электронной почте:
- Пишите грамотно.
- Давайте письмам осмысленные темы (иначе неудобно, так как новое письмо может потеряться). Подписываться в теме письма не нужно.
- Под очередное задание, вопрос и т. п. заводите новую ветвь переписки, а не отвечайте в старой (так хорошо, а так — плохо).
- Используйте названия файлов вида
А0209_Козлюк_Дмитрий_ЛР1
(имя, фамилия и группа — ваши). Отправляя архив с кодом, заключайте все файлы в каталог с подобным названием. Исполняемые файлы (*.exe
) в архив включать не нужно.
- Цитируйте только необходимую часть сообщения.
Соблюдение этих правил сделает нашу переписку эффективнее и снизит риск путаницы.
Никитин Вадим Владимирович
Ведет: лабораторные работы.
Авторы курса: Дербенев Н. В., Козлюк Д. А., Никитин В. В., кафедра Управления и информатики НИУ «МЭИ», 2013 г.
Ответственный за страницу: Козлюк Д. А.