В первом семестре в курсе математики Вас знакомили с определителями и матрицами. Матрица – прямоугольная таблица элементов одинаковой природы, каждый элемент матрицы имеет двойной индекс: первый – номер строки, второй – номер столбца. Если число строк равно числу столбцов, то такую матрицу будем называть квадратной. В учебной литературе принято параметр строк (первый индекс элемента матрицы) обозначать переменной 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 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?