Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 2021 / OIT_lek_sem_22_09_2021.docx
Скачиваний:
1
Добавлен:
14.12.2023
Размер:
38.04 Кб
Скачать

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

Соседние файлы в папке Лекции 2021