Этап. Разработка пользовательского интерфейса 6 страница
Для каждого с шагом вычислить по 5 значений , где начальное значение , шаг , х=0.548 | |
На интервале с шагом для каждого из интервала с шагом протабулировать функции и , где х=0.833 | |
На интервале протабулировать функцию , причём, если , то , иначе , а=1.18, b=2.44, х=0.564 |
2.12 Массивы
В VBA различают два вида переменных – простые переменные и переменные структурного типа. Простые переменные служат для идентификации и резервирования памяти для одного данного. Переменные структурного вида предназначены для идентификации и резервирования памяти для нескольких данных. Частным случаем переменной структурного вида является массив.
Массивы – это формальное объединение нескольких однотипных элементов (чисел, символов, строк и т.д.), упорядоченных по индексам, определяющим положением каждого элемента в массиве.
Пример 1.
Результаты многократных замеров температуры воздуха в течение одного года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект, - массив измерений.
Значения температур в марте
Число | |||||||||
Т, 0С | -10 | -9 | -11 | -5 | +3 | -1 | +4 |
Первая ячейка содержит значение температуры 1 марта, что можно обозначить Т [1] = -10; Т [2] = -9 и т.д. Заметим, что все ячейки таблицы содержат однотипные данные (Т).
Пример 2.
Таблица, содержащая однотипные данные – классный журнал со списком учащихся, где каждая ячейка определяется двумя значениями – фамилией ученика и датой, а в ячейку заносятся отметки – целые числа от 1 до 5.
Определение.
Массив – это совокупность конечного числа элементов одного и того же типа, в которой каждый элемент имеет номер, а все элементы – общее имя.
Массивом называется ряд ячеек памяти, отведенных для хранения индексной переменной.
Массив – это структура данных, состоящая из фиксированного числа компонентов одного и того же типа, называемого базовым.
Номер элемента массива называется его индексом.
Если в форме описания массива задан один индекс, массив называется одномерным, если два индекса – двумерным, если n индексов – n-мерным.
Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный – понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.
Характеристики массива:
1 Тип – общий тип элементов массива;
2 Размерность – количество индексов массива;
3 Диапазон – количество допустимых значений каждого индекса;
4 Размер – количество элементов массива.
Пример 3.
xi (5, 6, 7) → размер – 3
размерность – 1
тип – integer
диапазон – 1..3
Все элементы массива имеют общее имя (имя массива) и различаются индексами. Элементами массива могут быть данные любого типа. Тип элементов массива называется базовым. Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса.
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