Спонсор: Microsoft
Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3925 / 218 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 12:

Использование массивов и коллекций для управления данными

Работа с элементами массива

После того, как вы объявили массив с помощью ключевого слова Dim или Public, его можно использовать в вашей программе. Для ссылки на элемент массива используются имя массива и индекс массива, заключенный в круглые скобки. Индекс должен быть целым числом или выражением, которое при его вычислении дает в результате целое число. Например, индекс может быть числом 5, целочисленной переменной num или выражением типа "num - 1". (Часто используется переменная-счетчик цикла For \dots Next.) Следующий оператор присваивает элементу с индексом 5 массива Employees, использовавшегося в предыдущем разделе, значение "Лесли":

Employees(5) = "Лесли"

В нашем массиве Employees это приведет к следующему результату.


Аналогично следующий оператор присваивает элементу, расположенному в строке 0 и столбце 2 (начало третьей подачи) массива Scoreboard, приведенного в предыдущем разделе, значение 4:

Scoreboard(0, 2) = 4

В нашем массиве Scoreboard это приведет к следующему результату.


Эту методику индексирования можно использовать для присвоения и получения значений элементов массива.

Создание массива фиксированной длины для хранения температур

В следующем упражнении одномерный массив с именем Temperatures используется для записи максимальных ежедневных температур в течение недели. Эта программа демонстрирует, как можно использовать массив для хранения и обработки группы связанных значений в форме. Переменная массива Temperatures объявляется в верхней части формы, а затем с помощью функции InputBox в цикле For \dots Next (см. "Циклы и таймеры" ) этому массиву присваиваются температуры. Для указания каждого из элементов массива используется счетчик цикла. Затем с помощью цикла For \dots Next и объекта текстового поля содержимое массива отображается в форме. Также вычисляется и отображается "средняя" максимальная температура.

Функции LBound и UBound

Для облегчения работы с массивом программа Fixed Array использует для проверки верхней границы (старшего индекса) массива функцию UBound. UBound - это старое ключевое слово BASIC и Visual Basic, которое используется до сих пор; оно позволяет обрабатывать массивы, не изучая операторов объявления, которые содержат точные указания на то, сколько элементов содержится в массиве. Тесно связанная с ней функция LBound, которая проверяет нижнюю границу массива, в Visual Basic .NET все еще присутствует, но так как все массивы Visual Basic .NET теперь имеют нижнюю границу, равную 0, эта функция просто возвращает нулевое значение. Функции UBound и LBound имеют следующий синтаксис

LBound(Имя_массива)
UBound(Имя_массива)

где Имя_массива - это имя массива, которое было объявлено в проекте.

Массив фиксированной длины
  1. Запустите Microsoft Visual Studio и создайте в папке c:\vbnet03sbs\ Гл.11 новый проект с именем My Fixed Array.
  2. Нарисуйте в форме текстовое поле.
  3. Установите свойство Multiline объекта TextBox1 на значение True, чтобы можно было изменить размер этого объекта.
  4. Измените размер объекта текстового поля так, чтобы он заполнял почти все пространство формы.
  5. Нарисуйте в форме под этим объектом текстового поля два широких объекта кнопок, расположенных рядом друг с другом.
  6. Установите для формы и ее объектов следующие свойства.

    Объект Свойство Установка
    TextBox1 ScrollBars Vertical
    Text пустой (empty)
    Button1 Text "Ввести температуры"
    Button2 Text "Отобразить температуры"
    Form1 Text "Фиксированный массив температур"

    Ваша форма должна выглядеть примерно так.


  7. Чтобы просмотреть Редактор кода, щелкните в Обозревателе решений на кнопке View Code (Просмотреть код).
  8. Прокрутите программный код формы в самый верх, и прямо под тэгом "Windows Form Designer generated code" ("Код, автоматически созданный конструктором форм Windows") введите следующее объявление массива:

    Dim Temperatures(6) As Single

    Этот оператор создает массив с именем Temperatures (имеющий тип Single ), который содержит семь элементов, пронумерованных от 0 до 6. Так как этот массив был объявлен в верхней части формы, он будет доступен во всех процедурах событий формы.

  9. Снова отобразите форму, а затем щелкните дважды на кнопке Ввести температуры ( Button1 ). В Редакторе кода появится процедура события Button1_Click.
  10. Чтобы запросить у пользователя температуры и загрузить ввод в массив, введите следующие операторы программы:

    Dim Prompt, Title As String
    Dim i As Short
    Prompt = "Введите максимальную температуру за день."
    For i = 0 To UBound(Temperatures)
      Title = "День " & (i + 1)
      Temperatures(i) = InputBox(Prompt, Title)
    Next

    При загрузке температур в элементы массива с 0 по 6 цикл For...Next использует в качестве индекса массива переменную-счетчик типа Short с именем i. Вместо того чтобы использовать простой синтаксис цикла For

    For i = 0 to 6

    который обрабатывал бы этот массив, я решил слегка усложнить запись, и использовал функцию UBound, чтобы сделать программу более гибкой и универсальной. Конструкция цикла For

    For i = 0 To UBound(Temperatures)

    определяет верхнюю границу массива с помощью оператора UBound. Это методика достаточно гибкая; если в дальнейшем массив увеличится или уменьшится, цикл For автоматически подстроится под новый размер массива.

    Чтобы заполнить массив температурами, процедура события использует функцию InputBox, которая отображает текущую дату с помощью счетчика цикла For.

  11. Снова отобразите форму, а затем сделайте двойной щелчок мышью на кнопке Отобразить температуры ( Button2 ).
  12. Введите в процедуре события Button2_Click операторы программы:

    Dim Result As String
    Dim i As Short
    Dim Total As Single = 0
    Result = "Максимальные температуры за неделю: " & vbCrLf & vbCrLf
    For i = 0 To UBound(Temperatures)
      Result = Result & "День " & (i + 1) & vbTab & _
      Temperatures(i) & vbCrLf
      Total = Total + Temperatures(i)
    Next
    Result = Result & vbCrLf & _
    "Средняя температура: " & Format(Total / 7, "0.0")
    TextBox1.Text = Result

    Эта процедура события использует цикл For \dots Next для перебора элементов массива, и добавляет содержимое каждого из элементов в строковую переменную с именем Result, которая объявлена в верхней части процедуры события. Для того чтобы добавить в эту строковую переменную символ перевода строки ( vbCrLf ), символы табуляции ( vbTab ) и заголовки, я использовал несколько литеральных констант, специальных констант и оператор конкатенации строк (&). Константа vbCrLf, использованная здесь впервые, содержит символ перевода строки и символ возврата каретки, и является эффективным способом создавать новые строки. Константа vbTab также используется здесь впервые и создает в строке Result между днем и значением температуры некоторое расстояние. В конце процедуры события определяется среднее значение для всех температур, и окончательная строка присваивается свойству Text объекта текстового поля:

    TextBox1.Text = Result
  13. Чтобы сохранить проект, щелкните на кнопке Save All (Сохранить все) на стандартной панели инструментов.
  14. Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Fixed Array лежит в папке c:\vbnet03sbs\Гл.11\fixed array.
  15. Щелкните на кнопке Ввести температуры, а затем при появлении запросов от функции InputBox введите семь различных температур. Диалоговое окно функции InputBox выглядит так.


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


  17. Чтобы завершить выполнение программы, щелкните на кнопке Закрыть формы.
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?

Анатолий Федоров
Анатолий Федоров
Россия, Москва, Московский государственный университет им. М. В. Ломоносова, 1989
Светлана Ведяева
Светлана Ведяева
Россия, Саратов