- •Предисловие
- •Раздел I. Основы алгоритмизации
- •1. Общие понятия
- •2. Классификация алгоритмов
- •2.1. Циклы с известным числом повторений
- •2.2. Циклы с неизвестным числом повторений
- •2.3. Сложные циклы
- •2.4. Алгоритмы с массивами
- •2.5. Алгоритмы вычисления степенных полиномов
- •2.6. Алгоритмы нахождения наибольшего (наименьшего) из множества значений
- •Раздел II. Элементы программирования на языке С++
- •3. Из истории развития языка С++
- •4. Структура программы на языке С++
- •5. Ввод и вывод в С++
- •6. Основные элементы языка С++
- •6.1. Алфавит
- •6.2. Идентификаторы
- •6.3. Переменные и константы
- •7. Операции и выражения
- •7.1. Выражение и его интерпретация
- •7.2. Арифметические операции
- •7.3. Логические операции и операции отношения
- •7.4. Операция условия
- •7.5. Операция присваивания
- •7.6. Операция sizeof
- •7.7. Преобразование типов
- •7.8. Порядок выполнения операций
- •8. Операторы управления
- •8.1. Общие сведения
- •8.2. Оператор if
- •8.3. Операторы switch
- •8.4. Оператор while
- •8.5. Оператор for
- •8.6. Операторы break и continue
- •9. Функции
- •9.1.Описание функции
- •9.2. Правила работы с функциями
- •9.3. Передача параметров
- •10. Указатели
- •10.1. Назначение указателей
- •10.3. Выражения и арифметические действия с указателями
- •11. Массивы
- •11.1. Одномерные массивы
- •11.2. Многомерные массивы
- •11.3. Примеры использования массивов
- •11.4. Массивы и функции
- •11.5. Массивы и указатели
- •12.Форматирование ввода-вывода
- •12.2. Неформатированный ввод - вывод
- •13. Область видимости переменных
- •14. Работа с файлами
- •15. Структуры
- •16. Классы
- •16.1. Определение класса
- •16.2. Доступ к элементам класса и их область действия
- •16.3. Отделение интерфейса от реализации
- •16.4. Управление доступом к элементам
- •16.5. Дружественные функции и дружественные классы
- •Библиографический список
- •Предметный указатель
17
В примере 9 рассматривается двумерный массив, элементы которого являются переменными с двумя индексами. Поэтому для перебора всех элементов массива в блок-схеме алгоритма на рис. 2.13 необходимо изменять два параметра: i
–номер строки; j – номер столбца.
2.5.Алгоритмы вычисления степенных полиномов
Вычисление степенных полиномов вида Y = a1 xn +a2 xn-1 +…+an +an+1 наиболее целесообразно проводить по формуле Горнера, при использовании кото-
рой степенной полином переписывается в виде Y = (…((a1 x + a2 )x + a3)x + …+ +an )x+an+1.Такая запись полинома существенно сокращает время вычислений, так как наиболее трудоемкая операция, cвязанная с возведением в степень переменной x в данном случае заменяется расчетом порекуррентной формуле Y = ak x + ak+1, где k = 1,2,…,n. Коэффициенты полинома сводятся в массив, включающий (n+1) элемент. Начальное значение переменной Y, задаваемое перед циклом должно быть равно коэффициенту a1 при x в старшей степени, а параметр цикла должен изменяться от 2 до n+1.
Пример 10. Составить алгоритм вычисления полинома степени n, при начальном значении переменной Y = a1 и заданных значениях массива коэффициентов полинома A(n+1).Блок-схема алгоритма приведена на рис. 2.14.
Начало
Ввод x,n,A(n+1)
Y= a1
k=2,n+1
Y= Y*x + ak
1
18
Рис. 2.14
1
Вывод Y
Конец
Рис. 2.14. Окончание
2.6. Алгоритмы нахождения наибольшего (наименьшего) из множества значений
Реализация этих алгоритмов осуществляется в цикле путём сравнения некоторого текущего значения с наибольшим из всех предыдущих. При этом если текущее значение больше наибольшего из всех предыдущих, то наибольшему присваивается значение текущего. В противном случае наибольшее сохраняет прежнее значение. Этот процесс описывается следующим образом:
Ymax =Yi , если Yi > Ymax; или
Ymax = Ymax, если Yi < Ymax.
Для применения указанной формулы при первом выполнении цикла необходимо в качестве начального значения Ymax взять заведомо небольшое число, например – (1030). Тогда после первого выполнения Ymax примет значение Y1, так как Y1 наверняка больше – (1030 ). При втором выполнении цикла Ymax сравнивается с Y2 и находится наибольшее из Y1 и Y2 и так далее. Аналогичным образом находится наименьшее среди набора элементов, при использовании формулы
Ymin = Yi, если Yi < Ymin;
или
Ymin =Ymin, если Yi >Ymin .
Начальное значение переменной в этом случае следует принимать Ymin = 1030 . Пример 11. Найти наибольшее значение функции Y=abs(a) eax-x^2 при изме-
нении аргумента x от 0 до a с шагом h. Блок-схема алгоритма решения данного примера приведена на рис. 2.15. Значения коэффициента а и шага h вводятся в
режиме диалога. После присвоения переменной Ymax минимального значения организуется цикл по переменной x, для каждого значения которой вычисляется функция Y. На каждом шаге вычисления осуществляется сравнение значений функций Y и Ymax . Если Y > Ymax, то Ymax присваивается значение Y, в против-
19
ном случае значение Ymax остается неизменным. По завершении цикла на печать выводится максимальное значение функции Ymax.
Начало |
Ввод a,h |
Ymax = - (1030 ) |
x=0,a,h |
Y =abs(x)eax-x^2 |
нет |
Y> Ymax |
да |
Ymax =Y |
Вывод Y |
Конец
Рис. 2.15
20
Пример12. Найти наименьший элемент массива (x1,x2,…,x10 ) и его порядковый номер. Особенностью решения является то, что необходимо найти не только минимальный по значению элемент, но и его порядковый номер. Для этого следует всякий раз, когда в цикле выполняется условие xi<x min , присваивать не только x min=x i , но и i min = i. В качестве начального значения x min целесообразно задать значения x1, а цикл выполнить при изменении i от 2 до 10. Блоксхема алгоритма решения данного примера приведена на рис. 2.16. По окончании цикла значения x min и i min выводятся на печать.
Начало |
Ввод мас- |
сива X(10) |
xmin = x1, |
imin =1 |
i = 2,10 |
xi < xmin |
нет |
да |
xmin = xi, |
imin = i |
Вывод xmin |
Конец
Рис. 2.16
21
Пример 13. Упорядочить элементы массива ( а1 , а2 , …,а10 ), расположив их по убыванию в том же массиве.
Начало |
1 |
|
Ввод A(10) |
2 |
|
|
||
|
1 |
|
k= 1,9 |
3 |
|
|
||
amax = a(k) |
4 |
|
nmax = k |
||
|
||
i = k+1,10 |
5 |
|
|
||
|
6 |
|
a(i) ≤ amax |
|
|
|
7 |
|
amax = ai, |
|
|
nmax = i |
|
|
|
8 |
|
amax = a(k) |
|
|
a(k) = amax |
|
|
Вывод a(k) |
9 |
|
|
||
Конец |
|
|
Рис. 2.17 |
|
