Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по VB.doc
Скачиваний:
23
Добавлен:
12.11.2018
Размер:
2.66 Mб
Скачать
        1. Типовые задачи с квадратными матрицами

К таким задачам наряду с предыдущими относятся: вычисление суммы, произведения, количества элементов, среднеарифметического, максимума, минимума элементов на главной и побочной диагонали, а также выше и ниже диагоналей в задачах с квадратными матрицами.

Способ отбора нужных элементов для решения такого рода задач заключается в следующем:

Расположение элементов

Соотношение индексов

(i – номер строки, j – номер столбца)

На главной диагонали

Одинаковые индексы (i = j)

Выше главной диагонали

Номер строки меньше номера столбца (i<j)

Ниже главной диагонали

Номер строки больше номера столбца (i>j)

На побочной диагонали

Номер столбца вычисляется по формуле: j =n - i + 1

Выше побочной диагонали

Номер строки меньше чем n - j + 1:

(i < n - j + 1)

Ниже побочной диагонали

Номер строки больше чем n - j + 1:

(i> n - j + 1)

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

Пример 5. Двумерный массив n * n заполнен случайными целыми числами из диапазона [-40,40]. Определить:

  • минимальное значение для элементов, расположенных на главной диагонали,

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

  • произведение элементов, расположенных выше побочной диагонали; среднее арифметическое элементов, расположенных ниже главной диагонали.

Фрагмент программного кода:

min=a(1,1) 'Первый на главной диагонали

max=a(1,n) 'Первый на побочной диагонали

For i=1 To n 'Цикл по строкам

Begin

'Определение минимума на главной диагонали

If a(i,i) < min Then min= a(i,i)

'Определение максимума на побочной диагонали

If a(i,n-i+1) > max Then max=a(i, n-i+1)

Next i

'Нахождение произведения элементов расположенных выше побочной диагонали

p=1

For i=1 To n 'Цикл по строкам

For j=1 To n 'Цикл по столбцам

If i < n-j+1 Then p=p* a(i,j)

'Нахождение суммы и количества элементов ниже главной диагонали

s=0: kol=0

For i=1 To n 'Цикл по строкам

For j=1 To n 'Цикл по столбцам

If i > j Then s=s+ a[i,j]: kol=kol+1

'Среднее арифметическое элементов расположенных ниже главной диагонали

sr=s / kol

Пример 6. Сформировать массив из n * n элементов. Зеркально отразить (повернуть) его относительно главной и побочной диагоналей. Дополнительных массивов не создавать.

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

  • до i при повороте относительно главной диагонали,

  • до n-i при повороте относительно побочной диагонали.

В противном случае, смена произойдет дважды и все останется на своих местах.

Фрагменты кодов программы:

'Зеркальноe отражение массива относительно главной диагонали

For i=1 To n 'Цикл по строкам

For j=1 To i 'Цикл по столбцам

tmp=a(i,j)

a(i,j)=a(j,i)

a(j,i)=tmp

Next j

Next i

'Зеркальноe отражение массива относительно побочной диагонали

For i=1 To n-1 'Цикл по строкам

For j=1 To n-i 'Цикл по столбцам

tmp=a(i,j)

a(i,j)=a(n-j+1,n-i+1)

a(n-j+1,n-i+1)=tmp

Next j

Next i