Программирование и алгоритмизация
Покупка
Новинка
Тематика:
Программирование на C и C++
Издательство:
Оренбургский государственный университет
Автор:
Тагирова Лилия Фаритовна
Год издания: 2020
Кол-во страниц: 370
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7410-2515-4
Артикул: 839090.01.99
Учебное пособие посвящено изучению основам разработки приложений с использованием языка программирования С++. Раскрывается работа с базовыми операторами и функциями, массивами, строками и указателями в С++. Также
в пособии рассматриваются динамические структуры данных, работа с файлами, создание оконных приложений, а также основы объектно-ориентированного подхода. Помимо этого, в пособии представлен материал по работе с инструментальной средой Microsoft Visual Studio по созданию и отладке приложений. Данное учебное пособие может быть использовано студентами направлений 09.03.01 Информатика и вычислительная техника при изучении дисциплины Основы программирования, а также направления 09.03.04 Программная инженерия при изучении дисциплины Программирование и алгоритмизация.
Тематика:
ББК:
УДК:
ОКСО:
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Оренбургский государственный университет» Л. Ф. Тагирова ПРОГРАММИРОВАНИЕ И АЛГОРИТМИЗАЦИЯ Учебное пособие Рекомендовано ученым советом федерального государственного бюджетного образовательного учреждения высшего образования «Оренбургский государственный университет» для обучающихся по образовательным программам высшего образования по направлениям подготовки 09.03.01 Информатика и вычислительная техника и 09.03.04 Программная инженерия Оренбург 2020
УДК 004.422.63(076.5) ББК 32.973-018я7 Т13 Рецензент – доктор технических наук, профессор Т. М. Зубкова. Тагирова, Л.Ф. Т13 Программирование и алгоритмизация [Электронный ресурс] : учебное пособие для обучающихся по образовательным программам высшего образования по направлениям подготовки 09.03.01 Информатика и вычислительная техника и 09.03.04 Программная инженерия / Л. Ф. Тагирова; М-во науки и высш. образования Рос. Федерации, Федер. гос. бюджет. образоват. учреждение высш. образования "Оренбург. гос. ун-т". - Оренбург : ОГУ. - 2020. - 370 с. - Загл. с тит. экрана. ISBN 978-5-7410-2515-4 Учебное пособие посвящено изучению основам разработки приложений с использованием языка программирования С++. Раскрывается работа с базовыми операторами и функциями, массивами, строками и указателями в С++. Также в пособии рассматриваются динамические структуры данных, работа с файлами, создание оконных приложений, а также основы объектно-ориентированного подхода. Помимо этого, в пособии представлен материал по работе с инструментальной средой Microsoft Visual Studio по созданию и отладке приложений. Данное учебное пособие может быть использовано студентами направлений 09.03.01 Информатика и вычислительная техника при изучении дисциплины Основы программирования, а также направления 09.03.04 Программная инженерия при изучении дисциплины Программирование и алгоритмизация. УДК 004.422.63(076.5) ББК 32.973-018я7 © Тагирова Л. Ф., 2020 ISBN 978-5-7410-2515-4 © ОГУ, 2020
Содержание 1 Введение в С++ ................................................................................................................. 7 1.1 Основные понятия алгоритмизации ............................................................................ 7 1.2 Основы работы со средой MS Visual Studio ............................................................. 18 1.3 Основы языка С++ ....................................................................................................... 25 1.4 Стандартные операторы и функции языка С++ ....................................................... 31 1.5 Контрольные вопросы для закрепления изученного материала ............................ 75 1.6 Тестирование по первой главе ................................................................................... 75 2 Массивы........................................................................................................................... 78 2.1 Создание массивов ...................................................................................................... 78 2.2 Инициализация массивов ........................................................................................... 79 2.3 Классификация массивов ........................................................................................... 81 2.4 Одномерные массивы ................................................................................................. 82 2.5 Двумерные массивы .................................................................................................... 86 2.6 Обработка элементов массива ................................................................................... 93 2.7 Примеры работы с массивами .................................................................................... 98 2.8 Контрольные вопросы для закрепления изученного материала .......................... 100 2.9 Тестирование по второй главе ................................................................................. 101 3 Работа со строками в С++ ............................................................................................ 103 3.1 Инициализация строк ................................................................................................ 103 3.2 Функции работы со строками .................................................................................. 105 3.3 Примеры работы со строками .................................................................................. 114 3.4 Контрольные вопросы для закрепления изученного материала .......................... 118 3.5 Тестирование по третьей главе ................................................................................ 118 4 Использование указателей в языке С++ .................................................................... 121 4.1 Инициализация указателей ....................................................................................... 121 4.2 Использование указателей разных типов ............................................................... 126 4.3 Указатели и структуры ............................................................................................. 128 4.4 Выделение памяти ..................................................................................................... 130 4.5 Динамические массивы............................................................................................. 133 4.6 Ссылки ........................................................................................................................ 134 4.7 Указатели на функции .............................................................................................. 136 4.8 Контрольные вопросы для закрепления изученного материала .......................... 140 4.9 Тестирование по четвертой главе ............................................................................ 140 5 Пользовательские функции в языке C++ ................................................................... 142 5.1 Объявление и определение функций ...................................................................... 142 5.2 Параметры функции .................................................................................................. 147 5.3 Функции с переменным количеством аргументов ................................................ 154 5.4 Локальные, глобальные переменные ...................................................................... 155 5.5 Прототипы функций .................................................................................................. 156 5.6 Перегрузка функций.................................................................................................. 158 5.7 Рекурсия ..................................................................................................................... 159 5.8 Практические примеры работы с функциями ........................................................ 161
5.9 Контрольные вопросы для закрепления изученного материала .......................... 173 5.10 Тестирование по пятой главе ................................................................................. 173 6 Работа с типами и структурами данных .................................................................... 176 6.1 Структуры в языке С++ ............................................................................................ 176 6.2 Объединения, перечисления, оператор typedef ...................................................... 187 6.3 Контрольные вопросы для закрепления материала ............................................... 197 6.4 Тестирование по шестой главе ................................................................................. 197 7 Динамические структуры данных .............................................................................. 199 7.1 Линейные списки ....................................................................................................... 199 7.2 Использование стеков в С++ .................................................................................... 220 7.3 Очереди ...................................................................................................................... 229 7.4 Бинарные деревья ...................................................................................................... 231 7.5 Контрольные вопросы для закрепления изученного материала .......................... 238 7.6 Тестирование по седьмой главе ............................................................................... 238 8 Работа с файлами в С++ ............................................................................................... 240 8.1 Функции записи и чтения из файлов ....................................................................... 240 8.2 Функции работы с позицией курсора ...................................................................... 250 8.3 Работа с бинарными файлами .................................................................................. 252 8.4 Удаление и переименование файлов ....................................................................... 258 8.5 Контрольные вопросы для закрепления изученного материала .......................... 259 8.6 Тестирование по восьмой главе ............................................................................... 259 9 Визуальное программирование в языке C++ ............................................................. 262 9.1 Технология WinAPI ................................................................................................... 262 9.2 Microsoft Foundation Classes (MFC) ......................................................................... 294 9.3 Контрольные вопросы для закрепления изученного материала .......................... 315 9.4 Тестирование по девятой главе ................................................................................ 316 10 Введение в объектно-ориентированное программирование ................................. 319 10.1 Основы объектно-ориентированного подхода ..................................................... 319 10.2 Контрольные вопросы для закрепления изученного материала ........................ 326 10.3 Тестирование по десятой главе .............................................................................. 326 Заключение ....................................................................................................................... 328 Глоссарий ......................................................................................................................... 329 Список использованных источников ............................................................................ 334 Приложение А Задание для выполнения лабораторных работ .................................. 336 Приложение Б Методика выполнения лабораторных работ ...................................... 370
Введение Язык С++ – это компилируемый строго типизированный язык программирования общего назначения. Целью создания языка C++ являлось развитие языка Cи возможностями, удобными для масштабной разработки прикладных программ. При создании языка C++ разработчики стремились сохранить совместимость с существующим языком Cи [1]. Целью данного учебного пособия является обучение студентов современным языкам программирования высокого уровня на примере языка С++ методами и средствами разработки и отладки программ в инструментальной среде Microsoft Visual Studio. В пособии представлен материал по изучению основ работы с инструментальной средой Microsoft Visual Studio, изучение конструкций языка программирования С++, приобретение навыков разработки и представления алгоритмов решения задач, овладение опытом создания программ с использованием процедурного и объектно-ориентированного подхода на основе разработанных алгоритмов, отладка программ. Представленное учебное пособие состоит из введения, десяти глав, включающих материал по изучению основ языка С++, заключения, списка использованных источников и приложений. В первой главе работе представлены основы для работы с языком С++. Приведены основы работы со средой MS Visual Studio, стандартные типы данных языка С++, а также базовые операторы и функции. Во второй главе представлен материал по работе с массивами в языке С++. Описано создание, инициализация массивов. Приведена классификация массивов, описана работа с одномерными и многомерными массивами. В следующей главе описана работа со строками, приведены материалы по инициализации строк, а также функциям работы со строками. Четвертая глава учебного пособия посвящена изучению указателей в языке С++. Представлена информация по инициализации указателей, использованию указателей разных типов, а также работе с динамическими массивами.
В пятой главе представлен материал по созданию пользовательских функции в языке C++. Описаны объявление и определение функций, параметры функции. Так же описаны функции с переменным количеством аргументов. Рассматривается материал по работе с локальными, глобальными переменными. Изучаются прототипы функций, перегрузка функций. В шестой главе описана работа с типами и структурами данных. Описаны объединения, перечисления, оператор typedef в языке С++. Седьмая глава посвящена изучению динамических структур данных. Описано использование стеков в С++, а также связные списки. В восьмой главе представлена работа с файлами в языке С++. Описаны функции записи и чтения из файлов. Также представлен материал по работе с бинарными файлами, а также возможности удаления и переименования файлов. В девятой главе раскрываются возможности визуальное программирования в языке C++. Описаны возможности технологий WinAPI и Microsoft Foundation Classes (MFC). Приведены примеры создания оконных приложений с помощью инструментальной среды MS Visual Studio. Десятая глава содержит материал по основам объектно-ориентированного программирования. В приложениях представлены задания и правила выполнения лабораторных работ. Для более наглядного представления теоретический материал учебного пособия включает большое количество практических примеров и наглядных изображений по реализации программ на языке С++. После каждой теоретической главы представлены контрольные вопросы и тесты для самоконтроля, которые позволят студентам более прочно усвоить изученный материал. После окончания изучения представленного учебного пособия студенты будут уметь самостоятельно разрабатывать и отлаживать консольные и оконные приложения на языке С++ с использованием инструментальной среды Microsoft Visual Studio. Помимо этого, они смогут грамотно оформлять программную документацию, согласно требованиям ЕСПД. Автор выражает глубокую благодарность и признательность рецензенту за внимательное прочтение рукописи и замечания, способствовавшие улучшению качества предлагаемого учебного пособия.
1 Введение в С++ 1.1 Основные понятия алгоритмизации 1.1.1 Понятие алгоритма Алгоритм – последовательность чётко определенных действий, выполнение которых ведёт к решению задачи. Другими словами, алгоритм определяется как совокупность этапов, приводящих к достижению результата за конечное число шагов. Алгоритм, записанный на языке машины, есть программа решения задачи. Первое определение не передает полноты смысла понятия «алгоритм». Используемое слово «последовательность» сужает данное понятие, т. к. действия не обязательно должны следовать друг за другом – они могут повторяться или содержать условие [1]. Алгоритмы обладают следующими свойствами: 1) Дискретность (от лат. discretus – разделенный, прерывистый) – это разбиение алгоритма на ряд отдельных законченных действий (шагов); 2) Детерминированность (от лат. determinate – определенность, точность) – любое действие алгоритма должно быть строго и недвусмысленно определено в каждом случае. Например, алгоритм проезда к другу, если к остановке подходят автобусы разных маршрутов, то в алгоритме должен быть указан конкретный номер маршрута 5. Кроме того, необходимо указать точное количество остановок, которое надо проехать, скажем, три; 3) Конечность – каждое действие в отдельности и алгоритм в целом должны иметь возможность завершения; 4) Массовость – один и тот же алгоритм можно использовать с разными исходными данными; 5) Результативность – алгоритм должен приводить к достоверному решению. Основная цель алгоритмизации – составление алгоритмов для ЭВМ с дальнейшим решением задачи на ЭВМ. Далее представлены примеры алгоритмов:
1) Любой прибор, купленный в магазине, снабжается инструкцией по его использованию. Данная инструкция и является алгоритмом для правильной эксплуатации прибора; 2) Каждый шофер должен знать правила дорожного движения. Правила дорожного движения однозначно регламентируют поведение каждого участника движения. Зная эти правила, шофер должен действовать по определенному алгоритму; 3) Массовый выпуск автомобилей стал возможен только тогда, когда был придуман порядок сборки машины на конвейере. Определенный порядок сборки автомобилей – это набор действий, в результате которых получается автомобиль. Существует несколько способов записи алгоритмов. На практике наиболее распространены следующие формы представления алгоритмов: 1 словесная (запись на естественном языке); 2 псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.); 3 графическая (изображения из графических символов – схема алгоритма); 4 программная (тексты на языках программирования – код программы). Рассмотрим подробно каждый вариант записи алгоритмов на примере следующей задачи: требуется найти частное двух чисел. Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке. Ответ при этом получает человек, который выполняет команды, согласно словесной записи [2]. Пример словесной записи: 1) задать два числа, являющиеся делимым и делителем; 2) проверить, равняется ли делитель нулю; 3) если делитель не равен нулю, то найти частное, записать его в ответ; 4) если делитель равен нулю, то в ответ записать «нет решения».
Словесный способ не имеет широкого распространения, так как такие описания строго не формализуемы, страдают многословностью записей, допускают неоднозначность толкования отдельных предписаний [2]. Псевдокод занимает промежуточное место между естественным и формальным языками. С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи. В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд, рассчитанный на абстрактного исполнителя. Однако в псевдокоде обычно имеются некоторые конструкции, присущие формальным языкам, что облегчает переход от записи на псевдокоде к записи алгоритма на формальном языке. Основные управляющие структуры псевдокода приведены в таблице 1.1. Таблица 1.1 – Основные управляющие структуры псевдокода Название структуры Псевдокод Присваивание переменная = число Ввод ввод (переменная) Вывод вывод (переменная) вывод ("фраза") Ветвление если условие то действие 1 иначе действие 2 Повторение пока условие начало пока действие конец пока
Пример псевдокода: алг Нахождение частного двух чисел начало вывод ("задайте делимое и делитель") ввод (делимое, делитель) если делитель ≠ 0 то частное = делимое / делитель вывод(частное) иначе вывод("нет решения") кон алг Нахождение частного двух чисел В данном примере используется три переменные: делимое, делитель и частное. Делимое и делитель задаются исполнителем произвольными числами. Частное считается лишь в том случае, если делитель не равен нулю. Графическая реализация алгоритма представляет собой схему алгоритма. Схема алгоритма состоит из блоков определенной формы, соединенных стрелками. Ответ при этом получает человек, который выполняет команды, согласно блок схеме. Программная реализация алгоритма – это компьютерная программа, написанная на каком-либо алгоритмическом языке программирования: С++, Pascal, Basic или других. Программа состоит из команд определенного языка программирования. Отметим, что одна и та же схема алгоритма может быть реализована на разных языках программирования. Ответ при этом получает ЭВМ, а не человек. 1.1.2 Понятие схема алгоритма Схема алгоритма – это графическая реализация алгоритма. Схема алгоритма представляет собой удобный и наглядный способ записи алгоритма. Схема алгоритма состоит из функциональных блоков разной формы, связанных между собой стрелками. В каждом блоке описывается одно или
несколько действий. Основные виды блоков представлены в таблица 1.2. Более подробно обозначения блоков в схеме алгоритма представлены в ГОСТ 19.701-90 «Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения» [3]. Таблица 1.2 – Структуры алгоритма Форма структур Назначение структуры Начало и конец схемы алгоритма Блок работы с дисплеем и клавиатурой Блок выполнения действия Блок условия Блок работы с циклами Любая команда алгоритма записывается в схеме алгоритма в виде графического элемента – блока и дополняется словесным описанием. Блоки в схемах алгоритма соединяются линиями потока информации. Направление потока информации указывается стрелкой. В случае потока информации сверху вниз и слева направо стрелку ставить необязательно. Блоки в схемах алгоритма имеют только один вход и один выход (за исключением логического блока – блока с условием). Блок начала в схеме алгоритма имеет один выход и не имеет входов, блок конца схемы алгоритма имеет один вход и не имеет выходов. Блок условия – единственный блок, имеющий два выхода, т. к. соответствует разветвляющемуся алгоритму. На одном выходе указывается «да», на другом – «нет». Все остальные блоки имеют один вход и один выход. Блок выполнения действия может содержать присвоение значения переменной (например, «x = 5») или вычисление (например, «y = x - 4»).
Схема алгоритма не должна иметь привязки к какому-то определенному языку программирования. Одна и та же схема алгоритма может быть реализована в программах на разных языках программирования. На сегодняшний день все требования к оформлению блоков прописаны в ГОСТ 19.701-90 ЕСПД [3]. Схемы алгоритмов, программ, данных и систем. Обозначения условные и правила выполнения. Различают три основных вида алгоритмов: 1 линейный алгоритм, 2 разветвляющийся алгоритм, 3 циклический алгоритм. Линейный алгоритм – это алгоритм, в котором действия выполняются однократно и строго последовательно. Разветвляющийся алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий. Самый простой пример реализации разветвляющегося алгоритма: если на улице идет дождь, то необходимо взять зонт, иначе не брать зонт с собой. Циклический алгоритм – это алгоритм, команды которого повторяются некое количество раз подряд. Самый простой пример реализации циклического алгоритма: при чтении книги будут повторяться одни и те же действия: прочитать страницу, перелистнуть и т. д. 1.1.3 Разработка линейных структур алгоритмов Для описания реализации линейных структур алгоритмов опишем пример звонка по телефону между друзьями. Вася хочет позвонить Пете по городскому телефону. Необходимо составить схему алгоритма, описывающую порядок действий Васи. Решение. Чтобы позвонить по городскому телефону, нужно знать номер Пети. Значит, сначала надо найти номер телефона Пети, набрать его и поговорить с Петей.