Типовые задачи на обработку двумерных массивов
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