Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по VBA / Лабораторная работа №5.docx
Скачиваний:
251
Добавлен:
22.03.2016
Размер:
71.07 Кб
Скачать

Лабораторная работа №5. Алгоритмы обработки массивов и их реализация

Цель: Освоить алгоритмы обработки массивов в среде VBA.

Одномерный массив представляет собой фиксированное количество однотипных элементов, имеющих общее имя и занимающих непрерывную область в памяти. Каждый элемент массива характеризуется своим значением и индексом (иначе – порядковым номером). Проще говоря, массив – это линейная таблица (имеющая одну строку) или вектор.

Элементы массива могут быть любого типа. Тип индекса массива должен быть целочисленным. Индекс элемента указывается в круглых скобках после имени массива. Например, А(1), А(2), А(10) являются элементами массива с именем А. Каждый из элементов массива, может использоваться точно так же, как и простая переменная.

Примеры массивов:

а = (2, 5, -3, 0, 7, 8, 9, -6) – массив целых чисел из 8 элементов; а(3)=-3.

b = (“alfa”, “beta”, “gamma”, “delta”) – массив, элементы которого имеют тип String; b(2)=”beta”.

В Visual Basic существуют массивы фиксированного размера и динамические массивы. Массив фиксированного размера имеет неизменный размер, заданный при его объявлении. Динамические массивы могут изменять размер в процессе выполнения.

При объявлении массива фиксированного размера после его имени в круглых скобках указывается верхняя граница массива. По умолчанию нижней границей массива является 0. Например, в приведенном ниже коде, задается массив А из 21 элемента. Индекс элементов массива изменяется от 0 до 20:

Dim A(20) As Integer

Можно явно задать нижнюю границу массива, используя ключевое слово то:

Dim A (1 То 20) As Integer

В этом случае задается массив А из 20 элементов. Индекс элементов массива изменяется от 1 до 20.

Visual Basic позволяет использовать многомерные массивы (таблицы, матрицы). Например, в следующем коде объявляется двумерный массив размерностью 21x21:

Dim В (20, 20) As Integer

При использовании многомерных массивов, как и в случае одномерных, можно явно задавать нижнюю границу:

Dim В (1 То 20, 1 То 20) As Integer

Dim В (20, 1 То 20) As Integer

В случае, когда размер массива заранее неизвестен, Visual Basic позволяет использовать динамические массивы, размеры которых можно изменять во время выполнения. Применение динамических массивов позволяет эффективно управлять памятью, выделяя память под большой массив лишь на то время, когда этот массив используется, а затем освобождая ее.

При объявлении динамического массива после его имени ставится пара круглых скобок. Например:

Dim С() As Integer

Например, размерность массива может быть задана любым из следующих способов:

ReDim С(х)

ReDim С(20)

ReDim C(l То 20)

При выполнении оператора ReDim данные, размещенные в массиве ранее, теряются. Это удобно в том случае, если данные нам больше не нужны, и мы хотим переопределить размерность массива и подготовить его для размещения новых данных. Если вы хотите изменить размер массива, не потеряв при этом данных, то необходимо воспользоваться оператором ReDim с ключевым словом Preserve. Например, приведенный ниже программный код увеличивает размер массива на единицу без потери хранящихся в массиве данных:

ReDim Preserve C(X + 1)

Однако в этом случае можно изменять только верхнюю границу последнего измерения.

Переменной, соответствующей динамическому массиву, может быть присвоено значение переменной, соответствующей статическому или динамическому

Ввод/вывод массивов

Вводить и выводить массивы можно только поэлементно, поэтому ввод и вывод массивов обычно осуществляется в цикле.

Например:

- ввод элементов массива с клавиатуры:

For i=1 to 20

А(i)= InputBox(“введите элемент”)

Next

-ввод элементов из ячеек эл.таблицы ( из первого столбца)

For i = 1 To 20

А(i) = Worksheets("ЛР5").Cells(i, 1)

Next

-задание элементов массива с помощью генератора случайных чисел

Rnd[ (Number)]-служит для генерации случайных чисел.

 Возвращаемое значение: Функция Rnd возвращает значение в диапазоне от 0 до 1 типа Single, содержащее случайное число (причем 1 не входит в этот диапазон, а 0 входит). Строго говоря, функция возвращает псевдослучайные числа. При каждом запуске программы, функция генерирует одну и ту же последовательность случайных чисел. Во избежание этого явления используйте инструкцию Randomize

Чтобы получить значения случайных чисел в интервале от min до max используйте формулу:

