ПОНЯТНО О Visual Basic NET (том 2)

Мощь одномерных массивов


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

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

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 чисел Фибоначчи.

Содержание раздела