Пользовательский интерфейс VBA 6 страница
ReDim A (n) ‘Одномерный массив из 10 элементов
ReDim A (3 To n, 1 To n) ‘Двумерный массив с базовыми индексами
Примечание. Оператор ReDim изменяет размерность массива, но не тип его элементов.
2.12.3 Действия над массивами
Для работы с массивом как единым целым используется идентификатор массива без указания индекса в круглых скобках. Массив может участвовать в операторе присваивания. Массивы, участвующие в этих действиях, должны быть идентичны по структуре, то есть иметь одинаковые типы индексов и одинаковые типы компонентов.
Пример 1.
Если массивы А и В описаны как
Dim A (1 To 2) As Byte, B (1 To 2) As Byte,
то применение к ним допустимой операции даст следующий результат:
Выражение | Результат |
A = B | Все значения элементов массива В присваиваются соответствующим элементам массива А. Значения элементов массива В остаются неизменны |
Пример 2.
Значение одного массива присваивается другому поэлементно в операторе цикла.
Sub primer ()
Dim A (1 To 2) As Byte, B (1 To 2) As Byte
Dim I As Byte
B(1) = 2
B(2) = 4
For I = 1 To 2
A(i) = B(i)
Debug.Print A(i), B(i)
Next i
End Sub
2.12.4 Действия над элементами массива
После объявления массива каждый его элемент можно обрабатывать, указав идентификатор (имя) массива и индекс элемента в круглых скобках.
Пример 1.
Запись
Mas (2), VectorZ (10)
позволяет обратиться к третьему элементу массива Mas и одиннадцатому элементу массива VectorZ.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, использоваться в операторах параметрических и итерационных циклов, входить в качестве параметров в операторы ввода и вывода; им можно присваивать любые значения, соответствующие их типу.
2.12.5 Формирование массива
1 способ.
Формирование массива в программе определяется поэлементно с помощью последовательности операторов.
Пример 1.
Dim B (1 To 2, 1 To 3) As Single
B (1,1) = 2 : B (1,2) = 4 : B (1,3) = 6
B (2,1) = 1 : B (2,2) = 6 : B (2,3) = 2
2 способ.
Формирование массива с помощью датчика случайных чисел.
Пример 2.
Sub primer ()
Dim A(1 To 12) As Variant
Randomize
For i = 1 To 10
A(i) = Rnd (40)
Debug.Print A(i)
Next i
End Sub
3 способ
Инициализация элементов массива оператором цикла.
Наиболее эффективно эта операция выполняется с помощью оператора For.
Пример 3.
Dim M (1 To 9, 1 To 9) As Integer
Dim i As Integer
Dim j As Integer
For i = 1 To 9
For j = 1 To 9
M(i, j) = i * j
Next j
Next i
4 способ
Использование функции Array (массив) для задания одномерного массива
Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant.
Пример 4.
Sub ShowArray ()
Dim A As Variant
A = Array (10, 20, 30)
Debug.Print A(0) ‘Отобразится: 10
Debug.Print A(2) ‘Отобразится: 30
End Sub
Использование функции Array (массив) для задания многомерного массива
Функция Array позволяет задавать не только одномерные, но и многомерные массивы. Это обеспечивается использованием вложенной конструкции с функциями Array.
Пример 5.
Option Base 1
Sub MultiDim ()
Dim A As Variant
A = Array (Array(“Санкт-Петербург“, “Россия“), Array (“Киев“, “Украина“))
Debug.Print A (1) (1) ‘Отобразится: Санкт-Петербург
Debug.Print A (1) (2) ‘Отобразится: Россия
End Sub
Функция Array позволяет задавать не просто многомерные массивы, а массивы, у которых строки имеют различное число компонентов.
Пример 6.
Private Sub VarArray ()
Dim M As Variant
M = Array(Array(1,2), Array (3,4,5))
Debug.Print M (0) (0), M (1) (2) ‘Отобразится: 1 5
End Sub
2.12.6 Одномерные массивы
Пример 1.
Формирование массива в программе с помощью последовательности операторов.
Постановка задачи. Реализовать на языке VBA алгоритм поиска наибольшего элемента последовательности с определением его местонахождения.
Технология выполнения задания:
1 Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Sub primer()
Const n = 10
Dim N_max As Integer
Dim i As Integer
Dim Max As Single
Dim B(1 To n) As Single
B(1) = 0.2: B(2) = 1.4: B(3) = 0.6
B(4) = 0.121: B(5) = 0.77: B(6) = 9.45
B(7) = 8.21: B(8) = 0.4: B(9) = 0.3
B(10) = 4.11
Max = B(1)
N_max = 1
For i = 2 To n
If B(i) > Max Then
Max = B(i)
N_max = i
End If
Next i
Debug.Print "Max= " & Max & " N_max= " & N_max
End Sub
2 Вычислить.
Пример 2.
Использование функции Array (массив) для задания одномерного массива.
Постановка задачи. Прежняя.
Технология выполнения задания:
1 Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Option Base 1
Sub primer()
Dim i As Integer
Dim Max As Single
Dim N_Max As Integer
Dim B As Variant
B = Array(0.1, 1.12, 3.12, 0.45, 101.47, 12.4, 10.12, 10.11, 6.47, 13.4)
Max = B(1)
N_Max = 1
For i = 2 To 10
If B(i) > Max Then
Max = B(i)
N_Max = i
End If
Next i
Debug.Print "Max= " & Max & " N_max= " & N_Max
End Sub
2 Вычислить.
Лабораторная работа № 6
Одномерные массивы
Цель: приобретение навыков программирования обрабатывать последовательности с помощью пользовательской подпрограммы-процедуры. Индивидуальные варианты лабораторной работы № 6 представлены в таблице 22 (2 часа).
Таблица 22
№ В | Варианты индивидуальных заданий |
Разработать процедуру пользователя для обработки последовательности | |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an являющихся нечётными числами | |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an кратных 3 и не кратных 5. | |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an являющихся квадратами чётных чисел. | |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an удовлетворяющих условию . | |
Даны натуральные числа n, a1, a2, … ,an. Определить количество ak последовательности a1,a2,…,an удовлетворяющих условию . | |
Даны натуральные числа n, q1, q2,…, qn. найти те члены qi последовательности q1, q2,…, qn которые являются удвоенными нечётными числами. | |
Даны натуральные числа n, q1, q2,…, qn. найти те члены qi последовательности q1, q2,…, qn которые при делении на 7 дают остаток 1.2 или 5. | |
Даны натуральные числа n, q1, q2,…, qn. найти те члены qi последовательности q1, q2,…, qn которые обладают тем свойством, что корни уравнения действительны и положительны. |
Продолжение таблицы 22
Вычислить , где | |
Дано натуральное число n. Получить сумму тех чисел вида , которые являются удвоенными нечётными. При отсутствии таких чисел искомая сумма равна нулю. | |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые кратны 5. | |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые нечётны и отрицательны. | |
Даны целые числа а1,…,а50. Получить сумму тех чисел данной последовательности, которые удовлетворяют условию . | |
Даны натуральное число n, действительные числа a1, a2, … ,an. в последовательности a1, a2, … ,an все отрицательные члены увеличить на 0.5, а все неотрицательные заменит на 0.1. | |
Вычислить , где | |
Даны целые числа a, n, x1,…,xn (n>0). Определить, каким по счёту идёт в последовательности x1,…,xn член, равный а. Если такого члена нет, то ответом должно быть число 0. | |
Даны натуральные числа n, a1, a2, … ,an. В последовательности a1, a2,…,an получить сумму положительных и число отрицательных членов. | |
Даны натуральные числа n, a1, a2, … ,an. Заменить все большие семи члены последовательности a1, a2, … ,an числом 7. Вычислить количество таких членов. | |
Даны целые числа a1, a2, … ,a45. Получить число отрицательных членов последовательности a1, a2, … ,a35 и число нулевых членов всей последовательности a1, a2, … ,a45. | |
Запишите +1 вместо максимального элемента массива (а1, а2, …, а50), а -1 вместо минимального. |
2.12.7 Двумерные массивы. Вложенные циклы.
Пример 1.
Постановка задачи. Даны натуральное число n, действительная матрица размера n x 3. Получить сумму положительных и число отрицательных членов во всей матрице.
Технология выполнения задания:
1 Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Sub primer()
Const n = 3
Const m = 3
Dim S As Single
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim A(1 To n, 1 To m) As Single
A(1, 1) = -11: A(1, 2) = 0: A(1, 3) = 2
A(2, 1) = 5: A(2, 2) = 45: A(2, 3) = 32
A(3, 1) = -3: A(3, 2) = 14: A(3, 3) = -25
S = 0
k = 0
For i = 1 To n
For j = 1 To m
If A(i, j) >= 0 Then S = S + A(i, j) Else k = k + 1
Next j
Next i
Debug.Print "S= " & S & " k= " & k
End Sub
2 Вычислить.
Пример 2.
Постановка задачи. Дана действительная матрица m x n. Определить числа b1, …, bm, равные наименьшим значениям элементов строк.
Технология выполнения задания:
1 Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Option Base 1
Sub primer()
Dim i As Integer
Dim j As Integer
Dim M(1 To 3, 1 To 3) As Variant
Randomize
For i = 1 To 3
For j = 1 To 3
M(i, j) = Rnd(20)
Debug.Print ("M(" & i & j & ")=" & M(i, j))
Next j
Next i
For i = 1 To 3
Min = M(i, 1)
For j = 2 To 3
If M(i, j) < Min Then Min = M(i, j)
Next j
Debug.Print ("Min(" & i & ")= " & Min)
Next i
End Sub
2 Вычислить.
Пример 3.
Постановка задачи. Даны натуральное число n, действительная матрица размера n x 3. Найти среднее арифметическое, каждого из столбцов.
Технология выполнения задания:
1Набрать в стандартном модуле проекта следующую пользовательскую процедуру:
Option Base 1
Sub primer()
Const m = 3: Const n = 4
Dim i As Integer
Dim j As Integer
Dim s As Single
Dim A(1 To m, 1 To n) As Integer
For i = 1 To m
For j = 1 To n
A(i, j) = i * j
Debug.Print "A(" & i & j & ")=" & A(i, j)
Next j
Next i
For j = 1 To n
s = 0
For i = 1 To m
s = s + A(i, j) / m
Next i
Debug.Print "s= " & s
Next j
End Sub
2 Вычислить.
Лабораторная работа № 7
Двумерные массивы. Вложенные циклы
Цель: приобретение навыков программирования обработки табличных данных с помощью пользовательской подпрограммы-процедуры. Индивидуальные варианты лабораторной работы № 7 представлены в таблицах 23, 24 (4 часа)
Таблица 23
№ В | Варианты индивидуальных заданий |
Построить процедуру пользователя для обработки таблиц | |
Дана действительная матрица размера m´n. Определить числа b1,…,bm равные суммам элементов строк. | |
Дана действительная матрица размера m´n. Определить числа b1,…,bm равные произведениям элементов столбцов. | |
В массиве данных с1, …,с20 определить сумму квадратов отрицательных элементов и сумму положительных. Подсчитать количество положительных, отрицательных и нулевых элементов. | |
Дана действительная матрица размера m´n. Определить числа b1,…,bm равные наименьшим значениям элементов строк. | |
Дана действительная матрица размера m´n. Определить числа b1,…,bm равные значениям средних арифметических элементов строк. | |
Дана действительная матрица размера m´n. Определить числа b1,…,bm равные разностям наибольших и наименьших значений элементов строк. | |
Даны натуральное число n, действительная матрица размера n´9. Найти средне арифметическое: а) каждого из столбцов; б) каждого из столбцов, имеющих чётные номера. | |
Даны целые числа а1, а2, а3. Получить целочисленную матрицу , для которой . | |
Даны действительные числа а, … ,а; b, … ,b. Получить действительную матрицу , для которой . | |
Дано натуральное число n. получить действительную матрицу , для которой | |
Получить - целочисленную матрицу для которой . |
Продолжение таблицы 23
Получить действительную матрицу , первая строка которой задаётся формулой , вторая строка задаётся формулой , а каждая следующая строка есть сумма двух предыдущих. | |
Дано натуральное число n. Выяснить сколько положительных элементов содержит матрица , если . | |
Дана действительная матрица n´m, в которой не все элементы равны нулю. Получить новую матрицу путём деления всех элементов данной матрицы на её наибольший по модулю элемент. | |
Дана действительная квадратная матрица порядка 12. Заменить нулями все её элементы, расположенные на главной диагонали и выше неё. | |
Даны действительные числа х1,…,х8. Получить действительную квадратную матрицу порядка 8: | |
Даны натуральное число n, действительная матрица . Получить последовательность элементов главной диагонали а11, а22,…, аnn. | |
Дана действительная матрица размера 6´9. Найти среднее арифметическое наибольшего и наименьшего значений её элементов. | |
Сформировать массив р из 20 элементов, i-ый элемент которого определяется по формуле , где х=0.225. Расставить в порядке возрастания элементы массива. | |
В массиве данных с1, …,с20 определить сумму квадратов отрицательных элементов и сумму положительных. Подсчитать количество положительных, отрицательных и нулевых элементов. |
Таблица 24
№ В | Варианты индивидуальных заданий | ||||||||||||||
Разработать экономическую процедуру пользователя | |||||||||||||||
По данной таблице определить максимальную свободную цену реализации каждого вида продукции молочного комбината на различных рынках сбыта за минувший месяц и вычислить максимальную прибыль от реализации единицы продукции при условии, что в среднем убыток от реализации единицы (1 кг) всех видов продукции (расходы на транспорт, потери и т.п.) составил 500 р. Прибыль от реализации единицы продукции Пр=Цр-С/ед-Уб где Цр - цена реализации 1 кг; C/ед - себестоимость 1 кг продукции (вводим); Уб - убыток на ед.продукции. | |||||||||||||||
Вывести на экран крупнейшую компанию мира ,чистая прибыль которой превышает 1 тыс.дол. | |||||||||||||||
На трех торговых точках продается 4 вида товаров. Известна цена каждого товара и прибыль, полученная от реализации единицы товара, а также количество каждого товара. Необходимо найти стоимость товара и прибыль с каждой торговой точки по формуле с[i,j]=c[i,j]+a[i,l]*b[l,j]. | |||||||||||||||
Вычислить, каким был максимальный курс акций фирмы после четырех торгов на бирже. Курс акций = Дивиденд/Ссудный процент*100 (массив - курс акций). | |||||||||||||||
Динамика ВНП ведущих развитых стран составила (млрд.дол.): в 1993 году: США - 4500; РОССИЯ - 4300 в 1994 году: США - 4460; РОССИЯ - 4390 Вычислить максимальный ВНП. | |||||||||||||||
Дан курс покупки доллара ($) за 7 дней (неделю). Рассчитать, какова средняя цена покупки $ за неделю. 1день 2день 3день 4день 5день 6день 7день 4500 4520 4600 4750 5000 5120 5100 | |||||||||||||||
Даны данные о средней зарплате с 1990 по 1993 год (111.4; 100.0; 67.7; 64.8). Найти средне арифметическое наименьшей и наибольшей зарплаты. | |||||||||||||||
Задан массив, содержащий разряды рабочих завода. Посчитать количество трудящихся, работающих по первому разряду. |
Продолжение таблицы 24
Дано 6 фирм. Определить, продукция которых из них пользуется наибольшим спросом, если продажа (в единицах товара) составляет: в 1-й фирме - 35, во 2-й - 46, в 3-й - 10, в 4-й - 68, в 5-й - 30, в 6-й - 15 | |||||||||||||||||||||||||||
Вычислить сальдо (SALD) торгового баланса по формуле: SALD = KR - DB Кредит (KR): нефть сырая 8370; нефтепродукты 3471; природный газ 7443; золото 1284 Дебет (DB): зерно 1576; прочее продовольствие 3912; медикаменты 269; машины и оборудование 9409; гуманитарная помощь 1000 | |||||||||||||||||||||||||||
Известны кредиты банка для разных предприятий. Посчитать сумму кредитов банка. | |||||||||||||||||||||||||||
В каком году в период с 1945 по 1985 в США наблюдался максимальный уровень инвестирования. Данные об инвестировании поместить в одномерные массивы. | |||||||||||||||||||||||||||
Определить, в каком месяце 1984 года в Италии темп инфляции был минимальным.
| |||||||||||||||||||||||||||
Подсчитать сумму прибыли в 3 магазинах за неделю. Для этого введите сумму прибыли, полученной в каждый день недели для каждого из 3 магазинов. | |||||||||||||||||||||||||||
Предприниматель в течение года каждый месяц вкладывал в банк деньги под проценты. Определить, в какой месяц сумма вклада была минимальной. Вывести на печать минимальную сумму и месяц. Считать, что 1-январь, 2-февраль, 12-декабрь. Вводить данные (в тысячах): январь - 840; май - 830; сентябрь - 560; февраль - 1020; июнь - 720; октябрь - 2000; март - 950; июль - 8015; ноябрь - 3005; апрель - 640; август - 6040; декабрь - 980 | |||||||||||||||||||||||||||
В результате инвентаризации обнаружено, что у многих запчастей истек срок их эксплуатации и они подлежат списанию со счета 10 ''Материалы''. Определить количество списываемых запчастей. Исходные данные: S[i] - износ каждой детали SROK - предельный срок эксплуатации n-количество запчастей. | |||||||||||||||||||||||||||
Даны девиденты на акцию за пять лет. Найти максимальные девиденты. | |||||||||||||||||||||||||||
Даны данные о размерах дохода и расхода предприятия за каждый месяц. Какие месяцы были убыточными. |
Продолжение таблицы 24
Вычислить налог на заработную плату нескольких сотрудников, учитывая, что до 48000 он составляет 7,51% , а больше 48000 - 3,755%. | |||||||||||||||||||||||||||||||||||||||||||||
Дан схематичный расчетный баланс за определенный период (1995-2004). Составить программу, позволяющую найти первый отрицательный баланс (платежи превышают поступления) и вывести это число на экран дисплея. Исходными данными является баланс.
Расчетный баланс
|
3 Объектно-ориентированное программирование на VBA
3.1 Разработка программы создания приложения с помощью Форм
Пример 1.
Постановка задачи. Требуется разработать программу вычисления значения выражения при заданных числах, вводимых пользователем с клавиатуры в два (три) поля с именами «Число1», «Число2» («Число3»), с отображением результата в поле «Результат». Результат должен отображаться после нажатия кнопки <Вычислить>. Программа должна заканчивать работу после нажатия кнопки <END>. Окно программы должно иметь вид, показанный на рисунке 22.
, при a=0.126, b=0.842, x=0.34
Технология выполнения задания:
Процесс программирования приложения Вычисление предусмотрен тремя этапами, представленными в таблице 25.
Таблица 25 - Этапы программирования
Этапы программирования | Число объектов |
1 Создание пользовательского интерфейса | 11 объектов |
2 Установка свойств объектов | 11 объектов |
3 Составление программного кода | 2 объекта |
Дата добавления: 2016-03-22; просмотров: 1335;