КАТЕГОРИИ: Архитектура-(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), который выполняет ввод массива (задает значения элементам массива). Это означает, что этот блок от точки входа до точка выхода имеет собственную блок-схему, которой мы займемся позже. А пока на этом блоке просто записано, что он делает. На рис. 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 счастливых билетов
Дата добавления: 2014-12-07; Просмотров: 565; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |