Студопедия

КАТЕГОРИИ:


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

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




Массив

Лекция 8

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

При необходимости выполнить некоторое действие над всеми элементами массива можно сослаться на массив как целое по его имени. Возможны также ссылки на его отдельные элементы. Каждый отдельный элемент массива определяется именем массива и значениями индексов. Например, ссылка a (7) означает, что а – это имя одномерного массива с одним индексом, элемент массива имеет значение индекса равное 7. Одномерный массив принято называть вектором. Например, ссылка a 1(2, 9) означает, что а 1- это имя двумерного массива Двумерные массивы принято называть матрицами. Можно по аналогии с матрицами считать, что элемент a 1(2, 9) принадлежит 2 строке и 9 столбцу.

Как и простые переменные, массивы описываются с помощью инструкций Dim, Static, Private или Public. Разница в объявлении между скалярными переменными (т.е. не массивами) и массивами состоит в том, что для массива надо указывать его размер (количество ячеек, отводимых под массив). Массив с заданным размером называется фиксированным. Массив, объявление размера которого отложено, называется динамическим.

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

 

НижняяГраница 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

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-07; Просмотров: 565; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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