Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




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

 

НижняяГраница 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), который выполняет ввод массива (задает значения элементам массива). Это означает, что этот блок от точки входа до точка выхода имеет собственную блок-схему, которой мы займемся позже. А пока на этом блоке просто записано, что он делает.


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


Посмотрим на эту блок-схему с точки зрения базовых структур, которые в нее входят. Блоки 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

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 счастливых билетов

 


Поделиться:

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





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты