7.1.19Перестановки элементов матрицы
Есть задачи, в которых требуется менять местами элементы матрицы. Ниже перечислены некоторые из таких задач.
Транспонирование матрицы (поворот вокруг главной диагонали).
Поворот вокруг вспомогательной диагонали.
Поворот вокруг горизонтальной оси.
Поворот вокруг вертикальной оси.
Таблица 9.2 – Параметры циклов при перестановках элементов матрицы
Линия симметрии при повороте
По элементам строки (индексы столбца)
от i=1 до nRow -1
от j = 1 до nCol — i
[nRow–j +1, nCol – i+1]
от i=1 до nRow div 2
По элементам строки (индексы столбца)
от j = 1 до nCol
По элементам строки (индексы столбца)
от j = 1 до nCol div 2
Для решения всех этих задач требуется двойной цикл. Внешний цикл обычно организуется по всем номерам строк или столбцов, иногда, за исключением первого или последнего номера. Внутренний же цикл обеспечивает перебор только половины элементов, которые расположены с одной стороны от оси поворота. Тело цикла содержит операторы, которые обеспечивают обмен значениями между текущим элементом матрицы и симметричным ему. Для организации обмена удобнее всего использовать промежуточную переменную.
Основная трудность, возникающая при решении этих задач, это определение индексов элемента, симметричного текущему элементу.
В таблице 8.1 приведены параметры циклов, обеспечивающих перевороты элементов матрицы вокруг различных осей симметрии. Индексные выражения, приведенные в таблице, составлены в предположении, что нижние индексы строк и столбцов раны единице, верхние индексы столбцов и строк соответственно равны nCol и nRow, а m – имя матрицы.
7.1.20Удаление и вставка элементов матрицы
Здесь подразумевается удаление столбца или стоки матрицы, так как удалять отдельный элемент матрицы мы не можем, не нарушив прямоугольную структуру.
Удаление или вставка строки или столбца подобно удалению или вставке элемента массива. При удалении нужно сдвинуть последующие строки влево или столбцы вверх, на место удаляемого компонента, и уменьшить соответствующий размер. При вставке нужно сдвинуть последующие строки вправо или столбцы вниз, освободив место для вставляемого компонента, и увеличить соответствующую границу матрицы.
QBASICBOOK.ru: сайт про QB64
Во многих задачах требуется поменять местами один элемент массива с другим элементом. В этом случае, нужно запомнить его индекс, а затем использовать его в алгоритме замены.
В задачах на нахождение минимума / максимума всегда встает вопрос: с чем сравнивать элементы массива. Для этой цели обычно служит первый элемент, с которым последовательно сравниваются все элементы массива.
Задача: Поменять местами минимальный (MIN) и максимальный (MAX) элементы друг с другом:
- REM MATRIX
- CLS: RANDOMIZE TIMER: CONST N = 5
- DIM A(N, N)
- A = 1: B = 20
- FOR I = 1 TO N
- FOR J = 1 TO N
- A(I, J) = INT((B — A + 1) * RND + A)
- NEXT J
- NEXT I
- FOR I = 1 TO N
- FOR J = 1 TO N
- PRINT USING «#### » ; A(I, J);
- NEXT J: PRINT
- NEXT I
- ‘POISK MINIMUMA
- MIN = A(1, 1)
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (A(I, J) < MIN) THEN
- MIN = A(I, J)
- INDEXMINI = I
- INDEXMINJ = J
- END IF
- NEXT J
- NEXT I
- ‘POISK MAKSIMUMA
- MAX = A(1, 1)
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (A(I, J) > MAX) THEN
- MAX = A(I, J)
- INDEXMAXI = I
- INDEXMAXJ = J
- END IF
- NEXT J
- NEXT I
- PRINT «MAKSIMALNYY ELEMENT:» ; MAX
- PRINT «NOMER MAX:» ; INDEXMAXI; INDEXMAXJ
- PRINT «MINIMALNYY ELEMENT:» ; MIN
- PRINT «NOMER MIN:» ; INDEXMINI; INDEXMINJ
- ‘PERSTANOVKA MESTAMI MAKSIMALNOGO I MINIMALNOGO ELEMENTOV
- VSPOMOGATTL_PEREMENNAYA = A(INDEXMAXI, INDEXMAXJ)
- A(INDEXMAXI, INDEXMAXJ) = A(INDEXMINI, INDEXMINJ)
- A(INDEXMINI, INDEXMINJ) = VSPOMOGATTL_PEREMENNAYA
- FOR I = 1 TO N
- FOR J = 1 TO N
- PRINT USING «#### » ; A(I, J);
- NEXT J: PRINT
- NEXT I
- END
Рисунок 1 – Исходный текст первой программы

