Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Visual Basic.doc
Скачиваний:
105
Добавлен:
09.04.2015
Размер:
1.1 Mб
Скачать

1. Описание массива фиксированного размера

При объявлении фиксированного массива, кроме его имени и типа элементов, необходимо для каждого индекса указать его верхнюю и нижнюю границы:

НижняяГраница To ВерхняяГраница

Например, Dim x(1 To 10) As Single

При объявлении можно указать, только верхнюю границу, тогда по умолчанию нижняя граница равна 0. Нижняя граница по умолчанию будет установлена равной 1, если в главной секции имеется инструкция Option Base 1. Допустимым значением дляOption Base являются только 0 и 1.

В следующей строке программы массив фиксированного размера описывается как массив типа Integer, имеющий 11 строк и 11 столбцов:

Dim a1(10, 10) As Integer

Первый аргумент внутри скобок представляет строки, а второй – столбцы.

Как и при описании скалярных переменных, если тип при описании массива не задается, подразумевается, что элементы массива имеют универсальный тип Variant.

Пример 1. Вычисление среднего арифметического.

Вычислить

, k<= 100.

1. Применяемые данные

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

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

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

Результаты:

s– переменная с плавающей точкой обычной точности, значение среднего арифметического;

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

Сумма – переменная с плавающей точкой обычной точности, значение суммы первых kэлементов массиваx;

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

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

Полная блок-схема алгоритма приведена на рис. 8.1 и 8.2.

Остановимся подробнее на блок-схеме, изображенной на рис. 8.1. Все входящие в нее блоки пронумерованы. Она содержит один укрупненный блок (№ 2), который выполняет ввод массива (задает значения элементам массива). Это означает, что этот блок от точки входа до точка выхода имеет собственную блок-схему, которой мы займемся позже. А пока на этом блоке просто записано, что он делает.

Укрупненные блоки обычно изображаются в виде прямоугольника с двойными вертикальными сторонами.

Посмотрим на эту блок-схему с точки зрения базовых структур, которые в нее входят. Блоки 1 – 3 составляют последовательную структуру (следование), которую мы назовем Структура 1. Блоки 4 – 7 относятся кциклу. Эту структуру мы назовем, Структура 2. Блоки 8, 9 – это опять последовательная структура, которую мы назовем Структура 3. Структура 1, Структура 2 и Структура 3, рассматриваемые в совокупности также являются структурой следования. В блок-схеме любогоструктурированного алгоритмавсегда можно ясно увидеть базовые структуры, из которых строится алгоритм.

На рис. 8.2 приведена блок-схема алгоритма ввода массива. Дело в том, что в VBнет такой инструкции, которая бы одна обеспечивала ввод всего массива. Можно ввести значение лишь одного элемента массива. Поэтому для ввода массива приходится применять цикл.

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

В этом проекте и во многих следующих примерах мы будем применять простейший интерфейс, когда на форме находится единственная кнопка Command1, щелчок на которой начинает выполнение кода проекта. СвойствуCaptionэтой кнопки следует задать значениеВычислить. СвойствуAutoRedrawформы следует задать значениеTrue, чтобы после перекрытия окна формы другим окном или при свертывании формы и ее развертывании происходило перерисовывание выведенной на ней информации.

Рис. 8.3. Интерфейс проекта

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

Option Explicit

Option Base 1

Private Sub Command1_Click()

1: Dim k As Integer

Dim a(100) As Single

Dim s As Single

Dim i As Integer

5: Dim Сумма As Single

Cls

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

Print "k = " & k

ВводВектора a, k

10: Сумма = 0

For i = 1 To k

Сумма = Сумма + a(i)

Next

s = Сумма / k

15: Print "Среднее арифметическое равно " & s

End Sub

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

Dim i As Integer

For i = 1 To n

x(i) = InputBox("Элемент вектора (" & i & ")=?", "Ввод вектора")

Print x(i),

Next

Print

End Sub

Инструкция Option Explicit в главной секции требует явного объявления переменных. Эта инструкция, если она есть, всегда должна быть первой в главной секции.

