Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информ..docx
Скачиваний:
34
Добавлен:
26.04.2019
Размер:
413.7 Кб
Скачать

28)Опред одномерного и двумерного массива. Декларация одномерного и двумерного масива в vba

Определение одномерного: Массив – это набор однотипных данных, имеющий общее для всех своих элементов имя. Элементы массива пронумерованы, Декларация одномерного массивов в VBA.

Dim Имя_Массива(n) As Тип

Dim – зарезервировано слово VBA, указывающее на начало описания (ассива.

Имя_Массива – любой допустимый в VBA идентификатор, не совпадающий с зарезервированными словами VBA.

n – размерность массива,

As – зарезервировано слово VBA, указывающее на начало описания типа данных элементов массива.

Тип – любой допустимы тип данных в VBA.

Dim Имя_Массива(1 To n) As Тип

Определение двумерного: Массив – это набор однотипных данных, имеющий общее для всех своих элементов имя

Декларация двумерного массивов в VBA.

Dim Имя_Массива(n,m) As Тип

В этом массиве первый элемент имеет номер (0,0), а последний – (n,m).

Для привычного задания массива, где первый элемент имеет номер (1,1), при описании массива указывается первый и последний номер элемента через зарезервированное слово VBA «To»:

Dim Имя_Массива (1 To n, 1 To m) As Тип

29)Алгоритмы ввода вывода одномерного массива. Алгоритм ввода и вывода двумерного массива

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

А считать двумерный массив с клавиатуры можно при помощи еще более простого алгоритма (массив вводится по строкам, то есть в порядке, соответствующему первому примеру):

Обработка двумерного массива

Обработка двумерных массивов производится аналогичным образом. Например, если мы хотим записать в массив таблицу умножения, то есть присвоить элементу A[i][j] значение i * j, это можно сделать следующим образом при помощи вложенных циклов:

for (i = 0; i < n; ++i)

{

for (j = 0; j < m; ++j)

{

A[i][j] = i * j;

}

}

Рассмотрим более сложную задачу и несколько способов ее решения. Пусть дан квадратный двумерный массив int A[n][n]. Необходимо элементам, находящимся на главной диагонали проходящей из левого верхнего угла в правый нижний (то есть тем элементам A[i][j], для которых i==j) присвоить значение 1, элементам, находящимся выше главной диагонали – значение 0, элементам, нахощящимся ниже главной диагонали – значение 2. То есть получить такой массив (пример для n==4):

1 0 0 0

2 1 0 0

2 2 1 0

2 2 2 1

Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы A[i][j], для которых i<j, а для элементов ниже главной диагоналиi>j. Таким образом, мы можем сравнивать значения i и j и по ним определять значение A[i][j]. Получаем следующий алгоритм:

for (i = 0; i < n; ++i)

{

for (j = 0; j < n; ++j)

{

if (i < j)

{

A[i][j] = 0;

}

else if (i > j)

{

A[i][j] = 2;

}

else

{

A[i][j] = 1;

}

}

}

Данный алгоритм плох, поскольку выполняет одну или две инструкции if для обработки каждого элемента. Если мы усложним алгоритм, то мы сможем обойтись вообще без условных инструкций.

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

for (i = 0; i < n; ++i)

{

A[i][i] = 1;

}

Затем заполним значением 0 все элементы выше главной диагонали, для чего нам понадобится в каждой из строк с номером i присвоить значение элементам A[i][j] для j=i+1, ..., n-1. Здесь нам понадобятся вложенные циклы:

for (i = 0; i < n; ++i)

{

for (j = i + 1; j < n; ++j)

{

A[i][j] = 0;

}

}

Аналогично присваиваем значение 2 элементам A[i][j] для j=0, ..., i-1:

При вводе массива необходимо последовательно вводить 1-й, 2-й, 3-й и т.д.

элементы массива, аналогичным образом поступить и при выводе. Следовательно,

необходимо организовать цикл.

Блок-схемы алгоритмов ввода элементов массива изображены на рис. 6.3-6.4.

Рис 6.3 Алгоритм ввода массива Рис. 6.4. Алгоритм ввода массива

с использованием цикла с использованием

с предусловием безусловного цикла

Как видно, безусловный цикл удобно использовать для обработки всего

массива, и в дальнейшем при выполнении таких операций будем применять

именно его. Вывод массива организуется аналогично вводу.

Рассмотрим несколько примеров обработки массивов. Алгоритмы, с

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

последовательностей (вычисление суммы, произведения, поиск элементов по

определенному признаку, выборки и т. д.). Отличие заключается в том, что в

массиве одновременно доступны все его компоненты, поэтому становится

возможной, например, сортировка его элементов и другие, более сложные

преобразования.