QBASICBOOK.ru: сайт про QB64

Опубликовано: 2021-03-10 12:00:00

Решение задач на матрицы. Часть вторая

Во многих задачах требуется поменять местами один элемент массива с другим элементом. В этом случае, нужно запомнить его индекс, а затем использовать его в алгоритме замены.

В задачах на нахождение минимума / максимума всегда встает вопрос: с чем сравнивать элементы массива. Для этой цели обычно служит первый элемент, с которым последовательно сравниваются все элементы массива.

Задача: Поменять местами минимальный (MIN) и максимальный (MAX) элементы друг с другом:


  1. REM MATRIX
  2. CLS: RANDOMIZE TIMER: CONST N = 5
  3. DIM A(N, N)
  4. A = 1: B = 20
  5. FOR I = 1 TO N
  6.     FOR J = 1 TO N
  7.         A(I, J) = INT((B - A + 1) * RND + A)
  8.     NEXT J
  9. NEXT I
  10. FOR I = 1 TO N
  11.     FOR J = 1 TO N
  12.         PRINT USING "####  "; A(I, J);
  13.     NEXT J: PRINT
  14. NEXT I
  15. 'POISK MINIMUMA
  16. MIN = A(1, 1)
  17. FOR I = 1 TO N
  18.     FOR J = 1 TO N
  19.         IF (A(I, J) < MIN) THEN
  20.             MIN = A(I, J)
  21.             INDEXMINI = I
  22.             INDEXMINJ = J
  23.         END IF
  24.     NEXT J
  25. NEXT I
  26. 'POISK MAKSIMUMA
  27. MAX = A(1, 1)
  28. FOR I = 1 TO N
  29.     FOR J = 1 TO N
  30.         IF (A(I, J) > MAX) THEN
  31.             MAX = A(I, J)
  32.             INDEXMAXI = I
  33.             INDEXMAXJ = J
  34.         END IF
  35.     NEXT J
  36. NEXT I
  37. PRINT "MAKSIMALNYY ELEMENT:"; MAX
  38. PRINT "NOMER MAX:"; INDEXMAXI; INDEXMAXJ
  39. PRINT "MINIMALNYY ELEMENT:"; MIN
  40. PRINT "NOMER MIN:"; INDEXMINI; INDEXMINJ
  41. 'PERSTANOVKA MESTAMI MAKSIMALNOGO I MINIMALNOGO ELEMENTOV
  42. VSPOMOGATTL_PEREMENNAYA = A(INDEXMAXI, INDEXMAXJ)
  43. A(INDEXMAXI, INDEXMAXJ) = A(INDEXMINI, INDEXMINJ)
  44. A(INDEXMINI, INDEXMINJ) = VSPOMOGATTL_PEREMENNAYA
  45. PRINT
  46. FOR I = 1 TO N
  47.     FOR J = 1 TO N
  48.         PRINT USING "####  "; A(I, J);
  49.     NEXT J: PRINT
  50. NEXT I
  51. END

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

Рисунок 2 – Результат выполнения первой программы

Задача: Дан двухмерный массив из A(NxN) элементов. Посчитать сумму и количество положительных чисел для каждой строки, сумму и количество положительных чисел во всем двумерном массиве.


  1. REM MATRIX
  2. CLS: RANDOMIZE TIMER: CONST N = 5
  3. DIM A(N, N)
  4. A = -10: B = 10
  5. FOR I = 1 TO N
  6.     FOR J = 1 TO N
  7.         A(I, J) = INT((B - A + 1) * RND + A)
  8.     NEXT J
  9. NEXT I
  10. FOR I = 1 TO N
  11.     FOR J = 1 TO N
  12.         PRINT USING "####  "; A(I, J);
  13.     NEXT J: PRINT
  14. NEXT I
  15. KOLPOLVSEH = 0
  16. SUMPOLVSEH = 0
  17. FOR I = 1 TO N
  18.     FOR J = 1 TO N
  19.         IF (A(I, J) > 0) THEN
  20.             KOLPOLVSEH = KOLPOLVSEH + 1
  21.             SUMPOLVSEH = SUMPOLVSEH + A(I, J)
  22.         END IF
  23.     NEXT J
  24. NEXT I
  25. PRINT
  26. PRINT "KOLICHESTVO POLOZHITELNYKH ELEMENTOV"; KOLPOLVSEH
  27. PRINT "SUMMA POLOZHITELNYKH ELEMENTOV"; SUMPOLVSEH
  28. FOR I = 1 TO N
  29.     SUM_P_EL = 0
  30.     FOR J = 1 TO N
  31.         IF (A(I, J) > 0) THEN SUM_P_EL = SUM_P_EL + A(I, J)
  32.     NEXT J
  33.     PRINT "V"; I; "STROKE"; SUM_P_EL; "POLOZHITELNYKH ELEMENTOV"
  34. NEXT I
  35. END

 

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

Рисунок 4 – Результат выполнения второй программы

Задача: В квадратной матрице А(7,7) найти число (количество) отрицательных элементов в области выше главной и ниже побочной диагонали. Поменять местами первый элемент первой строки и последний элемент последней строки матрицы.


  1. REM MATRIX
  2. CLS: RANDOMIZE TIMER: CONST N = 7
  3. DIM A(N, N)
  4. A = -10: B = 10
  5. FOR I = 1 TO N
  6.     FOR J = 1 TO N
  7.         A(I, J) = INT((B - A + 1) * RND + A)
  8.     NEXT J
  9. NEXT I
  10. FOR I = 1 TO N
  11.     FOR J = 1 TO N
  12.         PRINT USING "####  "; A(I, J);
  13.     NEXT J: PRINT
  14. NEXT I
  15. KOL_OTR_V_GL = 0
  16. KOL_OTR_N_PO = 0
  17. FOR I = 1 TO N
  18.     FOR J = 1 TO N
  19.         IF (I < J) AND (A(I, J) < 0) THEN KOL_OTR_V_GL = KOL_OTR_V_GL + 1
  20.         IF (J > N - I + 1) AND (A(I, J) < 0) THEN
  21.             KOL_OTR_N_PO = KOL_OTR_N_PO + 1
  22.         END IF
  23.     NEXT J
  24. NEXT I
  25. PRINT "KOLICHESTVO OTRITSATELNYKH VYSHE GLAVNOY:"; KOL_OTR_V_GL
  26. PRINT "KOLICHESTVO OTRITSATELNYKH NIZHE POBOCHNOY:"; KOL_OTR_N_PO
  27. PRINTPRINT "POMENYAYEM MESTAMI PERVYY I POSLEDNIY ELEMENTY"
  28. TEMP = A(1, 1)
  29. A(1, 1) = A(N, N)
  30. A(N, N) = TEMP
  31. FOR I = 1 TO N
  32.     FOR J = 1 TO N
  33.         PRINT USING "####  "; A(I, J);
  34.     NEXT J: PRINT
  35. NEXT I
  36. END

 

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

 

Рисунок 6 – Результат выполнения третьей программы

В следующей статьей мы попробуем менять строки и столбцы друг с другом.

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Решение задач на матрицы. Часть первая
Следующая статья >
Решение задач на матрицы. Часть третья

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.