Опубликовано: 2021-03-04 12:30:00
Решение задач на матрицы. Часть первая
Широко распространенным видом деятельности компьютера является справочно-информационное обслуживание, которое включает в себя накапливание информации и выдачу ее по запросам.
С этой целью в памяти компьютера организуются таблицы данных, которые могут заполняться, просматриваться, корректироваться. Таблицы организуются таким образом, что любой элемент таблицы всегда доступен для немедленной обработки. С простейшей одномерной таблицей (массивом) мы уже познакомились. В сложных вычислительных системах имеют место двумерные, трехмерные и т.д. массивы.
В математике двумерные массивы носят название матрицы. Элементы двумерного массива (матрицы) имеют два номера — номер строки и номер столбца. Про такие матрицы мы и поговорим.
Задача: Необходимо сформировать одномерный массив (вектор) A(N) из отрицательных элементов двумерного массива (матрицы) B(5, 6).
- CLS
- RANDOMIZE TIMER
- CONST N = 5 'RAZMER MASSIVA PO STROKAM
- CONST M = 6 'RAZMER MASSIVA PO STOLBCAM
- DIM B(N, M)
- 'ZAPOLNENIYE SLUCHAYNYMI CHISLAMI OT -5 DO 10
- A = -5: B = 10
- KOTREL = 0
- FOR I = 1 TO N
- FOR J = 1 TO M
- B(I, J) = INT((B - A + 1) * RND + A)
- IF (B(I, J) < 0) THEN KOTREL = KOTREL + 1
- NEXT J
- NEXT I
- 'VIVOD
- FOR I = 1 TO N
- FOR J = 1 TO M
- PRINT USING "#### "; B(I, J);
- NEXT J: PRINT
- NEXT I
- PRINT "KOLICHESTVO ELEMENTOV < 0:"; KOTREL
- DIM A(KOTREL)
- FOR I = 1 TO N
- FOR J = 1 TO M
- IF (B(I, J) < 0) THEN
- A(I) = B(I, J)
- PRINT USING "#### "; A(I);
- END IF
- NEXT J
- NEXT I
- END
Рисунок 1 – Исходный текст первой программы
Рисунок 2 – Результат выполнения первой программы
Задача: В случайно заданном двумерном массиве B(NxM) заменить нулями все элементы, которые меньше 50. Распечатать результат.
- REM MATRIX
- CLS
- RANDOMIZE TIMER
- CONST N = 5 'RAZMER MASSIVA PO STROKAM
- CONST M = 6 'RAZMER MASSIVA PO STOLBCAM
- DIM B(N, M)
- 'ZAPOLNENIYE SLUCHAYNYMI CHISLAMI OT 40 DO 55
- A = 40: B = 55
- KELM50 = 0
- FOR I = 1 TO N
- FOR J = 1 TO M
- B(I, J) = INT((B - A + 1) * RND + A)
- IF (B(I, J) < 50) THEN KELM50 = KELM50 + 1
- NEXT J
- NEXT I
- 'VIVOD
- FOR I = 1 TO N
- FOR J = 1 TO M
- PRINT USING "#### "; B(I, J);
- NEXT J: PRINT
- NEXT I
- PRINT "KOLICHESTVO ELEMENTOV < 50:"; KELM50
- 'VIVOD NEW
- FOR I = 1 TO N
- FOR J = 1 TO M
- IF (B(I, J) < 50) THEN B(I, J) = 0
- PRINT USING "#### "; B(I, J);
- NEXT J: PRINT
- NEXT I
- END
Рисунок 3 – Исходный текст второй программы
Рисунок 4 – Результат выполнения второй программы
Задача: Дан двумерный квадратный массив A(NxN). Вывести элементы, расположенные на главной диагонали, над главной, под главной, на побочной, над побочной и под побочной.
Прежде всего, необходимо остановиться на методике работы с квадратными матрицами. В квадратной матрице есть главная и побочная диагонали, расположение которых показано на рисунке 5:
Рисунок 5 – Главная и побочная диагонали
- Элемент лежащий на главной диагонали, определяется условием – i = j
- Область выше главной диагонали определяется условием – i < j
- Область ниже главной диагонали определяется условием – i > j
- Элемент лежащий на побочной диагонали, определяется условием – j = n - i + 1
- Область выше побочной диагонали определяется условием – j < n - i + 1
- Область ниже побочной диагонали определяется условием – j > n - i + 1
Рассмотрим решение подобных задач:
- REM DIAG
- CLS: RANDOMIZE TIMER: CONST N = 5
- DIM B(N, N)
- A = 1: B = 20
- FOR I = 1 TO N
- FOR J = 1 TO N
- B(I, J) = INT((B - A + 1) * RND + A)
- NEXT J
- NEXT I
- FOR I = 1 TO N
- FOR J = 1 TO N
- PRINT USING "#### "; B(I, J);
- NEXT J: PRINT
- NEXT I
- PRINT: PRINT "NAD GLAVNOY: "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (I < J) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- PRINT: PRINT "NA GLAVNOY: "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (I = J) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- PRINT: PRINT "POD GLAVNOY: "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (I > J) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- PRINT: PRINT "NAD POBOCHNOY: "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (J < N - I + 1) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- PRINT: PRINT "NA POBOCHNOY: "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (J = N - I + 1) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- PRINT: PRINT "POD POBOCHNOY : "
- FOR I = 1 TO N
- FOR J = 1 TO N
- IF (J > N - I + 1) THEN PRINT USING "#### "; B(I, J);
- NEXT J
- NEXT I
- END
Рисунок 6 – Исходный текст третьей программы
Рисунок 7 – Результат выполнения третьей программы
Если же задача требует не просто вывести а отредактировать какую-то диагональ двумерного массива, то используется составное условие и составные выражения в цикле.
Спасибо за прочтение этой статьи.