Алгоритмические языки и программирование. Учебное пособие
.pdfМинистерство образования и науки Российской Федерации Уральский федеральный университет
имени первого Президента России Б. Н. Ельцина
Т. Б. Токманцев
АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И ПРОГРАММИРОВАНИЕ
Рекомендовано методическим советом УрФУ
вкачестве учебного пособия для студентов, обучающихся на программе бакалавриата
по направлению подготовки 231300 – Прикладная математика
Екатеринбург Издательство Уральского университета
2013
УДК 004.432.2(075.8) ББК 32.973–018.1я73
Т51
Рецензенты:
кафедра экономики и информатизации Гуманитарного университета (зав. кафедрой – канд. экон. наук Н. В. Хмелькова); канд. физ.-мат. наук С. С. Кумков (Институт математики и механики УрО РАН)
Научный редактор – канд. физ.-мат. наук, доц. В. Б. Костоусов
Токманцев, Т. Б.
Т51 Алгоритмические языки и программирование: учебное пособие / Т. Б. Токманцев. – Екатеринбург : Изд-во Урал. ун-та, 2013. – 104 с.
ISBN 978-5-7996-1023-4
Учебное пособие посвящено введению в программирование на языке C++, а также основам объектно-ориентированного и обобщенного программирования. Изучаются концепции переменной, типа данных, функции, класса, шаблона. Изложены основные конструкции языка C++ и основные сведения о стандартной библиотеке шаблонов STL.
Учебное пособие предназначено для студентов специальности 231300 – Прикладная математика.
УДК 004.432.2(075.8) ББК 32.973–018.1я73
ISBN 978-5-7996-1023-4 |
© Уральский федеральный |
|
университет , 2013 |
Оглавление |
|
Базовые понятия .......................................................................................................... |
6 |
Программа................................................................................................................ |
6 |
Структура программы............................................................................................. |
6 |
Интегрированная среда разработки................................................................... |
8 |
Переменная ............................................................................................................ |
10 |
Функция.................................................................................................................. |
13 |
Управляющие конструкции .................................................................................. |
18 |
Следование......................................................................................................... |
18 |
Выбор.................................................................................................................. |
19 |
Повтор................................................................................................................. |
21 |
Массив .................................................................................................................... |
23 |
Строка ..................................................................................................................... |
26 |
Основные понятия ООП ........................................................................................... |
28 |
Парадигмы программирования............................................................................ |
28 |
Процедурное программирование......................................................................... |
28 |
Модульное программирование ............................................................................ |
28 |
ООП ........................................................................................................................ |
28 |
Класс ....................................................................................................................... |
30 |
Обобщенное программирование ......................................................................... |
31 |
Основные средства .................................................................................................... |
32 |
Указатель ................................................................................................................ |
32 |
Структура ............................................................................................................... |
34 |
Макросы ................................................................................................................. |
36 |
Пространство имен................................................................................................ |
37 |
Заголовочные файлы ............................................................................................. |
38 |
Механизмы абстракции ............................................................................................ |
39 |
Класс ....................................................................................................................... |
39 |
Тип ...................................................................................................................... |
39 |
|
3 |
Описание ............................................................................................................ |
39 |
Экземпляр........................................................................................................... |
40 |
Метод .................................................................................................................. |
41 |
Конструктор ....................................................................................................... |
41 |
Деструктор ......................................................................................................... |
42 |
Уровни доступа.................................................................................................. |
42 |
Перегрузка операторов ..................................................................................... |
43 |
Потоки ................................................................................................................ |
44 |
Шаблоны..................................................................................................................... |
44 |
Шаблон-функция ............................................................................................... |
44 |
Макрос................................................................................................................ |
47 |
Замечания ........................................................................................................... |
48 |
Шаблон-класс .................................................................................................... |
48 |
Исключения............................................................................................................ |
50 |
Наследование ......................................................................................................... |
57 |
Виртуальные функции .......................................................................................... |
58 |
Статический и динамический тип ................................................................... |
58 |
Абстрактный базовый класс............................................................................. |
61 |
Виртуальное наследование............................................................................... |
63 |
Преобразование классов................................................................................... |
64 |
Информация о типе ........................................................................................... |
65 |
Стандартная библиотека ........................................................................................... |
66 |
Архитектура ........................................................................................................... |
66 |
Контейнеры ............................................................................................................ |
66 |
Последовательные контейнеры............................................................................ |
67 |
Ассоциативные контейнеры ................................................................................. |
72 |
Адаптеры ................................................................................................................ |
76 |
Алгоритмы ............................................................................................................. |
76 |
Итераторы............................................................................................................... |
80 |
4
Обратные итераторы ............................................................................................. |
82 |
Итераторы вставки ................................................................................................ |
83 |
Потоковые итераторы............................................................................................ |
84 |
Функторы ............................................................................................................... |
86 |
Потоки .................................................................................................................... |
90 |
Иерархия............................................................................................................. |
91 |
Форматирование ................................................................................................ |
91 |
Класс istream ...................................................................................................... |
92 |
Класс ostream ..................................................................................................... |
93 |
Предопределенные потоки ............................................................................... |
93 |
Ошибки............................................................................................................... |
93 |
Строковые потоки.............................................................................................. |
96 |
Командная строка .............................................................................................. |
97 |
Библиографический список...................................................................................... |
99 |
Приложение.............................................................................................................. |
100 |
5
Базовые понятия
Программа
Основным базовым понятием в программировании является понятие алгоритма. Сложно дать его однозначное определение, и поэтому существует несколько различных вариантов определений. Простейшее из них: алгоритм – это набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное число действий.
Основной целью курса является обучение навыкам написания программ на языке C++, решающих простые задачи. Программой, или программным кодом, называется запись алгоритма на определенном языке программирования, в нашем случае – на языке C++.
Структура программы
Программа на языке C++ может включать в себя директивы препроцессора, инструкции и комментарии. Фактически программа представляет собой обычный текстовый файл, который можно открыть произвольным редактором, например Notepad. Для того чтобы программу можно было запустить на выполнение, ее нужно транслировать в выполняемый файл. Трансляция состоит из обработки препроцессора, компиляции и компоновки. Препроцессор обрабатывает директивы препроцессора – инструкции, начинающиеся с символа “#”. Примеры директив: #include, #define, #if. Мы будем использовать в основном директиву #include<имя библиотеки>. По этой директиве препроцессор находит код соответствующей библиотеки и добавляет в код программы код используемых функций.
Для компиляции вызывается специальная программа – компилятор. Она проверяет программу на соответствие правилам языка и, при успешной проверке, преобразует текстовый файл – исходный код – в промежуточный
6
бинарный файл с совпадающим именем и расширением OBJ. Этот файл называется объектным. Далее программа-компоновщик добавляет в объектный файл служебный код из используемых библиотек. В результате получается исполняемый файл, имя которого совпадает с именем файла с исходным кодом, с расширением EXE.
Инструкции – это записанные на языке программирования команды процессору. Каждая инструкция в языке С++ должна заканчиваться точкой с запятой.
Комментариями называются специального вида текстовые вставки в код программы, предназначенные для описания программы, функций, переменных и т. д. Особенностью комментариев является то, что компилятор их игнорирует
– они предназначены для программиста, который будет читать или исправлять код программы. В языке C++ существует два вида комментариев: однострочные начинаются со знака // и продолжаются до конца строки. Многострочные комментарии начинаются со знака /* и заканчиваются знаком */.
Программа состоит из следующих трех частей: подключения используемых библиотек, функции main и функций пользователя.
Библиотеки содержат ранее написанные функции и константы, позволяют использовать ранее накопленный опыт программистов. Для подключения библиотек используется директива препроцессора #include. Для исключения ситуации конфликта имен констант и функций, ранее описанных в используемых библиотеках и в программе, используется механизм пространства имен. Основным пространством имен языка C++ является std. Большинство стандартных функций описано в пространстве имен std. Для использования функции, описанной в пространстве имен std, имя функции записывается так: std::имя_функции. Другим вариантом является использование конструкции using namespace std. После этого не требуется указывать std:: перед именем функции.
7
Основной частью программы является функция main. При выполнении программы поток управления стартует с первой инструкции, и программа завершает работу по достижении потоком управления последней инструкции этой функции. По стандарту при успешном завершении работы функция должна возвращать с помощью оператора return значение 0, в случае ошибки – код ошибки.
Как правило, описание пользовательских функций размещается до функции main. А их определение – после.
Двумя основными видами программы являются консольная программа и программа с пользовательским интерфейсом. Консольная программа выводит информацию в символьно-цифровом виде и принимает от пользователя данные с клавиатуры. Программа с пользовательским интерфейсом отображает форму с кнопками, текстовыми полями и прочими элементами и позволяет использовать для ввода информации как клавиатуру, так и мышь. В нашем курсе мы будем писать только консольные программы.
Пример. Традиционно программисты при изучении нового языка программирования начинают с написания простейшей программы, которая выводит на экран сообщение «Hello, World!». На языке C++ эта программа выглядит так:
#include<iostream> //input and output library using namespace std; //open namespace std int main(){ //main function
cout << "Hello, World!"; //output the message return 0; //exit the program with OK code
}
Интегрированная среда разработки
Как уже было сказано, для разработки программ можно использовать любой текстовый редактор. Но гораздо удобнее использовать специальную программу,
8
которая называется интегрированной средой разработки (англ. IDE). Мы будем использовать бесплатную среду Microsoft Visual Studio 2008 Express Edition.
Она предназначена для разработки программ и включает в себя текстовый редактор, транслятор и отладчик.
Текстовый редактор предназначен для написания и редактирования исходного кода программы. Исходный код обычно хранится в папке My Documents/Visual Studio 2008/Projects. В среде MS VS 2008 исходный код организован в решение (solution), которое состоит из нескольких проектов. Каждый проект представляет собой отдельную программу. Проект состоит из исходного кода программы – текстового файла с расширением cpp и заголовочных файлов с расширением h.
Транслятор используется для синтаксической проверки программы на соответствие правилам языка и для преобразования исходного кода в исполняемый файл.
Отладчик помогает искать ошибки в программе. Он позволяет увидеть, как переходит по тексту программы поток выполнения, поставить поток управления на паузу на заданной линии (точка останова), а также увидеть в ходе выполнения программы значения любой переменной (окно Watch).
Одним из обязательных навыков программиста является уверенное владение клавиатурой. Большую часть времени руки программиста лежат на клавишах. При использовании мыши внимание переключается с написания кода на управление мышью, в то время как клавиши (при определенном опыте) используются автоматически, без отвлечения. Поэтому важным правилом является активное усвоение клавиатурных сочетаний, позволяющих при работе со средой разработки не использовать мышь.
Полезные клавиатурные команды приведены в приложении.
9
Переменная
Любая программа предназначена для обработки того или иного набора данных. Во время работы программы данные хранятся в оперативной памяти (ОЗУ). Как известно, минимальная ячейка памяти называется бит и может хранить значения 0 или 1. Байтом называется 8 бит. Каждый байт в памяти имеет свой адрес. Зная адрес байта, программа может записывать или считывать из него значения. На заре программирования единственным способом работы с информацией, хранящейся в памяти, было обращение к байтам по их адресам. В более позднее время в языках программирования появилось понятие переменной. Переменная – это имя некоторого участка памяти, куда можно записывать и считывать данные. В языке C++ имя переменной, или идентификатор, может состоять из цифр, маленьких и больших латинских букв и содержать знак подчеркивания. Имя переменной должно начинаться с буквы. В имени не должно быть пробела. Переменной нельзя давать имя, совпадающее с зарезервированными именами – ключевыми словами языка. Большие и маленькие буквы в именах различаются, то есть имена Var и var – разные.
Для всех переменных должен быть указан тип, определяющий, сколько памяти в байтах выделять на хранение значения переменной, как интерпретировать эти значения и какие операции разрешается выполнять над переменной. Базовые предопределенные типы представлены в таблице ниже.
Перед первым использованием переменной ее нужно описать и – желательно – инициализировать (присвоить начальное значение). При компиляции программы, встречая описание переменной, компилятор выделяет под нее участок памяти и сопоставляет имени переменной адрес этого участка. Размер участка определяется по типу.
Описание имеет следующий вид: тип_переменной имя_переменной = значение_переменной.
10
