Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
43
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
    1. Двумерные массивы

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

1-й день

2-й день

3-й день

4-й день

Метеостанция 1

-8

-14

-19

-18

Метеостанция 2

25

28

26

20

Метеостанция 3

11

18

20

25

Требуется (в порядке возрастания трудности):

1) Распечатать температуру на 2-й метеостанции за 4‑й день и на 3-й метеостанции за 1‑й день.

2) Распечатать показания термометров всех метеостанций за 2‑й день

3) Определить среднюю температуру на 3-й метеостанции

4) Распечатать всю таблицу

5) Распечатать, в какие дни и на каких метеостанциях температура была в диапазоне 24-26 градусов тепла

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

t(1,1)

t(1,2)

t(1,3)

t(1,4)

t(2,1)

t(2,2)

t(2,3)

t(2,4)

t(3,1)

t(3,2)

t(3,3)

t(3,4)

Первый индекс в скобках обозначает номер строки (метеостанция), второй – номер столбца (день) прямоугольной таблицы. Такую таблицу математики называют матрицей.

В памяти отводим массив из ячеек типа Integer под значения индексированной переменной t. Будем называть его двумерным массивом:

Dim t (3, 4) As Integer

Аналогично одномерному массиву, первый индекс здесь будет меняться не от 1 до 3, а от 0 до 3, а второй – от 0 до 4. Таким образом в памяти будет отведен следующий массив ячеек:

t(0,0)

t(0,1)

t(0,2)

t(0,3)

t(0,4)

t(1,0)

t(1,1)

t(1,2)

t(1,3)

t(1,4)

t(2,0)

t(2,1)

t(2,2)

t(2,3)

t(2,4)

t(3,0)

t(3,1)

t(3,2)

t(3,3)

t(3,4)

Мы просто не будем пользоваться верхней строкой и левым столбцом.

Программа:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim t(3, 4) As Integer

Dim i, j, s As Integer

'Зададим значения элементов массива примитивным присваиванием:

t(1, 1) = -8 : t(1, 2) = -14 : t(1, 3) = -19 : t(1, 4) = -18

t(2, 1) = 25 : t(2, 2) = 28 : t(2, 3) = 26 : t(2, 4) = 20

t(3, 1) = 11 : t(3, 2) = 18 : t(3, 3) = 20 : t(3, 4) = 25

'Выполняем 1 пункт задания:

Debug.WriteLine(t(2, 4) & " " & t(3, 1))

'А теперь распечатаем второй столбец массива (2 пункт задания):

Debug.Write("Второй столбец: ")

For i = 1 To 3 : Debug.Write(t(i, 2) & " ") : Next

Debug.WriteLine("") 'Переводим строку

'Определим среднее значение элементов третьей строки (3 пункт задания):

i = 3

s = 0

For j = 1 To 4 : s = s + t(i, j) : Next

Debug.WriteLine("Средняя температура равна " & s / 4)

'Распечатаем всю таблицу (4 пункт задания):

For i = 1 To 3

For j = 1 To 4

Debug.Write(t(i, j) & " ")

Next j

Debug.WriteLine("") 'Переводим строку

Next i

'Распечатаем станции и дни с температурой 24-26 градусов (5 пункт задания):

For i = 1 To 3

For j = 1 To 4

If t(i, j) >= 24 And t(i, j) <= 26 Then Debug.WriteLine("Станция " & i & " день " & j)

Next j

Next i

End Sub

Вот что напечатает эта программа:

20 11

Второй столбец: -14 28 18

Средняя температура равна 18,5

-8 -14 -19 -18

25 28 26 20

11 18 20 25

Станция 2 день 1

Станция 2 день 3

Станция 3 день 4

Инициализация двумерного массива. Вместо фрагмента, объявляющего массив и задающего его значения присваиванием:

Dim t(3, 4) As Integer

t(1, 1) = -8 : t(1, 2) = -14 : t(1, 3) = -19 : t(1, 4) = -18

t(2, 1) = 25 : t(2, 2) = 28 : t(2, 3) = 26 : t(2, 4) = 20

t(3, 1) = 11 : t(3, 2) = 18 : t(3, 3) = 20 : t(3, 4) = 25

можно использовать более короткую запись:

Dim t ( , ) As Integer = { {99, 99, 99, 99, 99} , {99, -8, -14, -19, -18} , {99, 25, 28, 26, 20} , {99, 11, 18, 20, 25} }

Разберемся в ней. Верхние границы индексов не указываются, но запятая в круглых скобках остается, чтобы было понятно, что массив двумерный, а не одномерный. Чисел в фигурных скобках нужно столько, чтобы заполнить столбцы 0,1,2,3,4 и строки 0,1,2,3. Каждую строку берем в свои фигурные скобки и отделяем от других строк запятой. Весь массив снаружи «обнимается» дополнительной парой фигурных скобок. Ненужные нам нулевую строку и нулевой столбец я заполнил числами 99, а мог бы и любыми другими, так как в программе мы их не используем.

Вычислить разницу между максимальной и минимальной температурой во всей таблице.