Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Динамические массивы

Статические массивы

 

Статические массивы не меняют размерности и размера в процессе выполнения программы.

 

Объявление статических массивов.

Одномерный массив:

 

Dim <имя_массива (верхняя граница индекса)> As тип

 

Нижняя граница индекса по умолчанию равна 0.

 

Двумерный массив:

 

Dim <имя_массива (верхняя_граница_индекса1, верхняя_граница индекса2)> As Тип

 

Нижние границы индексов по умолчанию равны 0.

Примеры:

Dim A(20) As Integer

Dim Mass(10, 15) As String ‘аналогично определяются и другие

‘многомерные массивы.

При объявлении массива за ним закрепляется область оперативной памяти (ОП). Для

установки произвольных границ массива используют другое объявление.

 

Одномерный массив:

 

Dim <имя_массива(нижняя_граница_индекса> Тo <верхняя_граница индекса)> As Тип

 

Двумерный массив:

 

Dim <имя_массива (нижняя_граница_индекса1> Тo <верхняя_граница индекса1, _

нижняя_граница_индекса2> Тo <верхняя_граница_индекса2)> As Тип

Примеры:

Dim A(1 To 10, 5 To 15) As Integer ‘двумерный массив

Dim C(3 To 12) As Boolean ‘одномерный массив

Dim D(7, 10 To 20) As Single ‘двумерный массив, первый индекс – от 0 до 7

 

Замечание:

При объявлении массивов, как и при объявлении переменных, можно использовать вместо Dim ключевые слова Private и Public:

- Private – область определения: контейнер (форма, модуль);

- Public – область определения: всё приложение.

 

 

Нередко размер массива не может быть определен заранее. Было бы расточительно объявлять массив заведомо большего размера. В языке Visual Basic есть средство, позволяющее решить эту проблему. Это динамический массив

Объявление такого массива осуществляется в два этапа. Сначала массив определяют в секции General Declarations контейнера (формы, модуля) без указания размера:

Dim <имя_массива()> As Тип ‘область определения – контейнер, ‘если Public, то массив глобальный

Затем в процедуре с помощью оператора переопределения (переобъявления) массива ReDim устанавливают фактический размер массива (изменять можно только верхнюю границу и только последнего индекса):

 

Private Sub …

ReDim <имя_массива (10, 20)>

...............

...............

End Sub

 

Замечание:

Первоначальные значения констант, определяющих границы изменения индексов, могут задаваться в разделе описания Const, указав имя константы, ее значение. Наиболее гибкий способ объявления массивов – размеры массивов задаются путём ввода их значений с использованием функции InputBox.

Пример:

Const M = 20, N = 10 ‘ключевое слово Const предваряет объявление констант _

более гибко: M = InputBox (“Укажите значения M и N”)

Dim A(M) As Single, B(1 To N) As Integer

Функцией InputBox предпочтительнее обеспечивать задание границ изменения индексов и при переопределении массивов, используя её перед оператором ReDim, например, перед ReDim <имя массива> (M, N).

 

3.4. Одномерные массивы

 

3.4.1. Ввод одномерных массивов

 

1. Ввод массива в память (создание массива) с помощью клавиатуры и функции InputBox:

 

Процедура ввода имеет вид:

Private Sub CmdSozd_Click ()

Const N = 15

Dim I As Integer

Dim A(1 To N) As Single ‘объявление массива

For I = 1 To N

A(I) = InputBox (“Введите значение элемента с номером: ”& I)

Next I

End Sub

 

2. Ввод (создание) массива с использованием стандартной функции Choose, выполняющей выбор элементов (значений), заданных в списке. Синтаксис функции:

Choose (Index, ch_1 [, ch_2, … [, ch_n]]),

где: - index – числовое выражение или поле, принимающее значения от 1 до числа возможных элементов в списке;

ch_1, …, ch_n – элементы списка.

Пример

For I = 1 To 7 ‘занесение данных в массив Den_Ned

Den_Ned(I) = Choose(I, “Пн”, “Вт”, “Ср”, “Чт”, “Пт”, “Сб”, “Вс”)

Next I

3.4.2. Вывод одномерных массивов

 

Вывод массива (его отображение) может осуществляться несколькими способами:

- оператором MsgBox – сцепляя элементы массива в строку – в специальное

окно;

- в элемент ListBox – построчно, начиная с нулевой строки массива;

- в элемент TextBox – сцепляя элементы массива в строки;

- оператором Print – на форму - выводимая информация будет появляться

либо вдоль левой границы формы, либо в верхней части ЭФ в зависимости от используемых в операторе разделителей, “ скрываясь ” за объектами (элементами) управления, расположенными на форме (принять меры, чтобы печать была виднапереместить элементы).

Пример:

Пусть на форме имеются текстовое поле с именем TxtViv, список с именем ListViv и кнопка “Вывод” с именем CmdViv. Двойным щелчком вызовем процедуру:

Procedure Sub CmdViv_Click ()

Dim A(1 To 5) As Single ‘массив

Dim I As Integer ‘параметр цикла

Dim Mass As String ‘строка для размещения элементов массива

‘Создание массива А (см. начало п. 3.4)

‘Вывод массива

Mass = “”: TxtViv.Text = “” ‘очистка строки для вывода массива и текстового поля

For I = 1 To 5

TxtViv.Text = TxtViv.Text & “ ” & A(I) ‘формирование строки в TextViv

Mass = Mass & Str(A(I)) & “ ” ‘подготовка строки для MsgBox

ListViv.List (I) = A(I) ‘вывод в список (5 строк)

Next I

MsgBox “Массив:” & Mass ‘вывод в специальное окно

End Sub

 

3.4.3. Обработка одномерных массивов

 

Для упрощения будем считать, что решение производится на простейшей форме с двумя кнопками Cmd1 и CmdExit, так что вся программа будет сосредоточена в процедуре связанной с кнопкой Cmd1.

Примеры:

Пример1. Определить максимальный элемент массива из заданного числа элементов. Определить также номер максимального элемента.

 

Private Sub Cmd1_Click ()

Dim A(1 To 10) As Single, Max As Single, I As Integer, Nom As Integer

For I = 1 To 10 ‘Ввод массива

A(I) = InputBox (“Вв.элемент с номером ” & I)

Next I

Max = A(1)

For I = 1 To 10

If A(I) > Max Then Max = A(I)

Next I

Print “Максимальный элемент = ” & Max ‘второй просмотр позволит _

определить номера всех максимальных элементов

Print “номера максимальных элементов”

For I = 1 To 10

If A(I) = Max Then Print I ‘принять меры, чтобы печать была видна

Next I

End Sub

Пример 2. Определить первый максимальный элемент из числа отрицательных элементов массива.

Private Sub Cmd1_Click ()

Dim A(1 To 20) As Single, Max As Single ‘объявление массива и переменных

Dim I As Integer, Nom As Integer

ввод массива – (см. выше Пример1)

Max = -1E45

For I = 1 To 20

If A(I) < 0 And A(I) > Max Then Max = A(I): Nom = I ‘если нужно искать _

последний, то: If A(I) < 0 And A(I) >= Max Then Max = A(I): Nom = I

Next I

If Max =-1E45 Then MsgBox “В массиве нет отрицательных элементов”

Else MsgBox “искомый максимальный элемент =” & Max & “ “ & _

“номер=” & Nom

<== предыдущая лекция | следующая лекция ==>
Определения. В языке Visual Basic наряду со скалярными данными в VB определены и структурированные (т.е | Двумерные массивы
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 439; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.