Типовые задачи на обработку двумерных массивов

End Sub

'Процедура вывода двумерного массива в таблицу

Private Sub Command2_Click()

MSFlexGrid1.Rows= n+1 'Общее количество строк в таблице

MSFlexGrid1.Cols= m+1 'Общее количество столбцов

 

'Формирование заголовков столбцов

MSFlexGrid1.Row=0 'Установка на нулевую строку

For j:=0 To m 'Цикл для вывода номеров столбцов

MSFlexGrid1.Col=j 'Установка на столбец с номером j

MSFlexGrid1.ColWidth(j)=700 'Установка ширины столбцов

MSFlexGrid1.Text=j 'Вывод номеров столбцов

Next j

 

'Формирование заголовков строк

MSFlexGrid1.Col=0 'Установка на нулевой столбец

MSFlexGrid1.ColWidth(0)=300 'Установка ширины нулевого столбца

For i:=0 To n 'Цикл для вывода номеров строк

MSFlexGrid1.Row=i 'Установка на строку с номером i

MSFlexGrid1.Text=i 'Вывод номеров строк

Next i

 

'Вывод элементов массива в таблицу по строкам

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

MSFlexGrid1.Row=i+1 'Установка на i+1-ую строку

For j:=0 To m-1 'Цикл по столбцам

FlexGrid1.Col=j+1 'Установка на j+1-ый столбец

MSFlexGrid1.Text=a(i,j) 'Вывод aij в ячейку таблицы i+1, j+1

Next j

Next i

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

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

For i := a1 To b1
For j := a2 To b2
. . . . . .
Next j
Next i

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

Всякий раз, когда внутренний цикл завершается, внешний цикл увеличивает значение своего счетчика на 1, и внутренний цикл выполняется вновь.

Поэтому, если за счетчик внешнего цикла взять индекс строки, а за счетчик внутреннего – номер столбца, то обработка двумерного массива будет идти по строкам, а если наоборот, то по столбцам.

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

- сумму элементов каждой строки;

- максимальные значения для каждого столбца;

- произведение элементов k-ой строки, значения которых лежат в диапазоне от 20 до 40.

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

Dimi As Integer,j As Integer,s As Integer

Dimmax As Integer,k As Integer,p As Integer

Dim flag As Boolean

Dim a(1 To 30, 1 To 30) As Integer

'Очистка текстовых окон

Edit4.Text="": Edit5.Text="": Edit6.Text=""

'Вычисление сумм элементов в каждой строке

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

s=0;

For j=1 To m

s=s+a(i,j); 'Суммирование элементов i-ой строки

Next J

Edit4.Text= Edit4.Text+Str(s)+ " " 'Вывод суммы i-ой строки

Nexti

'Вычисление максимальных элементов в каждом столбце

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

max=a(1,j) 'Установка начального максимума по первому элементу

'в j-ом столбце

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

If a(i,j) > max Then max=a(i,j)

Next i

'Вывод максимального элемента j-го столбца

Edit5.Text= Edit5.Text+Str(max)+ " "

Nextj

'Вычисление произведения элементов k-ой строки, попавших в диапазон [20,40]

k=Val(Edit3.Text) 'Ввод номера строки

p=1

flag=false 'Предполагаем, что нет элементов, попавших в диапазон [20,40]

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

If (a(k,j)>20) and (a(k,j)<40)Then'Проверка условия попадания

'в диапазон [20,40]

p=p*a(k,j): flag=True