к оглавлению

Двумерные массивы: определение, заполнение, печать

В первом семестре в курсе математики Вас знакомили с определителями и матрицами. Матрица – прямоугольная таблица элементов одинаковой природы, каждый элемент матрицы имеет двойной индекс: первый – номер строки, второй – номер столбца. Если число строк равно числу столбцов, то такую матрицу будем называть квадратной. В учебной литературе принято параметр строк (первый индекс элемента матрицы) обозначать переменной i, параметр столбцов – второй индекс – j. Естественно, двумерные массивы будем заполнять, распечатывать и обрабатывать во вложенных циклах.

Когда Вы вычисляли определители, то использовали понятия главной и вспомогательной диагоналей. Сформулируем признаки элементов, принадлежащих основной и вспомогательной диагоналям, а также понятия НАД и ПОД соответствующими диагоналями. Если индексы равны, то такой элемент принадлежит главной диагонали. Если i > j, то элемент находится ПОД главной диагональю, если i < j, то такой элемент – над главной диагональю. Нетрудно видеть, что если индексы удовлетворяют условию i = n – j + 1, то элемент принадлежит вспомогательной диагонали. Если i < n – j + 1, то элемент – над вспомогательной диагональю, в противном случае – под вспомогательной диагональю.

Изучение материала – не простого, но важного – начнем с знакомства и конспектирования очередной электронной лекции.

Математики чаще говорят – матрица, программисты – двумерный массив. Внимательно изучайте и обязательно конспектируйте эту лекцию, без освоения материала этой лекции Вам в дальнейшем будет невозможно обрабатывать двумерные массивы.

SCREEN 9: COLOR 14, 1: CLS : RANDOMIZE TIMER

‘********* Заполнение и вывод двумерного массива **********

'********* Примеры простейших задач на двумерные массивы **********

'*Двумерный массив - это матрица, содержащая n строк и m cтолбцов *

'* Первый индекс - номер строки, 2-ой - столбца **********

REM**** Это задание, определение двумерного массива ********

PRINT TAB(10); : INPUT "Сколько строк в массиве?"; n

PRINT TAB(10); : INPUT "Сколько столбцов в массиве?"; m

DIM x(n, m)

REM**** А это заполнение двумерного массива случайными числами********

PRINT TAB(10); : INPUT "из какого отрезка a,b брать значения x(i,j)"; a, b

FOR i = 1 TO n: FOR j = 1 TO m

x(i, j) = INT(a + (b - a) * RND)

NEXT j, i

'*****************************************************

'***А так его можно ввести с клавиатуры************

'FOR i = 1 TO n: FOR j = 1 TO m

'PRINT "x("; i; ","; j; ") ="; : INPUT x(i, j)'NEXT j, i

'***А так его можно ввести с помощью DATA-READ ************

'***Располагайте элементы построчно(!), их должно быть nxm ************

'DATA 2,6,-8,6,4,6,7,8,9,0,6,8

'FOR i = 1 TO n: FOR j = 1 TO m

'READ x(i, j)

'NEXT j, i

'* Элементы массива можно определить и по заданной формуле **

'*** ************ Например

'FOR i = 1 TO n: FOR j = 1 TO m

'x(i, j) = (i ^ 3 - SQR(j + 1)) / (i + j)

'NEXT j, i

CLS

'*** А это программка распечатки двумерного массива ********

COLOR 10FOR i = 1 TO n: FOR j = 1 TO mLOCATE 3 + i * 2, 20 + j * 5: PRINT x(i, j)

NEXT j, i

COLOR 14

'*********************************************************

'*** Хорошо разберитесь с тем, что выше ****

'*** А далее, собственно, решение Ваших задач *******************

'** Как только начнете решать свою задачу, сохраните файл под другим именем*

'** Здесь формулируйте задачу **************

'** Приведу пример. Из произвольного двумерного массива вывести на печать

'** значения и индексы наибольшего и наименьшего элементов

'* Массив уже заполнен одним из приведенных способов

min = x(1, 1): max = x(1, 1): mi = 1: mj = 1: bi = 1: bj = 1

‘FOR i = 1 TO n

FOR j = 1 TO m

‘IF x(i, j) < min THEN min = x(i, j): mi = i: mj = j

‘IF x(i, j) > max THEN max = x(i, j): bi = i: bj = j

‘NEXT j

NEXT i

‘PRINT

'**** Выводим ответ *****************************

‘PRINT TAB(10); : PRINT "Максимальный элемент x("; bi; ","; bj; ") ="; max

‘PRINT TAB(10); : PRINT "Минимальный элемент x("; mi; ","; mj; ") ="; min

END

Рассмотрим еще одну задачу. Окрасить элементы матрицы по какому-либо признаку

'********Окраска элементов массива по какому-либо признаку**

SCREEN 9: COLOR 14, 1: CLS : RANDOMIZE TIMER

PRINT TAB(10); : INPUT "Введите размерность квадратной матрицы"; n

DIM x(n, n)

a = -9: b = 9

FOR i = 1 TO n: FOR j = 1 TO n

x(i, j) = INT(a + (b - a) * RND)

NEXT j, i

COLOR 14, 1

FOR i = 1 TO n: FOR j = 1 TO n

LOCATE 3 + i * 2, 20 + j * 5: PRINT x(i, j)

NEXT j, i

COLOR 14

FOR i = 1 TO n: FOR j = 1 TO n

LOCATE 13 + i * 2, 20 + j * 5: IF i = n - j + 1 THEN COLOR 14: PRINT x(i, j)

LOCATE 13 + i * 2, 20 + j * 5: IF i < n - j + 1 THEN COLOR 4: PRINT x(i, j)

LOCATE 13 + i * 2, 20 + j * 5: IF i > n - j + 1 THEN COLOR 7: PRINT x(i, j)

LOCATE 13 + i * 2, 20 + j * 5: PRINT x(i, j)

NEXT j, i

'* Еще простейшие задачи, перепишите их в конспект, решайте ***********

'* их сейчас, решайте дома, консультируйтесь друг с другом *************

'* Итак, задан двумерный массив, содержащий положительные ***

'** и отрицательные элементы, заполните и распечатайте его ********

'*1) Найти сумму его элементов, найти суммы положительных, отрицательных *

'*2) Найти сумму элементов главной диагонали *******************

'*3) Найти сумму элементов, стоящих под (над) главной диагональю ****

'*4) Найти количество положительных (отрицательных) элементов **************

'*5) Элементы над главной диагональю заменить единицами *******************

'*6) Заменить отрицательные элементы их модулями *******************

'*7) Вывести на печать вместе с индексами элементы, кратные трем ********

'* Огромных Вам успехов в освоении двумерных массивов ****

Следующее занятие будет посвящено именно таким задачам.

Какие знания и умения Вы приобрели на занятии №17?

  • Актуализировали понятия определителя и матрицы;
  • Усвоили, что элементы двумерных массивов имеют двойной индекс – первый указывает на номер строки элемента, второй – на номер столбца;
  • Научились определять двумерные массивы, присваивать им значения;
  • Научились выводить на печать двумерные массивы в естественном виде – в виде матрицы;
  • Рассмотрели примеры задач на обработку двумерных массивов;
  • Самостоятельно программно реализовали алгоритмы по обработке одномерных массивов;
  • Получили задачи для самостоятельной разработки.

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

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution