Опубликовано: 2021-03-10 12:00:00
Решение задач на матрицы. Часть вторая
Во многих задачах требуется поменять местами один элемент массива с другим элементом. В этом случае, нужно запомнить его индекс, а затем использовать его в алгоритме замены.
В задачах на нахождение минимума / максимума всегда встает вопрос: с чем сравнивать элементы массива. Для этой цели обычно служит первый элемент, с которым последовательно сравниваются все элементы массива.
Задача: Поменять местами минимальный (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) найти число (количество) отрицательных элементов в области выше главной и ниже побочной диагонали. Поменять местами первый элемент первой строки и последний элемент последней строки матрицы.
- REM MATRIX
- CLS: RANDOMIZE TIMER: CONST N = 7
- 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
- KOL_OTR_V_GL = 0
- KOL_OTR_N_PO = 0
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (I < J) AND (A(I, J) < 0) THEN KOL_OTR_V_GL = KOL_OTR_V_GL + 1
- IF (J > N - I + 1) AND (A(I, J) < 0) THEN
- KOL_OTR_N_PO = KOL_OTR_N_PO + 1
- END IF
- NEXT J
- NEXT I
- PRINT "KOLICHESTVO OTRITSATELNYKH VYSHE GLAVNOY:"; KOL_OTR_V_GL
- PRINT "KOLICHESTVO OTRITSATELNYKH NIZHE POBOCHNOY:"; KOL_OTR_N_PO
- PRINT: PRINT "POMENYAYEM MESTAMI PERVYY I POSLEDNIY ELEMENTY"
- TEMP = A(1, 1)
- A(1, 1) = A(N, N)
- A(N, N) = TEMP
- FOR I = 1 TO N
- FOR J = 1 TO N
- PRINT USING "#### "; A(I, J);
- NEXT J: PRINT
- NEXT I
- END
Рисунок 5 – Исходный текст третьей программы
Рисунок 6 – Результат выполнения третьей программы
В следующей статьей мы попробуем менять строки и столбцы друг с другом.
Спасибо за прочтение этой статьи.