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

Оказывается, массив – это объект. Объект класса Array пространства имен System. Как?! – скажете вы, – мы до сих пор прекрасно работали с массивами и, как говорится, «ни сном, ни духом»! Мы нигде не писали New, не пользовались свойствами и методами массивов. – Что ж, верно, многим программистам вполне можно работать с массивами и не подозревать, что это объекты. Авторы VB замаскировали этот факт (как мне кажется), чтобы не пугать программистов, переходящих с Visual Basic 6.0 на VB. Массивы-объекты рождаются в вашей программе «нечувствительно» для вас безо всякого New.

И все же, вот как можно создать массив при помощи New:

Dim a() As Integer = New Integer() {8, 1, 4, 3}

Нам будут полезны некоторые свойства и методы массивов (см. процедуру):

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

Dim a() As Integer = {80, 60, 50, 90, 40, 20, 50, 70}

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

Debug.WriteLine(a.Length) 'Длина массива a (число элементов) = 8

Debug.WriteLine(t.Length) 'Длина массива t (число элементов) = 20

Debug.WriteLine(t.GetUpperBound(0)) 'Число строк (макс. индекс первого измерения) - 1 = 3

Debug.WriteLine(t.GetUpperBound(1)) 'Число столбцов (макс. индекс второго измерения) - 1 = 4

'Ищется первое вхождение числа 50 в одномерный массив a и находится его индекс (2):

Debug.WriteLine(Array.IndexOf(a, 50))

'Ищется последнее вхождение числа 50 в одномерный массив a и находится его индекс (6):

Debug.WriteLine(Array.LastIndexOf(a, 50))

Debug.WriteLine(Array.IndexOf(a, 55)) 'Ищется число 55 в массиве a и не находится (-1)

Array.Reverse(a) 'Все элементы массива a меняют порядок на обратный = {70, 50, 20, 40, 90, 50, 60, 80}

Array.Sort(a) 'Все элементы массива a сортируются по возрастанию = {20, 40, 50, 50, 60, 70, 80, 90}

Array.Clear(a, 4, 3) 'Обнуляется 3 элемента массива a, начиная с индекса 4= {20, 40, 50, 50, 0, 0, 0, 90}

End Sub

Из приведенных методов некоторые имеют несколько вариантов, которые я здесь не привожу.

Замечание. Учитывая, что массив – это объект, я призываю вас до поры не присваивать массив массиву целиком, без индексов, например, вот так:

Dim a() As Integer = {8, 1, 5, 2}

Dim b() As Integer

b = a

Присвоение, конечно, состоится, но совсем не такое, как вы ждали. Оно может привести к неожиданным для начинающих последствиям. Вот к каким, например. Продолжу фрагмент:

a(2) = 99

Debug.WriteLine(b(2))

Напечатается 99, а не 5, потому что массив – это объект. Почему? Расскажу позднее, в Error: Reference source not found.

    1. Массивы как параметры

До этого момента параметр процедуры или функции был для нас каким-то одним данным: это или одно число, или одна строка, или один объект. Но параметр может быть и массивом.

Задача: Имеется два массива, по три числа в каждом. Напечатать сумму элементов каждого массива. Использовать функцию sum, единственным параметром которой является суммируемый массив.

Программа:

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

Dim a() As Integer = {4, 10, 20}

Dim b() As Integer = {100, 40, 50}

Debug.WriteLine(sum(a))

Debug.WriteLine(sum(b))

End Sub

Function sum(ByVal c() As Integer) As Integer

sum = c(0) + c(1) + c(2)

End Function

Выполните программу в пошаговом режиме, глядя в окно Locals. Понаблюдайте, как массив c принимает в себя значения элементов массивов a и b.

В школе два класса. В каждом – два-три десятка учеников. Каждый ученик получил отметку на экзамене по физике. Определить, какой из двух классов учится ровнее (будем считать, что ровнее учится тот класс, в котором разница между самой высокой и самой низкой отметкой меньше).

Указание: Создать функции Минимум(c), Максимум(c) и Разница(c).

На двух метеостанциях (A и B) в течение года измерялась температура. Соответственно созданы два массива чисел длиной 365. Затем оказалось, что на обеих станциях термометры были испорчены: на станции A термометр все время показывал температуру на 2 градуса выше настоящей, а на станции B – на 3 градуса ниже. Написать процедуру с двумя параметрами, которая исправляет один произвольный массив и с ее помощью исправить оба массива. Один параметр процедуры – величина поправки, другой – массив температур.