Квадратная матрица Закономерности в квадратной матрице и ее обработка
Двумерный массив в котором число строк совпадает с числом столбцов называют квадратной матрицей. Рассмотрим закономерности определяющие характерное расположение элементов в квадратной матрице. Очевидно, что для элемента расположенного на главной диагонали номер его строки равен номеру его столбца i = j. Для элемента расположенного на побочной диагонали справедливо i + j = n + 1, где n — размер квадратной матрицы. Проверьте справедливость этого равенства. Для элементов расположенных выше главной диагонали справедливо утверждение i < j, то есть номер строки элемента обязательно меньше номера его столбца. Для нижних элементов справедливо: i > j. Для побочной диагонали: i + j < n + 1 и i + j > n + 1. Если рассматривать положение элемента в квадратной матрице относительно обеих диагоналей, то он может находиться в одной из четвертей при условии:
1 четверть — (i < j) And (i + j < n + 1) 2 четверть — (i < j) And (i + j > n + 1) 3 четверть — (i > j) And (i + j > n + 1) 4 четверть — (i > j) And (i + j < n + 1)
В записи условий используется логический оператор And (логическое и). Логическое и требует выполнения обоих условий, в отличии от логического или (оператор Or), который требует выполнения хотя бы одного из условий. Попутно следует сказать еще об одном важном логическом операторе Not (логическое нет). Решим задачу: сформировать квадратную матрицу 5х5 из случайных целых чисел в диапазоне от 0 до 9 и вычислить сумму ее элементов расположенных на главной диагонали. В окне для ввода программного кода в общем разделе (general) запишите:
Dim a(1 To 5, 1 To 5)
В процедуре Command1_Click разместите следующий программный код:
Randomize s = 0
For i = 1 To 5 For j = 1 To 5 a (i, j) = Fix (Rnd * 10) Next j Next i
For i = 1 To 5 For j = 1 To 5 Print a (i, j); If i = j Then s = s + a (i, j) Next j Next i
Print "Сумма в главной диагонали ="; s
Проверьте результат работы программы. Следующую программу построим таким образом, чтобы можно было задавать размер квадратной матрицы в процессе работы программы. Воспользуемся оператором считывания InputBox, который позволяет пользователю вводить данные во время работы программы.
Dim a(1 To 50, 1 To 50), n
Cls Randomize
100 n = InputBox ("Запишите размер квадратной матрицы") If n = "" Then 100 If n > 50 Or n < 2 Then 100
For i = 1 To n For j = 1 To n a (i, j) = Fix (Rnd * 10) Next j Next i
For i = 1 To n For j = 1 To n Print a (i, j); Next j Next i
Переменная n используется под размер квадратной матрицы. Все циклы будут работать от 1 до n. Метка «100» необходима для того чтобы можно было вернуться к оператору считывания в случае некорректного ввода данных пользователем. Сразу за этой строкой идет два условия защищающие работу программы. Первое условие возвращает к оператору считывания, если пользователь не ввел размер матрицы. Второе условие является сложным, так как применен оператор Or (или). Эта строка-условие читается: если n больше 50-и или меньше 2-х, то иди к сотой строке. В выше построенной квадратной матрице 20х20 вычислим сумму всех ее элементов, расположенных ниже побочной диагонали. Для этого в общем разделе general объявим переменную s с помощью оператора Dim и после строки закладывающей в ячейки матрицы случайные числа запишем инструкцию:
If i + j > n + 1 Then s = s + a (i, j) ‘ условие наращивания суммы
В конце программы не забудьте вывести на экран вычисленную сумму:
Print "Сумма элементов в побочной диагонали ="; s
Домашнее задание
1. Сформируйте квадратную матрицу размерности 8х8 из случайных однозначных чисел и вычислите сумму ее элементов расположенных на побочной диагонали. 2. Сформируйте квадратную матрицу размерности 10х10 из случайных однозначных чисел и вычислите сумму ее элементов расположенных во второй четверти. 3. Сформируйте квадратную матрицу размерности 7х7 из случайных однозначных чисел и вычислите произведение ее элементов расположенных в четвертой четверти. 4. Сформируйте квадратную матрицу размерности 25х25 из случайных однозначных чисел и вычислите число «восьмерок» выпавших в первой четверти.
|
Урок десятый |
Азбука |
Visual Basic |