- •Сведения об авторах
- •1. Знакомство с языком С++
- •1.1 Первая программа на С++
- •1.2 Среда программирования Qt Creator
- •2. Общие сведения о языке С++
- •2.1 Алфавит языка
- •2.2 Данные
- •2.2.1 Символьный тип
- •2.2.2 Целочисленный тип
- •2.2.3 Вещественный тип
- •2.2.4 Логический тип
- •2.2.5 Тип void
- •2.3 Константы
- •2.4 Структурированные типы данных
- •2.5 Указатели
- •2.6 Операции и выражения
- •2.6.1 Операции присваивания
- •2.6.2 Арифметические операции
- •2.6.3 Логические операции
- •2.6.4 Операции отношения
- •2.6.5 Условная операция
- •2.6.6 Операция преобразования типа
- •2.6.7 Операция определения размера
- •2.6.8 Операции с указателями
- •2.7 Стандартные функции
- •2.8 Структура программы
- •2.9 Ввод и вывод данных
- •2.9.1 Функции ввода - вывода
- •2.10 Задачи для самостоятельного решения
- •2.10.2 Операции целочисленной арифметики.
- •2.10.3 Встроенные математические функции
- •3. Операторы управления
- •3.1 Основные конструкции алгоритма
- •3.2 Составной оператор
- •3.3 Условные операторы
- •3.3.1 Условный оператор
- •3.3.2 Оператор варианта
- •3.4 Операторы цикла
- •3.4.1 Оператор цикла с предусловием
- •3.4.2 Оператор цикла с постусловием
- •3.4.3 Оператор цикла с параметром
- •3.4.4 Операторы передачи управления
- •3.5 Решение задач с использованием циклов
- •3.6 Задачи для самостоятельного решения
- •3.6.1 Разветвляющийся процесс. Вычисление значения функции.
- •3.6.2 Разветвляющийся процесс. Попадание точки в плоскость.
- •3.6.3 Разветвляющийся процесс. Пересечение линий и решение уравнений.
- •3.6.4 Циклический процесс. Вычисление значений функции
- •3.6.6 Циклический процесс. Последовательности произвольных чисел
- •3.6.7 Циклический процесс. Работа с цифрами в числе
- •3.6.8 Вложенные циклы
- •4. Использование функций при программировании на С++
- •4.1 Общие сведения о функциях. Локальные и глобальные переменные
- •4.2 Передача параметров в функцию
- •4.3 Возврат результата с помощью оператора return
- •4.4 Решение задач с использованием функций
- •4.5 Рекурсивные функции
- •4.6 Перегрузка функций
- •4.7 Шаблоны функций
- •4.8 Область видимости переменных в функциях
- •4.9 Функция main(). Параметры командной строки
- •4.10 Задачи для самостоятельного решения
- •4.10.1 Применение функций при работе с последовательностями чисел
- •4.10.2 Применение функций для вычислений в различных системах счисления
- •4.10.3 Применение функций для решения нелинейных уравнений
- •5. Массивы
- •5.1 Статические массивы в С(С++)
- •5.1.1 Описание статических массивов
- •5.1.2 Основные операции над массивами
- •5.2 Динамические массивы в С(С++)
- •5.2.1 Функция malloc
- •5.2.2 Функция calloc
- •5.2.3 Функция realloc
- •5.2.4 Функция free
- •5.2.5 Операторы new и delete
- •5.3 Основные алгоритмы обработки массивов
- •5.3.2 Вычисление суммы элементов массива
- •5.3.3 Вычисление произведения элементов массива
- •5.3.4 Поиск максимального элемента в массиве и его номера
- •5.3.5 Удаление элемента из массива
- •5.3.6 Сортировка элементов в массиве
- •5.3.6.1 Сортировка методом «пузырька»
- •5.3.6.2 Сортировка выбором
- •5.3.6.3 Сортировка вставкой
- •5.4 Указатели на функции
- •5.5 Совместное использование динамических массивов, указателей, функций в сложных задачах обработки массивов
- •5.6.1 Основные операции при работе с массивами
- •5.6.2 Применение функций для обработки массивов.
- •5.6.3 Работа с группами элементов в массиве
- •5.6.4 Сортировка элементов массива
- •6. Статические и динамические матрицы
- •6.1 Статические матрицы С(С++)
- •6.2 Динамические матрицы
- •6.2.1 Использование указателей для работы с динамическими матрицами
- •6.2.2 Использование двойных указателей для работы с динамическими матрицами
- •6.3 Обработка матриц в С(С++)
- •6.4 Решение некоторых задач линейной алгебры
- •6.5 Задачи для самостоятельного решения
- •6.5.1 Основные операции при работе с матрицами
- •6.5.2 Работа со строками и столбцами матрицы
- •6.5.3 Решение задач линейной алгебры
- •7. Организация ввода-вывода в C++
- •7.1.2 Использование манипуляторов форматирования
- •7.2 Работа текстовыми файлами в C++
- •7.2.1 Запись информации в текстовый файл
- •7.2.2 Чтение информации из текстового файла
- •7.3 Обработка двоичных файлов
- •8. Строки в языке С++
- •8.1 Общие сведения о строках в С++
- •8.2 Операции над строками
- •8.3 Тип данных string
- •8.4 Задачи для самостоятельного решения
- •9. Структуры в языке С++
- •9.1 Общие сведения о структурах
- •9.2 Библиотеки для работы с комплексными числами
- •9.3 Задачи для самостоятельного решения
- •9.3.1 Структуры. Операции над комплексными числами
- •9.3.2 Работа с библиотекой комплексных чисел
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
275 |
Рисунок 9.9. Результат работы программы к задаче 9.5
9.3Задачи для самостоятельного решения
9.3.1Структуры. Операции над комплексными числами
Разработать программу на языке С++ для решения следующей задачи. Даны
комплексные числа a=α +β i , |
b=γ +δ i и c=λ +μ i . Найти комплесное число |
|||||||||||||||
d =φ +ψ i по формуле представленной в табл. 9.2. |
|
|
|
|
|
|
|
|
|
|
||||||
|
Таблица 9.2. Задания для решения задачи о комплексных числах |
|||||||||||||||
|
Вариант |
Формула для вычислений |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
a+b |
|
||||||||||
|
1 |
d =a |
|
|
|
|
|
|
|
|
|
|||||
|
a−b c |
|
||||||||||||||
|
2 |
d =a2 |
a b−c |
|
|
|
||||||||||
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
a3 b |
|
|
|
|
|
|
||||||
|
3 |
d = |
|
|
|
a−b |
|
|||||||||
|
b+c |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 a b |
|
||||||
|
4 |
d = a−c |
|
|
|
|
|
|||||||||
|
|
a |
|
|||||||||||||
|
|
|
a2 b |
|
|
|
|
|
|
|||||||
|
5 |
d = |
|
|
(a−b) |
|
||||||||||
|
a+c |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
6 |
d = a c 2 a−b |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
a−c |
|
|||||
|
7 |
|
|
|
a b2+c |
|
|
|||||||||
|
d = a−b |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
276 |
Вариант |
Формула для вычислений |
||
|
|
|
|
|
2 b |
||
8 |
d = a b−c |
|
|
a |
9 |
|
|
|
|
|
|
|
a b3−c |
|
|||||||||||
d = a+b |
||||||||||||||||||||
|
||||||||||||||||||||
10 |
|
|
|
|
|
|
|
|
|
|
|
|
b2 |
|||||||
d = a b−c c |
||||||||||||||||||||
|
||||||||||||||||||||
11 |
|
|
|
|
|
|
|
a3 b+c |
|
|||||||||||
d = a−b |
||||||||||||||||||||
|
||||||||||||||||||||
12 |
d = |
a2 b−c3 |
||||||||||||||||||
|
|
|
|
|
a |
|||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
13 |
|
|
|
|
|
|
|
a+b2−c |
|
|||||||||||
d = a+b+c |
||||||||||||||||||||
|
||||||||||||||||||||
14 |
d = |
|
(a+b2−c) |
|||||||||||||||||
|
|
|
|
(a+b2) |
||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
15 |
|
|
|
|
|
|
|
a+b+c 2 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
d =(a−b+c ) |
||||||||||||||||||||
|
||||||||||||||||||||
16 |
d = a−b−c |
b c |
|
|
|
|||||||||||||||
b−c |
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
||||
17 |
х=( |
a+b +c |
) |
|
|
|
||||||||||||||
a−b2−c |
||||||||||||||||||||
18 |
d = a b c |
b−a |
|
|
||||||||||||||||
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
b−c |
|||||||||
|
|
|
|
|
|
|
|
a−b−c |
||||||||||||
19 |
d =( |
|
|
|
|
) |
|
|
||||||||||||
|
|
a−b2+c3 |
||||||||||||||||||
20 |
d = |
a2−b c |
||||||||||||||||||
|
|
|
|
b−c3 |
||||||||||||||||
|
|
|
|
|
|
|
|
|||||||||||||
21 |
|
|
|
|
(a+b+c)2 |
|||||||||||||||
d = a−b−c |
||||||||||||||||||||
|
||||||||||||||||||||
22 |
d = a b c |
b c 2 |
||||||||||||||||||
b−c 3 |
|
|||||||||||||||||||
23 |
d = |
(a2+b−c) a |
|
|||||||||||||||||
|
|
|
|
|
|
b |
||||||||||||||
|
|
|
|
|
|
|
|
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
277 |
||||
|
|
|
|
|
|
|
Вариант |
Формула для вычислений |
|
|
|
|
|
|
|
|
|
|
24 |
d = b/c b c |
|
|
|
|
|
a−c |
|
|
|
|
25 |
d = a2−b |
a c |
|
|
|
|
c |
a−c |
|
|
9.3.2Работа с библиотекой комплексных чисел
Разработать программу на языке С++ для решения следующей задачи:
1. |
Для заданной матрицы комплексных чисел А(n×n) найти |
B=3 A2 + AT . |
|
|
||||||||||
2. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(n×n) |
найти |
||||
|
C=(2−3 i) A B +BT . |
|
|
|
|
|
|
|
C= A−A2 , |
|||||
3. |
Для заданных матриц комплексных чисел А(n×n) и B(m×m) найти |
|||||||||||||
|
где |
=B . |
|
|
|
|
|
C=(3.2+1.8 i) AT − A2 . |
||||||
4. |
Для заданной матрицы комплексных чисел А(n×n) найти |
|||||||||||||
5. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(n×n) |
найти |
||||
|
C=(3.5 i) A BT −B . |
|
|
|
|
|
|
|
|
|
AT |
+ A2 , |
||
6. |
Для заданных матриц комплексных чисел А(n×n) и B(m×m) найти |
C= |
2 |
|||||||||||
|
где |
=B . |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D(k×k) |
|
|
||||
7. |
Для |
заданной |
матрицы |
комплексных |
чисел |
|
|
найти |
||||||
|
C=(3.2+1.8 i) D2−(5.2 i) DT . |
|
|
|
|
|
C= A BT +A B . |
|||||||
8. |
Для заданных матриц комплексных чисел А(n×n) и B(n×n) найти |
|||||||||||||
9. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(m×m) |
найти |
||||
|
C=( A− AT ) A |
, где |
=B . |
|
|
|
C=2.3 (F 2 +F )T . |
|||||||
10. |
Для заданной матрицы комплексных чисел F(m×m) найти |
|||||||||||||
11. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(n×n) |
найти |
||||
|
C=(−2+3.5 i) (A−BT )2 . |
|
|
|
|
|
|
C= ( A2 + AT ) |
||||||
12. |
Для заданных матриц комплексных чисел А(n×n) и B(m×m) найти |
|
||||||||||||
|
, где |
=B . |
|
|
|
|
|
|
|
D(k×k) |
|
|
||
13. |
Для |
заданной |
матрицы |
комплексных |
чисел |
|
|
найти |
||||||
|
C=(8.1 i) ( D2−(1.2 i) DT ) . |
|
|
А(n×n) |
|
|
B(n×n) |
|
||||||
14. |
Для |
заданных |
матриц |
комплексных |
чисел |
и |
|
найти |
||||||
|
C=(−1.5 i) (AT +BT )2 . |
|
|
|
А(n×n) |
|
|
B(m×m) |
|
|||||
15. |
Для |
заданных |
матриц |
комплексных |
чисел |
и |
|
найти |
||||||
|
C= ( AT + A)2 , где =B . |
|
|
|
C=(DT −(1.2 i)) D . |
|||||||||
16. |
Для заданной матрицы комплексных чисел D(k×k) найти |
|||||||||||||
17. |
Для заданных матриц комплексных чисел А(n×n) и B(n×n) найти |
C=(A2 +B2)T . |
||||||||||||
18. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(m×m) |
найти |
||||
|
C= ( AT + A) A |
, где |
=B . |
|
|
|
|
F(m×m) |
|
|
||||
19. |
Для |
заданной |
матрицы |
комплексных |
чисел |
|
найти |
|||||||
|
C=−3.3 (FT −(2 i) F )2 . |
|
|
|
|
|
|
|
|
|
|
|
||
20. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
|
B(n×n) |
найти |
||||
|
C=(A B+ B A)T . |
|
|
|
|
|
|
|
|
|
|
|
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
278 |
||||||||||
21. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
B(m×m) |
найти |
||
|
C= A− A AT |
, где |
=B . |
|
|
C=F T +(3 i) F 2 . |
|
||||
22. |
Для заданной матрицы комплексных чисел F(m×m) найти |
|
|||||||||
23. |
Для заданных матриц комплексных чисел А(n×n) и B(n×n) найти |
C=(( A+ B)2)T . |
|||||||||
24. |
Для |
заданных |
матриц |
комплексных |
чисел |
А(n×n) |
и |
B(m×m) |
найти |
||
|
C= ( A2− AT ) |
, где |
=B . |
|
|
C=(DT +(5−1.3 i) D)2 . |
|||||
25. |
Для заданной матрицы комплексных чисел D(k×k) найти |
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
279 |
10.Использование компилятора командной строки
итекстового редактора Geany
Одним из самых мощных современных кроссплатформенных компиляторов языка С++ является свободно-распространяемый компилятор g++. Для его установки в debian-подобных ОС семейства Linux (Debian, Ubuntu, Mint и их клоны) достаточно выполнить команду терминала apt-get install g++ с правами суперпользователя (администратора) или воспользоваться менеджером пакетом synaptic.
Установка компилятора g++ в ОС семейства Windows несколько сложнее, поэтому рассмотрим этот процесс более подробно.
1.На сайте mingw.org переходим в раздел Download (Загрузки), в появившемся окне щелкаем по ссылке Download mingw-get-setup.exe (см. рис. 10.2). Загружаем установочный файл и запускаем его.
2.На первом этапе установки необходимо выбрать команду Install (см. рис. 10.3), затем папку для установки (см. рис. 10.4).
3.После этого начнётся процесс доустановки инсталлятора (см. рис. 10.5).
4.Далее выбираем компиляторы для установки (С++, Fortran, Ada) (рис. 10.6) и ждем пока будут скачаны и установлены необходимые компиляторы. После завершения процесса установки компиляторы (в нашем случае компилятор С++) готовы к использованию. Но для вызова их (из командной строки Windows, из текстового редактора Geany) необходимо указывать полное имя файла с компилятором. При установке компилятора С++ в стандартный каталог C:\MinGW – полное имя компилятора С++ будет таким C:\MinGW\bin\g++. Для того, чтобы каждый раз не писать полное имя компиляторы, можно добавить путь C:\MinGW\bin в список путей системной переменной Path.
5.Для изменения значения системной переменной Path необходимо в панели управления выбрать Система – Дополнительные параметры системы –
Дополнительно – Переменные среды – Системные переменные — Path –
Изменить. В открывшемся диалоговом окне добавить путь C:\MinGW\bin\. После перезагрузки ОС Windows для обращения к компилятору достаточно будет
указывать его имя – g++.
Таким образом, в ОС Linux для работы с компилятором в командной строке необходимо запустить Терминал, а в ОС Windows – командную строку. После чего работа с компилятором g++ с ОС Windows и Linux идентична.
Рассмотрим опции компилятора командной строки, необходимые для компиляции и запуска простейших программ.
Для того, чтобы создать исполняемый файл из текста программы на С++,
необходимо выполнить команду g++ name.cpp
Здесь name.cpp – имя файла с текстом программы. В результате будет создан исполняемый файл со стандартным именем a.out. Для того, чтобы создать
исполняемый файл с другим именем, необходимо выполнить команду g++ -o nameout name.cpp
Здесь name.cpp – имя файла с текстом программы, nameout – имя исполняемого файла.
При использовании компилятора g++ после компиляции программы автоматически происходит компоновка программы (запуск компоновщика make). Чтобы исключить автоматическую компоновку программы следует использовать опцию -c. В этом случае команда будет иметь вид g++ -c name.cpp
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
280 |
Рисунок 10.1. Окно загрузки mingw
Рисунок 10.2. Первое окно установки mingw
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
281 |
Рисунок 10.3. Выбор папки для установка компилятора
Рисунок 10.4. Загрузка инсталятора
Технология работы с компилятором g++ может быть такой: набираем текст программы в стандартном текстовом редакторе, потом в консоли запускаем компилятор, после исправления синтаксических ошибок, запускаем исполняемый файл. После каждого изменения текста программы, надо сохранить изменения в файле на диске, запустить компилятор, и только после этого запускать программу (исполняемый файл). Очень важно не забывать сохранять текст программы, иначе при запуске компилятора будет компилироваться старая версия текста программы.
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
282 |
Рисунок 10.5. Выбор устанавливаемых компиляторов
Компилятор g++ эффективен при разработке больших комплексов программ, он позволяет собирать приложения из нескольких файлов, создавать библиотеки программ. Рассмотрим процесс создания и использования библиотеки решения задач линейной алгебры (см. п. 6.4, задачи 6.10 – 6.12):
•int SLAU(double **matrica_a, int n, double *massiv_b, double *x) – функция решения системы линейных алгебраических уравнений;
•int INVERSE(double **a, int n, double **y) – функция вычисления обратной матрицы;
•double determinant(double **matrica_a, int n) – функция
вычисления определителя.
Для создания библиотеки создадим файлы заголовочный файл slau.h и slau.cpp, в который поместим тексты всех трёх функций решения задач линейной алгебры.
Далее приведен текст файла slau1.h.
int SLAU(double **matrica_a, int n, double *massiv_b, double *x);
int INVERSE(double **a, int n, double **y); double determinant(double **matrica_a, int n);
Следующий листинг содержит текст файла slau1.cpp.
#include <math.h>
int SLAU(double **matrica_a, int n, double *massiv_b, double *x)
{
int i,j,k,r;
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
283 |
double c,M,max,s; double **a, *b;
a=new double *[n]; for(i=0;i<n;i++) a[i]=new double[n]; b=new double [n];
for(i=0;i<n;i++)
for(j=0;j<n;j++) a[i][j]=matrica_a[i][j];
for(i=0;i<n;i++) b[i]=massiv_b[i]; for(k=0;k<n;k++)
{
max=fabs(a[k][k]);
r=k;
for(i=k+1;i<n;i++)
if (fabs(a[i][k])>max)
{
max=fabs(a[i][k]);
r=i;
}
for(j=0;j<n;j++)
{
c=a[k][j];
a[k][j]=a[r][j];
a[r][j]=c;
}
c=b[k];
b[k]=b[r];
b[r]=c;
for(i=k+1;i<n;i++)
{
for(M=a[i][k]/a[k][k],j=k;j<n;j++) a[i][j]-=M*a[k][j];
b[i]-=M*b[k];
}
}
if (a[n-1][n-1]==0) if(b[n-1]==0)
return -1; else return -2;
else
{
for(i=n-1;i>=0;i--)
{
for(s=0,j=i+1;j<n;j++)
s+=a[i][j]*x[j]; x[i]=(b[i]-s)/a[i][i];
}
return 0;
}
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
284 |
}
int INVERSE(double **a, int n, double **y)
{
int i,j,res; double *b, *x; b=new double [n]; x=new double [n]; for(i=0;i<n;i++)
{
for(j=0;j<n;j++) if (j==i)
b[j]=1; else b[j]=0;
res=SLAU(a,n,b,x); if (res!=0)
break;
else
for(j=0;j<n;j++)
y[j][i]=x[j];
}
if (res!=0) return -1;
else
return 0;
}
double determinant(double **matrica_a, int n)
{
int i,j,k,r;
double c,M,max,s,det=1; double **a;
a=new double *[n]; for(i=0;i<n;i++) a[i]=new double[n]; for(i=0;i<n;i++)
for(j=0;j<n;j++) a[i][j]=matrica_a[i][j];
for(k=0;k<n;k++)
{
max=fabs(a[k][k]);
r=k;
for(i=k+1;i<n;i++)
if (fabs(a[i][k])>max)
{
max=fabs(a[i][k]);
r=i;
}
if (r!=k) det=-det; for(j=0;j<n;j++)
{
c=a[k][j];
a[k][j]=a[r][j];
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
285 |
a[r][j]=c;
}
for(i=k+1;i<n;i++)
for(M=a[i][k]/a[k][k],j=k;j<n;j++) a[i][j]-=M*a[k][j];
}
for(i=0;i<n;i++)
det*=a[i][i]; return det; for(i=0;i<n;i++)
delete [] a[i]; delete [] a;
}
В качестве тестовой задачи создадим главную функцию, которая предназначена
для решения системы линейных алгебраических уравнений:
#include <iostream> #include <math.h>
#include "slau1.h" //Подключение личной библиотеки slau.
using namespace std; |
|
int main() |
|
{ |
|
int result,i,j,N; |
|
double **a, *b, *x; |
|
cout<<"N="; cin>>N; |
|
a=new double *[N]; |
|
for(i=0;i<N;i++) |
|
a[i]=new double[N]; |
|
b=new double [N]; |
|
x=new double [N]; |
|
cout<<"Input Matrix A"<<endl; |
|
for(i=0;i<N;i++) |
|
for(j=0;j<N;j++) |
|
cin>>a[i][j]; |
|
cout<<"Input massiv B"<<endl; |
|
for(i=0;i<N;i++) |
|
cin>>b[i]; |
//Вызов функции решения СЛАУ |
result=SLAU(a,N,b,x); |
|
if (result==0) |
//из библиотеки slau.h. |
|
|
{ |
|
cout<<"Massiv X"<<endl; |
// Вывод массива решения. |
for(i=0;i<N;i++) |
|
cout<<x[i]<<"\t"; |
|
cout<<endl; |
|
}
else if (result==-1)
cout<<"Бесконечное множество решений\n"; else if (result==-2)
cout<<"Нет решений\n";
}
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
286 |
Теперь необходимо из этих текстов создать работающее приложение. Рассмотрим это поэтапно.
1.Компиляция библиотеки slau1.h с помощью команды g++ -c slau1.cpp.
2.Компиляция главной функции main.cpp с помощью команды g++ -c main.cpp.
3.Создание исполняемого файла с именем primer из двух откомпилированных файлов main.o и slau1.o с помощью команды g++ main.o slau1.o -o primer.
4.Запуск исполняемого файла.
После разработки библиотеки линейной алгебры пример slau1, можно использовать её в различных программах при вычислении определителя, обратной матрицы и решения систем линейных алгебраических уравнений.
При разработки программ с большим количеством вычислений, компилятор g++ позволяет оптимизировать программы по быстродействию. Для получения оптимизированных программ можно использовать ключи -O0, -O1, -O2, -O3, -Os:
•при использовании ключа -O0 оптимизация отключена, достигается максимальная скорость компиляции, опция задействована по умолчанию;
•при использовании ключа «мягкой» оптимизации -O1 происходит некоторое увеличение времени компиляции, этот ключ оптимизации позволяет одновременно уменьшать занимаемую программой память и уменьшить время выполнения программы;
•при использовании ключа -02 происходит существенное уменьшение времени работы программы, при этом не происходит увеличение памяти занимаемой программой, не происходит развертка циклов и автоматическое встраивание функций;
•ключ «агрессивной» оптимизации -O3 нацелен в первую очередь на уменьшение времени выполнения программы, при этом может произойти увеличение объёма кода и времени компиляции, в этом случае происходит развертка циклов и автоматическое встраивание функций;
•ключ -Os ориентирован на оптимизацию размера программы, включаются те опции из набора -O2, которые обычно не увеличивают объём кода, применяются
некоторые другие оптимизации, направленные на снижение его объёма.
Для разработки программ на различных языках программирования можно использовать текстовый редактор Geany. Редактор Geany входит в репозитории большинства дистрибутивов Linux, его установка осуществляется стандартным для вашего дистрибутива образом (в debian-подобных ОС с помощью команды apt-get install geany). Для установки его в Windows необходимо скачать со страницы http://www.geany.org/Download/Releases инсталляционный файл и установить программу стандартным способом.
Разработка программ с использованием Geany более эффективна. Окно Geany представлено на рис. 10.6.
Последовательно рассмотрим основные этапы разработки программы с использованием Geany.
1. Необходимо создать шаблон приложения на C/C++ (или другом языке программирования) с помощью команды Файл – Создать из шаблона – main.cxx. После чего необходимо ввести текст программы и сохранить его.
2. Для компиляции и запуска программы на выполнение служит пункт меню Сборка. Для компиляции программы следует использовать команду Скомпилировать (F8). В этом случае будет построен объектный код программы (файл с расширением .o или .obj). Для создания исполняемого кода программы служит команда Сборка (F9). Для запуска программы следует выполнить команду Выполнить (F5).
Параметры компилятора определяются автоматически после выбора шаблона
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
287 |
(Файл – Создать из шаблона). Однако, команды компиляции и сборки по умолчанию можно изменить, используя команду Сборка – Установить параметры сборки (рис. 10.7). Здесь %f – имя компилируемого файла, %e – имя файла без расширения.
Рис. 10.6. Окно Geany
Рис. 10.7. Настройка компиляции программ на языке С++ в Geany
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
288 |
Алфавитный указатель |
|
алгоритм................................................................................................................................... |
41 |
линейный............................................................................................................................. |
41 |
основные конструкции....................................................................................................... |
41 |
разветвляющийся................................................................................................................ |
41 |
цикл с параметром.............................................................................................................. |
65 |
цикл с постусловием.......................................................................................................... |
64 |
цикл с предусловием.......................................................................................................... |
63 |
циклический.................................................................................................................. |
41, 62 |
библиотека................................................................................................................................... |
|
complex.............................................................................................................................. |
263 |
fstream................................................................................................................................ |
238 |
iomanip.............................................................................................................................. |
235 |
iostream.................................................................................................................... |
6, 34, 238 |
math.h................................................................................................................................... |
13 |
stdlib.h........................................................................................................................ |
135, 252 |
string.h............................................................................................................................... |
250 |
библиотека комплексных чисел................................................................................................. |
|
операции с массивами...................................................................................................... |
267 |
определение переменной................................................................................................. |
264 |
организация ввода-вывода............................................................................................... |
264 |
основные функции............................................................................................................ |
265 |
блок-схема............................................................................................................................... |
41 |
выражение................................................................................................................................ |
19 |
директивы................................................................................................................................ |
29 |
идентификатор........................................................................................................................ |
14 |
интерпретатор........................................................................................................................... |
8 |
ключевые слова....................................................................................................................... |
14 |
комментарии............................................................................................................................ |
14 |
компилятор................................................................................................................................ |
8 |
константа................................................................................................................................. |
17 |
массив............................................................................................................................... |
17, 133 |
ввод.................................................................................................................................... |
138 |
вывод......................................................................................................................... |
138, 140 |
выделение памяти............................................................................................................. |
135 |
двумерный................................................................................................................. |
133, 187 |
динамический.................................................................................................................... |
135 |
индекс................................................................................................................................ |
133 |
одномерный....................................................................................................................... |
133 |
освобождение памяти...................................................................................................... |
136 |
поиск максимального элемента....................................................................................... |
143 |
поиск минимального элемента........................................................................................ |
145 |
произведение элементов.................................................................................................. |
141 |
сортировка........................................................................................................................ |
162 |
статический....................................................................................................................... |
133 |
сумма элементов............................................................................................................... |
140 |
удаление элемента............................................................................................................ |
155 |
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
289 |
Метод Гаусса............................................................................................................................... |
|
решение систем линейных уравнений............................................................................. |
205 |
операнд..................................................................................................................................... |
19 |
оператор....................................................................................................................................... |
|
ввода.................................................................................................................................. |
233 |
вывода................................................................................................................................ |
233 |
разветвляющийся................................................................................................................ |
42 |
составной............................................................................................................................. |
42 |
условный............................................................................................................................. |
42 |
цикл с параметром.............................................................................................................. |
65 |
цикл с постусловием.......................................................................................................... |
64 |
цикл с предусловием.......................................................................................................... |
63 |
циклический........................................................................................................................ |
62 |
операции................................................................................................................................... |
19 |
арифметические........................................................................................................... |
21, 26 |
бинарные.............................................................................................................................. |
19 |
битовой арифметики.......................................................................................................... |
22 |
декремента.......................................................................................................................... |
22 |
инкремента.......................................................................................................................... |
22 |
логические........................................................................................................................... |
24 |
множественного присваивания.......................................................................................... |
21 |
отношения........................................................................................................................... |
24 |
получение адреса................................................................................................................ |
25 |
преобразования типа.......................................................................................................... |
25 |
присваивания................................................................................................................ |
20, 25 |
разадресации....................................................................................................................... |
25 |
составного присваивания................................................................................................... |
21 |
унарные................................................................................................................................ |
19 |
условная.............................................................................................................................. |
24 |
целочисленной арифметики.............................................................................................. |
22 |
передача параметров............................................................................................................. |
102 |
по адресу........................................................................................................................... |
103 |
по значению....................................................................................................................... |
103 |
переменная............................................................................................................................... |
14 |
глобальная................................................................................................................... |
30, 102 |
значение............................................................................................................................... |
14 |
имя....................................................................................................................................... |
14 |
локальная.................................................................................................................... |
29, 102 |
описание.............................................................................................................................. |
14 |
подпрограмма.......................................................................................................................... |
99 |
потоки.................................................................................................................................... |
237 |
программа................................................................................................................................ |
28 |
структура............................................................................................................................ |
28 |
рекурсия................................................................................................................................. |
120 |
строки............................................................................................................................... |
18, 249 |
ввод.................................................................................................................................... |
250 |
операции............................................................................................................................ |
253 |
функции............................................................................................................................. |
253 |
Алексеев Е.Р., Чеснокова О.В. Самоучитель по программированию на C/C++. |
290 |
функции обработки.......................................................................................................... |
250 |
структуры........................................................................................................................ |
18, 256 |
типы данных............................................................................................................................. |
14 |
вещественный...................................................................................................................... |
16 |
логический.......................................................................................................................... |
17 |
основные.............................................................................................................................. |
15 |
символьный......................................................................................................................... |
15 |
составные............................................................................................................................ |
15 |
структурированные............................................................................................................ |
17 |
целый................................................................................................................................... |
15 |
транслятор................................................................................................................................. |
8 |
указатель.................................................................................................................................. |
18 |
вычитание............................................................................................................................ |
26 |
декремент............................................................................................................................ |
26 |
инкремент............................................................................................................................ |
26 |
получение адреса................................................................................................................ |
25 |
присваивание....................................................................................................................... |
25 |
разадресация....................................................................................................................... |
25 |
сложение с константой....................................................................................................... |
26 |
файл.............................................................................................................................................. |
|
двоичных файлах.............................................................................................................. |
244 |
закрыть.............................................................................................................................. |
245 |
запись......................................................................................................................... |
238, 244 |
открыть...................................................................................................................... |
238, 244 |
переименование................................................................................................................ |
245 |
последовательный доступ................................................................................................ |
246 |
текстовый.......................................................................................................................... |
237 |
удаление............................................................................................................................ |
245 |
чтение........................................................................................................................ |
238, 244 |
функция................................................................................................................................... |
99 |
ввода.................................................................................................................................... |
30 |
возврат результата.................................................................................................... |
101, 104 |
вывода.................................................................................................................................. |
30 |
вызов.................................................................................................................................. |
100 |
заголовок............................................................................................................................. |
99 |
механизм передачи параметров....................................................................................... |
102 |
описание.............................................................................................................................. |
99 |
перегрузка имени.............................................................................................................. |
123 |
прототип............................................................................................................................ |
100 |
рекурсивная...................................................................................................................... |
120 |
стандартная......................................................................................................................... |
27 |
тело функции...................................................................................................................... |
99 |
фактические параметры................................................................................................... |
102 |
формальные параметры................................................................................................... |
102 |
шаблон............................................................................................................................... |
124 |
main()............................................................................................................................... |
7, 28 |