Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
2.12.1 Объявление массива
Массивы должны быть объявлены до их использования в программе.
Синтаксис:
Dim | Public | Private Имя_Массива (Размерность_Массива) As Тип_Данных
где
Dim | Public | Private – ключевые слова, декларирующие массив
и область его видимости;
Имя_Массива – идентификатор, определяющий имя массива;
Размерность_Массива – значение нижней и верхней границы значения
индекса (номера) соответствующей размерности.
Допускается описание до 60 размерностей.
As – ключевое слово, предваряющее указание типа
элементов массива;
Тип_Данных – любой, действительный для VBA тип данных
(базовый или созданный пользователем).
Пример 1.
Dim A (7) As Integer
Объявляется одномерный массив (вектор) А из 8 целых чисел, причем по умолчанию первый элемент массива будет А(0), а последний А(7).
При объявлении многомерного массива в поле индекса указывается несколько индексов в соответствии с размерностью массива.
Пример 2.
Dim B (4, 5) As Single
Объявляется двумерный массив В 4 х 5 (матрица), состоящая из 5 строк и 6 столбцов действительных чисел.
По умолчанию значение нижнее границы массива при таком объявлении равно нулю. В этом случае говорят, что 0 – базовый индекс массива. Можно изменить базовый индекс, написав в области описания модуля (General Declarations) инструкцию Option Base 1. После этого индексы массивов А и В будут нумероваться с единицы.
Другим способом изменения базового индекса является использование ключевого слова To при объявлении массива.
Пример 3.
Dim A (1 To 7) As Integer
Dim B (1 To 4, 1 To 5) As Single
В этом примере базовому индексу массива установлено значение 1.
Подобным образом моно устанавливать как положительные, так и отрицательные базовые индексы
Пример 4.
Dim Z (-3 To 7) As Single.
2.12.2 Динамические массивы
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не надо указывать его размерность.
Пример 1.
Dim R () As Single.
Затем в программе следует вычислить необходимое количество элементов массива и сохранить его в некоторой переменной, например n, а затем изменить размер динамического массива с помощью оператора ReDim.
Пример 2.
ReDim R (1 To 3).
Синтаксическая конструкция переопределения массива:
ReDim [Preserve] Имя_Массива (Размерность_Массива) As Тип_Данных
где
ReDim – ключевое слово, указывающее, что переопределяются размеры массива;
Preserve – необязательное ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности. Если оно не используется, то данные в массиве при изменении размерности не сохраняются.
Имя_Массива – имя массива, удовлетворяющее стандартным правилам именования переменных;
Размерность_Массива - значение нижней и верхней границы значения индекса (номера) соответствующей размерности (до 60). Если отсутствует инструкция Option Base, нижняя граница индекса по умолчанию равна 0.
Тип_Данных – тип данных массива.
Пример 3.
Dim A () As Integer ‘Объявление динамического массива
Dim n As Integer ‘Объявление переменной, для хранения размерности
N = 9 ‘Инициализация значения
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
Дата публикования: 2014-11-03; Прочитано: 660 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!