Int ( (max — min + 1) * Rnd + min), где min и max-минимальное и максимальное число соответственно

Наример, генерируем массив в диапазоне от1 до 50

Randomize()

For i=1 to 20

A(i)= Int ( (50-1+1) * Rnd) + 1)

Next

-вывод массива в ячейки эл. таблицы( во второй столбец)

For i = 1 To 20

Worksheets("ЛР5").Cells(i, 2) = А(i)

Next

Пример 1.

Создайте лист «ЛР5» для сохранения результатов данной лабораторной работы.

В одномерном массиве найти сумму элементов, разделить элементы исходного массива на сумму, вывести результирующий массив. На листе «ЛР5» представлены исходные данные:

Рис1.Исходные данные примера

Решение с использованием фиксированного массива ( введите текст макроса):

Решение задачи с использованием динамического массива( введите текст макроса):

Поиск максимального и минимального элементов в массиве

Если необходимо найти в массиве максимальный (минимальный) элемент, то вначале за максимум (минимум) условно принимают значение первого элемента массива, номер элемента с этим значением запоминается в специальной вспомогательной переменной. В этой вспомогательной переменной будет храниться номер элемента, значение которого считается максимальным (минимальным) в данный момент выполнения программы. Затем все последующие элементы массива поочередно сравниваются со значением с номером вспомогательной переменной и, если значение очередного элемента массива оказывается больше (меньше) значения временного максимума (минимума), то вспомогательной переменной необходимо присвоить значение номера текущего элемента массива. Например, поиск максимального в массиве из 20 элементов:

imax=1

for i=2 to 20

if a(i)>A(imax) then imax=i

Next

MsgBox”Максимальный элемент массива:”& A(imax);

Перестановка двух элементов

Чтобы поменять местами две переменные, в частном случае два элемента массива необходимо ввести дополнительную переменную, в которой следует сохранить значение одной из переменных, прежде чем присвоить ей значение другой. Сохраненное значение будет присвоено, затем второй переменной.

Например, поменять местами первый и пятый элементы массива:

Byf=A(1)

A(1) =A(5)

A(5)= Byf

Пример 2.

В одномерном массиве найти максимальный и минимальный элемент и поменять их местами. Вывести исходный и результирующий массивы в 6 и 7 столбцы электронной таблицы. Для генерации элементов массива использовать генератор случайных чисел. Результат выполнения( рис.2), при реализации используется генератор случайных чисел, поэтому при выполнении я ячейках могут быть другие числа.

Рис.2 Результат работы программы.

Необходимо выполнить следующие действия по порядку:

  • Задать одномерный массив, с помощью генератора случайных чисел;

  • Вывести его в ячейки эл. таблицы;

  • Найти максимальный элемент и минимальный элементы в массиве и запомнить их номера;

  • Заменить значение максимального элемента значением минимального, заменить значение минимального максимальным значением;

  • Вывести видоизмененный массив на экран.

Решение (введите текст макроса):

Варианты задания для самостоятельной работы:

Задача1

Во всех вариантах массив водится из столбца рабочей книги, результат выводится в ячейки рабочей книги с соответствующим комментарием. Требуется решить задачу как с использованием массива с фиксированным числом элементов, так и динамического массива.

  1. В одномерном массиве из 10 целых чисел найти минимальный и максимальный элементы массива и заменить первый элемент массива суммой минимального и максимального элементов.

  2. Дан одномерный массив из 15 действительных чисел. Найти среднее арифметическое элементов массива и определить порядковый номер первого элемента, меньшего среднего арифметического.

  3. Дан одномерный массив из 15 целых чисел. Найти максимальный и минимальный элементы массива и вычислить произведение их порядковых номеров.

  4. Исходный массив содержит 15 действительных чисел. Найти среднее арифметическое элементов массива, на которое разделить все элементы исходного массива

  5. Исходный массив содержит 15 целых отрицательных и положительных чисел. Найти максимальный и минимальный элементы массива и вычислить их произведение.

  6. В одномерном массиве из 15 целых чисел определить порядковые номера элементов, кратных трем.

  7. В одномерном массиве Х, содержащем 10 целых чисел, найти сумму и количество элементов, удовлетворяющих условию 15 < Xi < 28.

  8. В одномерном массиве из 15 целых чисел найти минимальный и максимальный элементы, вычислить их сумму.

  9. Дан массив из 15 действительных чисел. Найти среднее арифметическое элементов массива и вычислить сумму всех элементов, больших среднего арифметического.

  10. В одномерном массиве, содержащем 15 целых чисел, найти максимальный, и все элементы разделить на максимальный.