Мощь одномерных массивов
Внутри скобок мы можем писать не только числа, но и переменные, и выражения. От этого программа сразу станет с непривычки менее понятной, однако приобретет необыкновенную мощь.
Привыкаем к переменным и выражениям в качестве индексов. Сначала мы должны привыкнуть к переменным и выражениям в качестве индексов. Вот три эквивалентных варианта программы, распечатывающей длины удавов. Вы должны без компьютера убедиться, что все три варианта распечатают одно и то же.
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
Dim dlina() As Integer = {0, 500, 400, 600}
Debug.WriteLine(dlina(1))
Debug.WriteLine(dlina(2))
Debug.WriteLine(dlina(3))
End Sub
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim dlina() As Integer = {0, 500, 400, 600}
Dim i As Integer
i = 1
Debug.WriteLine(dlina(i))
i = 2
Debug.WriteLine(dlina(i))
i = i + 1
Debug.WriteLine(dlina(i))
End Sub
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
Dim dlina() As Integer = {0, 500, 400, 600}
Dim i As Integer = 1
Dim k As Integer = 10
Debug.WriteLine(dlina(i))
Debug.WriteLine(dlina(k - 8))
i = 2
k = 1
Debug.WriteLine(dlina(k + i))
End Sub
Мощи здесь пока не видно, увидите чуть позже.
Вопрос: Продолжаем привыкать. Не подходя к компьютеру, ответьте, что напечатает следующая процедура:
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim a(100), i As Integer
i = 2 : a(3) = 10 : a(i) = 100 : a(i + 6) = a(i) + a(5 - i) : i = 0 : Debug.WriteLine(a(i + 3) + a(2) + a(i + 8))
End Sub
Ответ: 220
Хорошо бы вы получили правильный ответ самостоятельно. Если не смогли получить, значит вы не понимаете чего-то важного или просто невнимательны. В этом случае читайте пояснение:
Первая ступенька: i = 2 ® a(3) = 10 ® a(2) = 100 ® a(2 + 6) = a(2) + a(5 - 2) ® i = 0 ® Debug.WriteLine( a(0 + 3) + a(2) + a(0 + 8))
Вторая ступенька: i = 2 ® a(3) = 10 ® a(2) = 100 ® a(8) = a(2) + a(3) ® i = 0 ® Debug.WriteLine( a(3) + a(2) + a(8))
Третья ступенька: i = 2 ® a(3) = 10 ® a(2) = 100 ® a(8) = 110 ® i = 0 ® Debug.WriteLine( 10 + 100 + 110)
Цикл – мощное оружие при работе с массивами. Теперь решим задачу про суммарную длину удавов в предположении, что удавов не 3, а 1000:
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button9.Click
Dim Число_удавов As Integer = 1000
'Верхняя граница индекса может быть выражена переменной величиной:
Dim dlina(Число_удавов) As Integer
Dim summa, i As Integer
'Вводим с клавиатуры длины тысячи удавов, хоть это и утомительно и никто так не делает.
'Здесь на первом выполнении цикла i=1 и поэтому компьютер вводит число в ячейку dlina(1),
'на втором - i=2 и поэтому компьютер вводит число в ячейку dlina(2) и т.д.
For i = 1 To Число_удавов
dlina(i) = InputBox("Введите длину " & i & "-го удава")
Next
'Определяем суммарную длину тысячи удавов:
summa = 0
For i = 1 To Число_удавов
summa = summa + dlina(i)
Next
Debug.WriteLine(summa)
End Sub
Отлаживая эту программу, возьмите, конечно, вместо числа 1000 какое-нибудь маленькое число.
Пример. Продолжаем привыкать к индексам. Решим еще одну задачу. Дан ряд из 10 произвольных чисел: a(1), a(2), ... , a(10). Подсчитать и напечатать суммы каждой из восьми троек стоящих рядом чисел.
первая тройка: a(1)+a(2)+a(3)
вторая тройка: a(2)+a(3)+a(4)
третья тройка: a(3)+a(4)+a(5)
......
восьмая тройка: a(8)+a(9)+a(10)
Вот программа:
Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
Dim a() As Integer = {0, 5, 3, 4, 0, 20, 10, 23, 2, 9, 1000}
Dim i As Integer
For i = 1 To 8
Debug.WriteLine(a(i) + a(i + 1) + a(i + 2))
Next
End Sub
Вот что она напечатает:
12
7
24
30
53
35
34
1011
Следующие два задания очень важны, так как это ваши первые задания по массивам.
Задание 102.
Напишите с использованием массива программу вычисления среднегодовой температуры. Подсчитайте также количество теплых дней в году (когда температура выше 20 градусов). Узнайте, каким по порядку идет самый жаркий день. (Для отладки в компьютере годом можно считать неделю.)
Задание 103.
Вычислить и распечатать первые 139 чисел Фибоначчи.