4.6. Дополнительные примеры использования управляющих структур в программе
В данном разделе приводятся тексты программ для типовых вычислений: нахождения максимального, минимального значений в векторе или матрице, вычисления среднего арифметического, сортировки элементов в массиве (упорядочивания).
Рассмотрим задачу (пример 8) определения наибольшего элемента массива b[10] и его порядкового номера.
Пример 8.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
Void main() {
const int nmas = 10;
int i, imax;
double bmax, b[nmas];
for (i = 0; i < nmas; i++) {
cout << "\nb[" << i << "]=";
cin >> b[i];
}// ввод элементов массива b с клавиатуры
bmax = b[0];
imax = 0;
for (i = 1; i < nmas; i++)
if (b[i] > bmax) {
bmax = b[i];
imax = i;
}
cout << "\n bmax=" << bmax << ' ' << "imax=" << imax;
}// конец функции main
Размерность массива b объявляется как именованная константа (const int nmas=10;). Ввод вектора b выполняется в цикле for. Далее переменной bmax присваивается значение элемента массива b с индексом 0, а порядковому номеру imax ‒ значение 0. Затем в цикле for в зависимости от условия b[i]>bmax переменные bmax и imax могут получить новые значения. В результате после окончания цикла в bmax будет занесено максимальное значение элемента массива, а в imax ‒ его порядковый номер.
Следующий пример 9 иллюстрирует работу с матрицей. Любые операции с таким массивом требуют организации в программе вложенных один в другой циклов. Внутренний цикл выполняется полностью для каждого из значений управляющей переменной внешнего цикла. Реализуем код программы для нахождения среднего арифметического положительных элементов каждой строки матрицы A[n,n], при условии, что в каждой строке есть хотя бы один положительный элемент. Значение n требуется инициализировать.
Пример 9.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main
Void main() {
const int n = 3;
int i, j, k;
double A[n][n], SUM, MIDPOL[n];
/* ввод матрицы с клавиатуры*/
cout << "*****A*****";
cout << "\n";
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
cin >> A[i][j];
}
for (i = 0; i < n; i++) {// внешний цикл
k = 0;
SUM = 0;
for (j = 0; j < n; j++) // внутренний цикл
if (A[i][j] > 0) {
SUM += A[i][j];
k++;
}// конец внутреннего цикла
MIDPOL[i] = SUM / k;
}// конец внешнего цикла
/* вывод результата на экран*/
for (i = 0; i < n; i++)
cout << MIDPOL[i] << ' ';
}// конец функции main
Ввод матрицы A выполняется во вложенных циклах. Внешний цикл с управляющей переменной i организован для перебора строк матрицы A, а внутренний цикл j – для перебора столбцов. Таким образом, массив вводится с клавиатуры построчно. Далее во внешнем цикле по строкам матрицы выполняется составной оператор, включающий четыре операции:
k=0; – обнуление счётчика положительных элементов для каждой строки матрицы;
SUM=0; – обнуление значения переменной, накапливающей сумму положительных элементов, при переходе к новой строке;
внутренний цикл по столбцам матрицы:
for (j=0; j<n; j++)
if (A[i][j]>0) {SUM+=A[i][j]; k++;} – если A[i][j] положительное число, то значение переменной SUM увеличивается на величину A[i][j], а счётчик положительных элементов в строке – на 1;
вычисление среднего арифметического положительных элементов для каждой строки и запись результата в вектор MIDPOL[i].
В конце программы в цикле выводится полученный массив MIDPOL[i].
При работе с массивами данных может потребоваться их упорядочивание. Это означает, что элементы заданного массива нужно расположить строго в определённом порядке (по возрастанию или убыванию). Из существующего множества алгоритмов сортировки рассмотрим "метод пузырька". Если упорядочивать данным методом по возрастанию, то элементы массива с меньшим значением постепенно "всплывают" в начало массива (аналогия с пузырьком воздуха в воде), а с большим – друг за другом уходят в конец массива.
В примере 10 этот алгоритм сортировки реализован программно.
Пример 10.
#include "stdafx.h"
#include <iostream>
using namespace std;
// основная функция main