Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vba.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.8 Mб
Скачать

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

Размеры динамического массива могут изменяться во время работы нашей программы. Для того, чтобы массив был динамическим, необходимо объявить массив следующим образом:

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

Обращаем внимание на то, что границы в динамических массивах могут быть описаны с помощью перемененных (в нединамических массивах г границы - это константы).

Пример:

Dim ARR()as integer

Redim ARR(1to n ,2 to m)

‘Объявлен динамический целочисленный двумерный массив, первый индекс изменяется от 1 до n, второй – от 2 до m.

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

Пусть задан одномерный массив Ai , i=1,…,(Ai),I=1,n

Блок-схема ввода-вывода имеет вид

Мы рассмотрим фрагменты программ с различными модификациями блока №2.

Введение массива с помощью функции InputBox (ввод «вручную»).

В данном фрагменте кода мы рассмотрим, как объявляется динамический массив и как записывается сам цикл. В остальных примерах будет рассмотрен только оператор №2.

DIM A()

n=InputBox (''Ввести размер массива'') ‘Ввод размера массива

Redim A(1 to n) ‘Задание размера массива

For i=1 to n

A(i) =InputBox ( ''Ввести ''& i & '' элемент'', ''Ввод массива'') ‘блок №2

NEXT

На каждом шаге цикла будет появляться окно ввода следующего вида. Естественно вместо числа 1, которое вы видите сейчас, будет появляться номер соответствующего шага. В текстовое поле вам нужно будет вводить соответствующий элемент массива.

2)Введение массива с помощью генератора случайных чисел

Для генерации случайных чисел используется функция Rnd, значение которой есть случайным (точнее псевдослучайным) числом из интервала (0,1). При записи вида Y=Rnd значение переменной Y может быть равно 0.1 или 0.76 или 0.13 и т.д.

Блок №2 нашей блок-схемы приобретает вид

А(i)=RND

Задача: ввести целочисленный массив с помощью, генератора случайных чисел так, чтобы значения были в пределах от 0 до 20

Randomize

FOR i=1 to n

A(i)=int(21*Rnd)

Rnd случайное число из (0;1)

Int целая часть числа

NEXT i

Для того, чтобы последовательности случайных чисел были «более» случайными (если внимательно посмотреть на задаваемые последовательности этих «случайных» чисел во время различных запусков программы, то они окажутся одинаковыми!) перед использованием функции Rnd есть смысл использовать инструкцию Randomize, которая позволяет начальное значение псевдослучайных чисел связывать с системным таймером.

Отметим, что если число х лежит в пределах (0;1), то 21х в пределах (0,21), и 21 не включается в интервал.

Рассмотрим фрагмент программы, позволяющий использовать возможности функции MSGBOX для альтернативного выбора ввода вручную или с помощью генератора случайных чисел.

Y=MSG BOX ("ввести вручную", VBYESNO)

If y=VB YES THEN

ввод вручную

ELSE

ввод с помощью генератора

END IF

Естественно, что вместо комментариев вам надо вставить описанные выше фрагменты кода.

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

1)Вывод массива в окно отладки

For i=1 to n

Debug.Print "А("; i ;”)=";А(i)

NEXT i

Замечание. Обращаем внимание на то, что при использовании метода Print разделителем в списке могут служить символы «;» и «,».

Символ «;» ставится между элементами списка, когда при выводе между элементами вывода нужен один пробел

Символ «,» следующее значение списка печатается в новой зоне, прижимаясь к её правому краю ( зона – это 14 различных знакомест под символы ).

Если наш список печати заканчивается символом «;» или символом «,», то последующая выводимая информация печатается в той же строке (т.е. нет перехода на новую строку ).

«Пустой» оператор PRINT(то есть такой, в котором нет списка вывода просто Debag.Print) позволяет перейти на новую строку при выводе информации на экран.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]