КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Описание массива фиксированного размераПри объявлении фиксированного массива, кроме его имени и типа элементов, необходимо для каждого индекса указать его верхнюю и нижнюю границы:
НижняяГраница To ВерхняяГраница
Например, Dim x(1 To 10) As Single
При объявлении можно указать, только верхнюю границу, тогда по умолчанию нижняя граница равна 0. Нижняя граница по умолчанию будет установлена равной 1, если в главной секции имеется инструкция Option Base1. Допустимым значением для 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), который выполняет ввод массива (задает значения элементам массива). Это означает, что этот блок от точки входа до точка выхода имеет собственную блок-схему, которой мы займемся позже. А пока на этом блоке просто записано, что он делает. На рис. 8.2 приведена блок-схема алгоритма ввода массива. Дело в том, что в VB нет такой инструкции, которая бы одна обеспечивала ввод всего массива. Можно ввести значение лишь одного элемента массива. Поэтому для ввода массива приходится применять цикл.
3. Разработка интерфейса проекта В этом проекте и во многих следующих примерах мы будем применять простейший интерфейс, когда на форме находится единственная кнопка Command1, щелчок на которой начинает выполнение кода проекта. Свойству Caption этой кнопки следует задать значение Вычислить. Свойству AutoRedraw формы следует задать значение True, чтобы после перекрытия окна формы другим окном или при свертывании формы и ее развертывании происходило перерисовывание выведенной на ней информации.
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 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. В программе выполнение этих действий обеспечивает инструкция For … Next. Строки 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 Dim s(27) As Integer ' Сумма цифр трех правых разрядов (а также трех левых ' разрядов) может принимать значения 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 Next k, 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 счастливых билетов
|