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

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

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

Широко распространенным видом деятельности компьютера является справочно-информационное обслуживание, которое включает в себя накапливание информации и выдачу ее по запросам.

С этой целью в памяти компьютера организуются таблицы данных, которые могут заполняться, просматриваться, корректироваться. Таблицы организуются таким образом, что любой элемент таблицы  всегда доступен для немедленной обработки. С простейшей одномерной таблицей (массивом) мы уже познакомились. В сложных вычислительных системах имеют место двумерные, трехмерные и т.д. массивы.

В математике двумерные массивы носят название матрицы. Элементы двумерного массива (матрицы) имеют два номера — номер строки и номер столбца. Про такие матрицы мы и поговорим.

Задача: Необходимо сформировать одномерный массив (вектор) A(N) из отрицательных элементов двумерного массива (матрицы) B(5, 6).


  1. CLS
  2. RANDOMIZE TIMER
  3. CONST N = 5 'RAZMER MASSIVA PO STROKAM
  4. CONST M = 6 'RAZMER MASSIVA PO STOLBCAM
  5. DIM B(N, M)
  6. 'ZAPOLNENIYE SLUCHAYNYMI CHISLAMI OT -5 DO 10
  7. A = -5: B = 10
  8. KOTREL = 0
  9. FOR I = 1 TO N
  10.     FOR J = 1 TO M
  11.         B(I, J) = INT((B - A + 1) * RND + A)
  12.         IF (B(I, J) < 0) THEN KOTREL = KOTREL + 1
  13.     NEXT J
  14. NEXT I
  15. 'VIVOD
  16. FOR I = 1 TO N
  17.     FOR J = 1 TO M
  18.         PRINT USING "####  "; B(I, J);
  19.     NEXT J: PRINT
  20. NEXT I
  21. PRINT "KOLICHESTVO ELEMENTOV < 0:"; KOTREL
  22. DIM A(KOTREL)
  23. FOR I = 1 TO N
  24.     FOR J = 1 TO M
  25.         IF (B(I, J) < 0) THEN
  26.             A(I) = B(I, J)
  27.             PRINT USING "####  "; A(I);
  28.         END IF
  29.     NEXT J
  30. NEXT I
  31. END

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

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

Задача: В случайно заданном двумерном массиве B(NxM) заменить нулями все элементы, которые меньше 50. Распечатать результат.


  1. REM MATRIX
  2. CLS
  3. RANDOMIZE TIMER
  4. CONST N = 5 'RAZMER MASSIVA PO STROKAM
  5. CONST M = 6 'RAZMER MASSIVA PO STOLBCAM
  6. DIM B(N, M)
  7. 'ZAPOLNENIYE SLUCHAYNYMI CHISLAMI OT 40 DO 55
  8. A = 40: B = 55
  9. KELM50 = 0
  10. FOR I = 1 TO N
  11.     FOR J = 1 TO M
  12.         B(I, J) = INT((B - A + 1) * RND + A)
  13.         IF (B(I, J) < 50) THEN KELM50 = KELM50 + 1
  14.     NEXT J
  15. NEXT I
  16. 'VIVOD
  17. FOR I = 1 TO N
  18.     FOR J = 1 TO M
  19.         PRINT USING "####  "; B(I, J);
  20.     NEXT J: PRINT
  21. NEXT I
  22. PRINT "KOLICHESTVO ELEMENTOV < 50:"; KELM50
  23. PRINT
  24. 'VIVOD NEW
  25. FOR I = 1 TO N
  26.     FOR J = 1 TO M
  27.         IF (B(I, J) < 50) THEN B(I, J) = 0
  28.         PRINT USING "####  "; B(I, J);
  29.     NEXT J: PRINT
  30. NEXT I
  31. END

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

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

Задача: Дан двумерный квадратный массив A(NxN). Вывести элементы, расположенные на главной диагонали, над главной, под главной, на побочной, над побочной и под побочной.

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

Рисунок 5 – Главная и побочная диагонали

Рассмотрим решение подобных задач:


  1. REM DIAG
  2. CLS: RANDOMIZE TIMER: CONST N = 5
  3. DIM B(N, N)
  4. A = 1: B = 20
  5. FOR I = 1 TO N
  6.     FOR J = 1 TO N
  7.         B(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 "####  "; B(I, J);
  13.     NEXT J: PRINT
  14. NEXT I
  15. PRINTPRINT "NAD GLAVNOY: "
  16. FOR I = 1 TO N
  17.     FOR J = 1 TO N
  18.         IF (I < J) THEN PRINT USING "####  "; B(I, J);
  19.     NEXT J
  20. NEXT I
  21. PRINTPRINT "NA GLAVNOY: "
  22. FOR I = 1 TO N
  23.     FOR J = 1 TO N
  24.         IF (I = J) THEN PRINT USING "####  "; B(I, J);
  25.     NEXT J
  26. NEXT I
  27. PRINTPRINT "POD GLAVNOY: "
  28. FOR I = 1 TO N
  29.     FOR J = 1 TO N
  30.         IF (I > J) THEN PRINT USING "####  "; B(I, J);
  31.     NEXT J
  32. NEXT I
  33. PRINTPRINT "NAD POBOCHNOY: "
  34. FOR I = 1 TO N
  35.     FOR J = 1 TO N
  36.         IF (J < N - I + 1) THEN PRINT USING "####  "; B(I, J);
  37.     NEXT J
  38. NEXT I
  39. PRINTPRINT "NA POBOCHNOY: "
  40. FOR I = 1 TO N
  41.     FOR J = 1 TO N
  42.         IF (J = N - I + 1) THEN PRINT USING "####  "; B(I, J);
  43.     NEXT J
  44. NEXT I
  45. PRINTPRINT "POD POBOCHNOY : "
  46. FOR I = 1 TO N
  47.     FOR J = 1 TO N
  48.         IF (J > N - I + 1) THEN PRINT USING "####  "; B(I, J);
  49.     NEXT J
  50. NEXT I
  51. END

 

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

 

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

Если же задача требует не просто вывести а отредактировать какую-то диагональ двумерного массива, то используется составное условие и составные выражения в цикле.

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

 

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

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

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