Инструкция Option Base 1 в главной секции устанавливает, что по умолчанию нажняя граница индекса массива равна не 0, а 1.

После запуска проекта на выполнение программный код начнет выполняться только после нажатия на кнопки Command1. В этом случае для кнопки Command1 происходит событие Click, что и приводит к выполнению событийной процедуры Command1_Click.

В строках 1 – 5 тела этой процедуры находятся инструкции объявлений данных. При этом под переменные и под массив отводится память. В строке 6 тела процедуры содержится обращение к методу Cls, который обеспечивает очистку формы от ранее выведенной на ней информации, что возможно, когда на кнопку Command1 Вы нажимаете не первый раз. Инструкция присвоения в строке 7 задает значение переменной k (то значение, которое будет введено в окне функции InputBox). Следующая инструкция, находящаяся в строке 8 для контроля печатает на форме значение переменной k. В строке 9 содержится обращение к пользовательской процедуре ВводВектора. Выполнение этого обращения упрощенно можно понимать так, что выполняются все инструкции тела процедуры ВводВектора, в которых предварительно имя агумента x заменено на указанное в обращении значение аргумента a, и имя аргумента n заменено на k.

Строки 1 – 10 процедуры Command1_Clickреализуют часть алгоритма блок-схемы, изображенной на рис. 8.1, которую мы выше назвали Структура 1. Вот так следующими сверху вниз инструкциями реализуется наVBбазовая структура алгоритма, называемая следованием.

Строки 11 – 13 процедуры Command1_Clickреализуют цикл. В данном случае это та часть алгоритма блок-схемы, изображенной на рис. 8.1, которую мы выше назвали Структура 2. Обратите внимание на то, что в программе нет инструкцииi= 1, а также инструкцииi=i+ 1, несмотря на то, что эти инструкции есть в блок-схеме. Нет также проверки условияi<=k. В программе выполнение этих действий обеспечивает инструкцияForNext.

Строки 14 и 15 процедуры Command1_Clickреализуют часть алгоритма блок-схемы, изображенной на рис. 8.1, которую мы выше назвали Структура 3.

Процедура Ввод_векторавыполняется при обращении к ней в процедуреCommand1_Click. Обращение (это инструкция, включающая имя процедуры и значения аргументов) приводит к выполнению тела процедуры, в котором имена аргументов (примененные в объявлении процедуры) заменены именами значений аргументов (указанными в обращении к процедуре). Эта процедура обеспечивает ввод значений всех элементов одномерного массива, а также печать на форме для контроля всех введенных значений элементов массива.

Пример 2. Счастливые билеты

Трамвайный билет имеет шестиразрядный номер. Сколько всего таких билетов, у которых сумма первых трех цифр номера равна сумме последних трех цифр?

Option Explicit

Private Sub Command1_Click()

Dim i As Integer, j As Integer, k As Integer

Dim КСБ As Long

Dims(27)AsInteger

' Сумма цифр трех правых разрядов (а также трех левых

' разрядов) может принимать значения 0, 1, 2, … , 27.

For i = 0 To 27

s(i) = 0

Next

' Обнуление счетчика s(i). Дальше в кратном цикле

' вычисляются s(i), равное числу выпадения суммы цифр трех

' разрядов, равной i.

For i = 0 To 9

For j = 0 To 9

For k = 0 To 9

s(i + j + k) = s(i + j + k) + 1

Nextk,j,i

' Находим Количество счастливых билетов (КСБ).

' При этом учтем, что при каждом значении суммы трех левых

' разрядов, равной i, эта же сумма в трех правых

' разрядах выпадает s( i ) раз. Но и в трех левых разрядах она

' появляется тоже s( i ) раз. Следовательно, всего случаи

' равенства суммы трех левых и трех правых разрядов значению i

' имеют место s( i )^2 раз.

КСБ = 0

For i = 0 To 27

КСБ = КСБ + s(i) ^ 2

Next

Print“Найдено “; КСБ – 1; “ счастливых билетов”

' Вычли 1, так как номера 000000 нет. Нумерация начинается

' с номера 000001.

End Sub

При выполнении программы на форме будет выведено:

Найдено 55251 счастливых билетов