Рисунок 2 – Результат выполнения первой программы
Задача: Дан двухмерный массив из A(NxN) элементов. Посчитать сумму и количество положительных чисел для каждой строки, сумму и количество положительных чисел во всем двумерном массиве.
- REM MATRIX
- CLS: RANDOMIZE TIMER: CONST N = 5
- DIM A(N, N)
- A = -10: B = 10
- FOR I = 1 TO N
- FOR J = 1 TO N
- A(I, J) = INT((B — A + 1) * RND + A)
- NEXT J
- NEXT I
- FOR I = 1 TO N
- FOR J = 1 TO N
- PRINT USING «#### » ; A(I, J);
- NEXT J: PRINT
- NEXT I
- KOLPOLVSEH = 0
- SUMPOLVSEH = 0
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (A(I, J) > 0) THEN
- KOLPOLVSEH = KOLPOLVSEH + 1
- SUMPOLVSEH = SUMPOLVSEH + A(I, J)
- END IF
- NEXT J
- NEXT I
- PRINT «KOLICHESTVO POLOZHITELNYKH ELEMENTOV» ; KOLPOLVSEH
- PRINT «SUMMA POLOZHITELNYKH ELEMENTOV» ; SUMPOLVSEH
- FOR I = 1 TO N
- SUM_P_EL = 0
- FOR J = 1 TO N
- IF (A(I, J) > 0) THEN SUM_P_EL = SUM_P_EL + A(I, J)
- NEXT J
- PRINT «V» ; I; «STROKE» ; SUM_P_EL; «POLOZHITELNYKH ELEMENTOV»
- NEXT I
- END

Рисунок 3 – Исходный текст второй программы

Рисунок 4 – Результат выполнения второй программы
Задача: В квадратной матрице А(7,7) найти число (количество) отрицательных элементов в области выше главной и ниже побочной диагонали. Поменять местами первый элемент первой строки и последний элемент последней строки матрицы.
Элементарные преобразования матрицы.
Элементарные преобразования используются в методе Гаусса для приведения матрицы к треугольному или ступенчатому виду.
Элементарными преобразованиями строк называют:
Аналогично определяются элементарные преобразования столбцов.
Примеры на элементарные преобразования матрицы
Используя элементарные преобразования строк преобразовать матрицу A в верхнюю треугольную матрицу, где
| A = | 4 | 2 | 0 |
| 1 | 3 | 2 | |
| -1 | 3 | 10 |
поменяем первую и вторую строку местами
ко 2-рой строке прибавим 1-вую, умноженную на -4; к третей строке прибавим первую
2-рую строку поделим на -2, третью строку делим на 6
поменяем вторую и третью строку местами
к 3-тей строке прибавим 2-рую, умноженную на -5
Любые нецензурные комментарии будут удалены, а их авторы занесены в черный список!
Добро пожаловать на OnlineMSchool.
Меня зовут Довжик Михаил Викторович. Я владелец и автор этого сайта, мною написан весь теоретический материал, а также разработаны онлайн упражнения и калькуляторы, которыми Вы можете воспользоваться для изучения математики.
Перестановка строк и столбцов
В этом задании приходится манипулировать только строками и столбцами двумерного массива. Заметьте, матрица квадратная, а значит количество строк и столбцов должно быть одинаково, с помощью функции abs находим модуль значения.
4 8 9 1
3 0 1 1 — это исходная матрица.
9 8 1 2
5 5 5 5
9 — наибольшее значение по модулю, находится в первой строке и в третьем столбце. Необходимо этот элемент переместить в правый нижний угол, но мы имеем право переставлять только строки и столбцы. Отдельно элемент перемещать нельзя.
5 5 5 5
3 0 1 1 — поменяли первую и последнюю строку местами.
9 8 1 2
4 8 9 1
5 5 5 5
3 0 1 1 — поменяли последний и предпоследний столбец местами.
9 8 2 1
4 8 1 9
И теперь элемент со значением 9 стоит в правом нижнем углу. Задача решена.
Ниже приведен код для этой задачи. Код самый простой и может усовершенствоваться (например разбиение его на несколько отдельных функций). Код прислал пользователь нашего сайта — Василий Шуверов. Огромное ему спасибо. Пользуйтесь на здоровье.