4.3. Нахождение элементов с заданным свойством
Задачи на нахождение номеров элементов с заданным свойством и на нахождение количества таких элементов решаются практически так же, как и для одномерных массивов. Необходимо лишь добавить внутренний цикл по второму индексу.
Пример 4.3. Найти количество отрицательных элементов в каждой строке матрицы.
Дано: n, m – количество строк и столбцов массива соответственно, массив Х[n, m].
Найти K[n] – количество отрицательных элементов в каждой строке.
Данные |
Результат |
||
N |
M |
Х |
K |
2 |
3 |
–3 –1 7 4 3 2 |
2 0 |
Рассмотрим несколько вариантов решения этой задачи.
Можно хранить количество отрицательных элементов каждой строки в одномерном массиве соответствующей размерности:
Фрагмент алгоритма в этом случае выглядит так:
нц
Для i от 1 до n выполнить
k[i] = 0
нц
Для j от 1 до m выполнить
Если x[i, j] < 0 то k[i] = k[i] + 1
Все если
кц
кц
В этом случае для вывода результата используем цикл:
нц
Для i от 1 до n выполнить
Вывод “В ”, i, “– ой строке “, k[i], “ отрицательных элементов”
кц
Можно использовать счетчик, находить количество отрицательных элементов строки и сразу выводить найденное значение на экран. В этом случае можно использовать простую переменную.
нц
Для i от 1 до n выполнить
k = 0
нц
Для j от 1 до m выполнить
Если x[i, j] < 0 то k = k + 1
Все если
кц
Вывод “В “, i, “ – ой строке “, k, “ отрицательных элементов”
кц
Пример 4.4. Найти максимальный элемент массива и его индексы.
Дано: n, m – количество строк и столбцов массива соответственно, массив А[n, m].
Найти Max – максимальный элемент массива, а также Maxi и Maxj – номер строки и столбца соответственно, на пересечении которых находится максимальный элемент.
Словесное описание алгоритма. Пусть первый элемент матрицы является максимальным. Запоминаем его значение и индексы. Сравниваем максимальное значение со всеми оставшимися элементами. Если запомненное максимальное значение меньше очередного элемента матрицы, то запоминаем новое значение и его индексы.
Так как значения элементов в матрице могут повторяться, то договоримся, что будем запоминать только индексы первого максимального элемента.
Фрагмент блок-схемы нахождения максимума в двумерном массиве:
Тест
Данные |
Результат |
||
n |
m |
A |
|
2 |
3 |
1 2 5 5 1 5 |
Max = 5; Maxi = 1; Maxj = 3 |
Исполнение алгоритма нахождения максимума в двумерном массиве.
i |
j |
A[i, j] > max |
Результат |
1 |
1 |
Нет |
Max = 1; Maxi = 1; Maxj = 1 |
2 |
Да |
Max = 2; Maxi = 1; Maxj = 2 |
|
3 |
Да |
Max = 5; Maxi = 1; Maxj = 3 |
|
2 |
1 |
Нет |
|
2 |
Нет |
|
|
3 |
Нет |
|
Пример 4.5. Вычислить количество элементов заданной целочисленной матрицы A[n, m], равных ее максимальному элементу.
Дано: n, m – количество строк и столбцов массива соответственно, массив A[n, m].
Найти K – количество элементов, равных максимальному элементу матрицы.
Поставленную задачу можно представить как совокупность двух подзадач: одна из них – это задача нахождения максимального элемента, алгоритм которой нам уже известен, а другая задача – это задача нахождения в матрице элементов, равных ее максимальному элементу.
Задачу можно решить только для целых чисел. Подумайте, почему нельзя использовать вещественные числа.
Тест
Данные |
Результат |
||
n |
m |
A |
K |
2 |
3 |
1 2 5 5 1 5 |
3 |
Исполнение алгоритма подсчета количества максимумов:
i |
j |
A[i, j] = Amax |
K |
|
|
|
0 |
1 |
1 |
Нет |
|
2 |
Нет |
|
|
3 |
Да |
1 |
|
2 |
1 |
Да |
2 |
2 |
Нет |
|
|
3 |
Да |
3 |