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

Одна из типичных задач программирования формулируется примерно так. Имеется большое количество данных, например, тех же температур или высот. С этими данными компьютер должен что-нибудь сделать, например, вычислить среднегодовую температуру, количество морозных дней, максимальную взятую высоту и т.п. Раньше мы уже вычисляли подобные вещи, и при этом данные вводили в компьютер с клавиатуры одно за другим. При этом всегда получалось, что они вводятся в одну и ту же ячейку памяти (см. Глава 10. ). Однако, программистская практика показывает, что удобно, а часто и необходимо иметь данные в оперативной памяти сразу все, а не по очереди. Тогда для задачи, скажем, про температуру нам понадобится 365 ячеек. Эти 365 ячеек мы и назовем массивом. Итак, массивом можно назвать ряд ячеек памяти, отведенных для хранения значений индексированной переменной. На вопрос о том, как большое количество значений оказывается в памяти, отвечу, что обычно они вводятся из файла (Error: Reference source not found).

      1. Основы работы с одномерными массивами

Пример. Рассмотрим на примере простой задачи, как VB управляется с массивами. Предположим, в зоопарке живут три удава. Известна длина каждого удава в сантиметрах (500, 400 и 600). Какая длина получится у трех удавов, вытянутых в линию?

Обозначим длину первого удава – dlina(1), второго – dlina(2), третьего – dlina(3). Прикажем VB отвести под эту индексированную переменную массив ячеек в памяти. Делается это так:

Dim dlina (3) As Integer

Здесь 3 - верхняя граница индекса. В целом эту строку можно перевести так: Отвести в памяти под переменную dlina ряд ячеек типа Integer, пронумерованных от 0 до 3.

Почему от 0? Нам не нужно от 0! Нам нужно от 1! – Ну, это уже ваши проблемы – отвечает VB – я могу только от 0! – Ну, что ж – отвечаем мы – в конце концов, пусть будет от 0. В конце концов, это означает всего лишь то, что в памяти будет отведена лишняя ячейка для значения dlina(0). А мы ее просто не будем использовать, и все! И никаких значений туда не будем записывать. И никаких проблем.

Вот программа полностью:

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

Dim dlina(3) As Integer

Dim summa As Integer

dlina(1) = 500

dlina(2) = 400

dlina(3) = 600

'В этот момент в трех ячейках памяти уже находятся числа

'и с ними можно выполнять арифметические действия

summa = dlina(1) + dlina(2) + dlina(3)

Debug.WriteLine(summa)

End Sub

А теперь запустите отладочный пошаговый режим выполнения программы и загляните в окне Locals в значения dlina(1), dlina(2), dlina(3), summa. Заметьте на будущее, что желтая полоса не перескакивает через оператор

Dim dlina(3) As Integer

и плюсик в окне Locals у переменной dlina появляется только после его выполнения. Жмите на плюсик – и перед вами значения всех 4 элементов массива.

Инициализация массива. В предыдущем примере мы задавали значения элементам массива простым присвоением. Можно сделать это короче:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim dlina() As Integer = {0, 500, 400, 600}

Dim summa As Integer

summa = dlina(1) + dlina(2) + dlina(3)

Debug.WriteLine(summa)

End Sub

Пояснение: В операторе

Dim dlina() As Integer = {0, 500, 400, 600}

мы в фигурных скобках задаем через запятую значения подряд всем элементам массива, начиная с нулевого (хоть он нам в данной задаче и не нужен). В этом случае значение верхней границы индекса в круглых скобках не указывается. Однако VB подразумевает, глядя на длину списка в фигурных скобках, что вы объявили массив dlina(3).

Пример. Теперь запишем ту же программу в предположении, что длины удавов заранее не известны и мы их вводим при помощи InputBox. Вдобавок определим, правда ли, что первый удав длиннее второго:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim dlina(3) As Integer

dlina(1) = InputBox("Введите длину 1-го удава")

dlina(2) = InputBox("Введите длину 2-го удава")

dlina(3) = InputBox("Введите длину 3-го удава")

Debug.WriteLine (dlina(1) + dlina(2) + dlina(3))

If dlina(1) > dlina(2) Then MsgBox("Правда") Else MsgBox("Неправда")

End Sub

Нарушение границы. Раз вы объявили границу индекса, то должны ее придерживаться. Так, неправильно было бы теперь написать dlina(4) = 200. Ведь место в памяти под dlina(4) не отведено. В этом случае при выполнении проекта VB выдаст ошибку:

Index was outside the bounds of the array

что означает:

Индекс вышел за границы массива