Пользовательский интерфейс 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 года в Италии темп инфляции был минимальным.
месяцы
инфляция 15.9 16.0 16.0 17.5 16.3 16.0 15.8 17.2 16.8 16.4 16.0 15.9

 

Подсчитать сумму прибыли в 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.056 сек.