Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование.doc
Скачиваний:
70
Добавлен:
24.11.2018
Размер:
1.15 Mб
Скачать

3.6 Организация программ обработки двумерных массивов

Для описа­ния многомерных массивов используются конструкции, аналогичные рассмотренным в п. 3.5, однако отличие состоит в том, что границы размерностей указываются через запятую, например:

Dim A(3, 4) As Integer ‘Объявлена таблица 4 строки, 5 столбцов

Dim B(l To 4, 1 To 5) As Single ‘Объявлена таблица 4 строки, 5 столбцов

В данном примере объявленные массивы являются двумерными и содержат одинаковое количество элементов, но начальная нумерация элементов различна, так массив A нумеруется начиная с нуля, В - начиная с единицы.

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

Двумерные массивы называют матрицами размерностью n строк и m столбцов.

При обработке многомерных массивов используются вложенные циклы For … Next. Например, необходимо ввести значения элементов двумерного массива А.

Листинг 16. Фрагмент программы заполнения двумерного массива A

…………………………

Dim A() As Single

Dim m, n, i, j As Integer

n = InputBox(“Введите количество строк”)

m = InputBox(“Введите количество столбцов”)

ReDim A(1 To n, 1 To m)

For i = 1 То n

For j = 1 To m

A(i, j) = InputBox(“Введите элемент массива ” & i & “строки ” & j & “столбца ”)

Debug.Print A(i, j); ‘вывод элементов в одной строке

Next j

Debug.Print ‘вывод с новой строки

Next i

…………………………

В данном фрагменте при i=1 внутренний цикл по j работает n раз и производится ввод элементов первой строки, затем при i=2 внутренний цикл по j работает так же n раз и так пока i не станет больше m.

Оператор Debug.Print с пустым списком вывода используется для заполнения позиций, оставшихся после вывода i-ой строки, пробелами, поэтому следующая строка матрицы выводится с начала новой строки окна Immediate. Например, см. рис. 25:

Рис. 25 Результаты вывода элементов массива в виде таблицы

В пункте 2.6.5 были построены математические модели и блок-схемы наиболее распространенных алгоритмов обработки двумерных массивов. Рассмотрим примеры программ, где алгоритм представляет собой обработку двумерного массива данных. В данных примерах ввод массивов осуществляется при помощи функции Rnd() – датчика случайных чисел (см. таблицу 6).

Листинг 17. Нахождение общего выпуска продукции каждого вида

Sub Пример10_1()

Randomize

Dim VP() As Single, S() As Single

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

n = InputBox("Введите число строк n")

m = InputBox("Введите число столбцов m")

ReDim VP(1 To n, 1 To m), S(1 To n)

For i = 1 To n

For j = 1 To m

VP(i, j) = Int(60 * Rnd() + 50) 'Целая часть случ. чисел от 50 до 110

Debug.Print VP(i, j);

Next j

Debug.Print

Next i

For i = 1 To n

S(i) = 0

For j = 1 To m

S(i) = S(i) + VP(i, j)

Next j

Next i

For i = 1 To n

Debug.Print "Общий выпуск продукции " & i & "= " & S(i)

Next i

End Sub

Листинг 18. Нахождение максимального выпуска продукции каждого вида и месяца с максимальным выпуском

Sub Пример10_2()

Randomize

Dim VP() As Single, Max() As Single

Dim K() As Integer

Dim n As Integer, m As Integer

Dim i As Integer, j As Integer

n = InputBox("Введите число строк n")

m = InputBox("Введите число столбцов m")

ReDim VP(1 To n, 1 To m), Max(1 To n)

ReDim K(1 To n) As Integer

For i = 1 To n

For j = 1 To m

VP(i, j) = Int(60 * Rnd() + 50) ' Целая часть случ. чисел от 50 до 110

Debug.Print VP(i, j);

Next j

Debug.Print

Next i

For i = 1 To n

Max(i) = VP(i, 1)

K(i) = 1

For j = 2 To m

If VP(i, j) > Max(i) Then

Max(i) = VP(i, j)

K(i) = j

End If

Next j

Next i

For i = 1 To n

Debug.Print "max выпуск продукции" & i & "=" & Max(i) & "месяц- " & K(i)

Next i

End Sub