Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Лекция 9. Описание динамического массива




Присвоение массивов

Описание динамического массива

Если массив описан как динамический, можно изменять его размер во время работы программы. Для описания динамического массива используются инструкции Static, Dim, Private или Public с пустыми скобками:

Dim a2 () As Single

При выполнении программы можно переобъявлять динамический массив с помощью инструкции ReDim.

Среди инструкций некоторой процедуры или функции можно записать:

ReDim a2 (5, 1 To 10)

Далее этот массив может быть переопределен:

ReDim a2 (15)

С помощью инструкции ReDim можно изменять размер массива (число элементов), верхние и нижние границы индексов, а также количество размерностей (индексов). Инструкцию ReDim можно применять для изменения динамического массива столько раз, сколько потребуется. Однако при каждом применении данные, содержащиеся в массиве, теряются.

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

Dim a4 () As Integer

Затем в программе установлен размер этого массива

ReDim a4 (n)

Далее в программе может быть, например, записано

ReDim Preserve a4(n+10)

Использование зарезервированных слов ReDim Preserve вместе с динамическим массивом позволяет изменить только верхнюю границу и только последней размерности массива. Изменение числа размерностей невозможно.

Начиная с VB 6.0, имеется возможность присвоить содержимое одного массива другому так же, как это делается для простых переменных. Но эти массивы должны иметь одинаковые значения размерностей и одинаковое количество элементов. Если же в левой части оператора присвоения стоит динамический массив, то совпадение размерностей и числа элементов не обязательно. Размерность и число элементов массива в левой части оператора присвоения при необходимости изменятся.

Пример. Найти значение наибольшего элемента одномерного массива.

 


1. Выбор данных.

Исходные данные:

k – Переменная целого типа, число заданных величин;

a () – динамический массив с плавающей точкой обычной точности, значения заданных величин.

Результаты:

НаибЭлем – переменная с плавающей точкой обычной точности, значение наибольшего среди рассмотренных элементов массива a;

Промежуточные:

i – переменная целого типа, значение индекса элемента массива x.

2. Построение блок-схемы алгоритма (см. рис. 9.1).

Ввод массива представлен укрупненным блоком (блок 2). Основой алгоритма является цикл (блоки 4 – 8). В этот цикл входит разветвление (блоки 6 и 7).

 

3. Разработка интерфейса проекта

Воспользуемся тем же интерфейсом проекта, который был применен для примера, рассмотренного в предыдущей лекции (подробнее).

 

4. Составление программы.

 

Option Explicit

Option Base 1

Private Sub Command1_Click()

1: Dim i As Integer, k As Integer

Dim a() As Single

Dim НаибЭлем As Single

Cls

5: k = InputBox("Введите k")

Print "k= " & k

ReDim a(k)

Print "Ввод вектора а"

Ввод_вектора a

10: НаибЭлем = a(1)

For i = 2 To k

If a(i) > НаибЭлем Then НаибЭлем = a(i)

Next

Print "Наибольший элемент равен "; НаибЭлем

End Sub

Private Sub Ввод_вектора(x() As Single)

1: Dim i As Integer

Dim i_min As Integer

Dim i_max As Integer

i_min = LBound(x)

5: i_max = UBound(x)

For i = i_min To i_max

x(i) = InputBox("Элемент вектора (" _

& i & ")=?", "Ввод вектора")

Print x(i),

Next

Print

End Sub

 

В этой программе применяется динамический массив a. В строке 9 тела процедуры Command1_Click происходит обращение к процедуре Ввод_вектора, которая обеспечивает ввод всех элементов массива a. Упрощенно можно действие этого обращения понимать так, как будто на месте строки 9 выполняется все тело процедуры Ввод_вектора, во всех инструкциях которого имя x заменено на имя a. Процедура Ввод_вектора обеспечивает не только ввод значений всех элементов массива, но печать на форме их значений для контроля правильности задания значений при вводе. В этой процедуре применяется обращение к функция LBound(x), которая возвращает наименьшее значение индекса массива, имя которого является аргуменом этой функции. В процедуре Ввод_вектора также применяется обращение к функция UBound(x), которая возвращает наибольшее значение индекса массива, имя которого является аргуменом этой функции.

Инструкция, находящаяся в стоке 8 процедуры Ввод_вектора, обеспечивает печать элемента массива. Следующий элемент массива будет выведен в той же самой строке (подробнее).

Инструкция, находящаяся в стоке 10 процедуры Ввод_вектора, нужна, чтобы следующая (если такая есть) инструкция Print после выхода из процедуры Ввод_вектора выводила информацию на форме не в той же самой, а в следующей строке.




Поделиться с друзьями:


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


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



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




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