Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции с матрицами




 

Нередко приходится иметь дело с различными данными, которые должны обрабатываться одинаковым образом. Если для каждого значения отвести свою переменную, то и обрабатывать их придется индивидуально. Если, например, необходимо обработать таблицу, состоящую из нескольких сотен ячеек, то создание такой программы практически невозможно. Решить эту проблему позволяют массивы. Массив представляет собой набор однотипных переменных, объединенных одним именем и различающихся по числовому индексу. Этот индекс записывается после имени переменной в скобках. Обращение к элементам массива осуществляется путем указания индексов элемента. Количество индексов определяет размерность массива. Любая таблица чисел или символов по определению является двумерным массивом. Двумерный массив А (N, M) соответствует понятию прямоугольной матрицы (таблицы), состоящей из m строк и n столбцов.

 

Другим примером двумерных массивов могут быть любые данные (числа или символы), представленные в табличной форме, т.е. любая таблица чисел или символов по определению является двумерным массивом.

В редакторе Visual Basic for Application двумерный массив задается с помощью оператора Dim:

Dim A(N,M)

Здесь оператором Dim переменная А объявляется двумерным масси­вом размерностью N x M, где переменная N определяет количество строк (первый индекс массива), а переменная М – количество столбцов (второй ин­декс). Значения переменных N и М, определяющие размер массива, должны быть заданы до оператора Dim. Сам оператор Dim должен находится до пер­вого обращения к элементам массива, т.е. как правило – в начале программы. Размер массива можно задать также явно, если вместо переменных N и М по­ставить конкретные числа, например

DIM A(10, 5)

Так будет объявлен массив, состоящий из 10 строк и 5 столбцов.

В качестве имени массива можно использовать любое допустимое на языке VBA имя переменной. В одном операторе Dim можно объявить несколько массивов. Можно также использовать несколько операторов Dim.

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

Dim A(10, 5) As String,

где часть As String, говорит о том, что элементы массива представляют собой символьные (строковые) переменные.

Массив может быть не только двумерным, но трехмерным, четырехмерным и большей размерности (до 8 индексов). Длина массива (количество элементов по каждому индексу) может быть разной (в несколько тысяч элементов) и ограничивается только размером памяти компьютера, отводимых под данные.

Поскольку элементы двумерно­го массива задаются двумя индексами – номером строки и номером столбца – для перебора всех строк и столбцов необходимо использование двойного цикла, один из которых будет внешним, а другой – внутренним. Такие циклы называются вложенными.

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

1) С помощью функции InputBox. Например:

 

Sub primer()

Dim A (3,4) As Integer

For I = 1 To 3 ‘ цикл по строкам

For J = 1 To 4 ‘ цикл по столбцам

A(I, J) = InputBox("Введите элемент массива", "Пример")

Next J

Next I

...............

[продолжение программы]

 

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

 

2) С помощью функции Cells. Например:

Sub primer()

Dim A (3,4) As Integer

For I = 1 To 3 ‘ цикл по строкам

For J = 1 To 4 ' цикл по столбцам

A(I, J) = Cells (I, J)

Next J

Next I

................

[продолжение программы]

 

Этот способ наиболее удобен и имеет важное преимущество – данные не теряются при повторном выполнении программы. Пользователь вводит значения элементов массива в ячейки рабочего листа Excel, из которого после запуска программы VBA считывает заданные значения и присваивает очередной переменной текущее значение из списка.

3) Можно воспользоваться стандартной функцией RND (если значение массива не задано):

 

Sub primer()

Dim A(3, 4) As Single

For I = 1 To 3

For J = 1 To 4

A(I, J) = Rnd

Next J

Next I

................

[продолжение программы]

 

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

Итак, ввод и выгод элементов двумерного массива осуществляется с помощью двух вложенных циклов For. Таким же образом (с помощью вложенного цикла) можно проводить обработку массива – находить максимальный (минимальный) элемент, вычислять сумму элементов и т.д. (см. раздел «Массивы»). Все это можно делать отдельно для каждой строки (столбца) или для всех элементов данного массива.

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

В зависимости от соотношения между первым и вторым индексами элемента определяется расположение этого элемента в матрице, если:

1) i = j – элемент находится на главной диагонали ();

2) i + j = n + 1 (n – размерность матрицы) – элемент находится на второй главной диагонали ();

3) i < j – элемент находится над главной диагональю ();

4) i > j – элемент находится под главной диагональю ().

Транспонированной матрицей В(N,N) называется такая квадратная матрица, у которой столбцы соответствуют строкам исходной квадратной матрицы А(N,N):

 

 

Элементы главной диагонали у матриц А и В одни и те же. Следовательно операция транспортирования матрицы А сводится к перестановке строк матрицы А на столбцы матрицы В. При этом диагональные элементы у матриц А и В одни и те же. Это реализуется с помощью соотношения: В (j, i) = А (i, j).

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

Пример 11. Ввести массив А (N, N). Транспонировать эту матрицу, т.е. заменить строки столбцами. Вывести на печать исходный и преобразованный массивы в виде матриц.

 

Sub primer_11()

N = 3

ReDim A(N, N), B(N, N) As Integer

For I = 1 To N

For J = 1 To N

A(I, J) = Cells(I, J)

B(J, I) = A(I, J) 'транспонирование матрицы

Next J

Next I

For I = 1 To N

For J = 1 To N

Cells(N + 1 + I, J) = B(I, J) ‘вывод преобразованной матрицы

Next J

Next I

End Sub

 

Результат программы:

 

 

Пример 12. Дан массив А (N, М). Составить программу для подсчета количества положительных элементов массива.

 

Sub primer_12()

N = 3: M = 3

ReDim A(N, N) As Integer

For I = 1 To N

For J = 1 To M

A(I, J) = Cells(I, J)

Next J

Next I

k = 0 ‘ счетчик числа положительных элементов

For I = 1 To N

For J = 1 To M

If A(I, J) > 0 Then k = k + 1:

Next J

Next I

If k = 0 Then

MsgBox "Положительных элементов нет",, "Решение задачи"

Else: MsgBox "Количество положительных элементов =" & k,, "Решение задачи"

End If

End Sub

 

Результат программы:

 

 

Пример 13. Дана квадратная матрица D (N, N). Вычислить суммы элементов в каждом столбце и произведение элементов главной диагонали.

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

 

Sub primer_13()

N = 3

ReDim D(N, N), S(N) As Integer

For I = 1 To N ' ввод элементов массива D(N,N)

For J = 1 To N

D(I, J) = Cells(I, J)

Next J, I 'одновременное закрытие вложенных циклов

Pr = 1

For J = 1 To N

S(J) = 0

For I = 1 To N

S(J) = S(J) + D(I, J) 'накопление суммы по столбцам

If I = J Then Pr = Pr * D(I, J)

Next I 'закрытие внутреннего цикла Cells(5, J) = S(J)

Next J ' закрытие внешнего цикла

MsgBox "Произведение элементов главной диагонали =" & Pr,, "Решение задачи"

End Sub

 

Результат программы:

 

 




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


Дата добавления: 2014-10-23; Просмотров: 1144; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.041 сек.