ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Операции с двумерными массивами (матрицами)

 

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

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

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

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

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

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

Элементы главной диагонали у матриц А и В одни и те же. Следовательно операция транспонирования матрицы А сводится к перестановке строк матрицы.

Dim a() As Single

Dim b() As Single

n = 5

ReDim a(n, n): ReDim b(n, n)

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

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

 

35. Пример 2. Ввести массив А из 10 элементов. Найти максимальный элемент массива и его положение. Если таких элементов несколько, то вывести положение всех.

 

В этом примере переменная max используется для запоминания текущего максимального элемента с обновлением – в случае необходи-мости – по мере перебора всех элементов, imax – для фиксации положения максимального элемента.

 

Sub primer_2()

Dim a(10) As Single

Dim i As Byte, max As Single, imax As String

'заполнение массива числами

For i = 1 To 10

a(i) = Cells(1, i)

Next i

'инициализация переменных max, imax

max = a(1): imax = "1"

'поиск максимального элемента и его местоположения

For i = 2 To 10

If a(i) > max Then

max = a(i)

imax = i

ElseIf a(i) = max Then

imax = imax & ", " & i

End If

Next i

'Команда MsgBox...записывается в редакторе VB в одну строку

MsgBox "Максимальный элемент = " & max & ", его местоположение (ия) " & imax, , "Решение задачи"

End Sub

Результат выполнения программы:

 

Программа для решения этой же задачи, но для любого количества элементов в массиве выглядит так:

 

Sub primer_2()

Randomize Timer

Dim a() As Single

Dim i As Byte, n As Byte, max As Single

Dim imax As String, massiv As String

massiv = ""

n = InputBox("Введите размер массива", "Запрос программы")

ReDim a(n)

'заполнение массива случайными числами

For i = 1 To n

a(i) = 50 - Int(Rnd() * 1000)/10

massiv = massiv & a(i) & Chr(9)

Next i

'инициализация переменных max, imax

max = a(1): imax = "1"

'поиск максимального элемента и его местоположения

For i = 2 To n

If a(i) > max Then

max = a(i)

imax = i

ElseIf a(i) = max Then

imax = imax & ", " & i

End If

Next i

'Команда MsgBox...записывается в редакторе VB в одну строку

MsgBox "Исходный массив:" & Chr(13) & massiv & Chr(13) & "Максимальный элемент = " & max & ", его местоположение (ия) " & imax, , "Решение задачи"

End Sub

Результат выполнения программы:

38. Дана матрица А(n, m). Отсортировать каждую строку в порядке возрастания.

 

Для решения задачи:

1) вводим размеры массива А(n, m) и значения его элементов;

2) просматриваем строки массива и упорядочиваем их;

3) выводим матрицу.

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

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

Подобные операции выполняем для каждой строки по отдельности.

Перестановку элементов будем осуществлять с помощью промежу-точной переменной prom.

 

Sub primer_12()

Dim a() As Integer

Dim n As Integer, m As Integer, i As Integer

Dim j As Integer,prom As Integer, k As Integer

n = Cells(1, 4)

m = Cells(2, 4)

ReDim a(n, m)

'очистка рабочего листа от посторонних надписей

For i = 1 To 10 * n

For j = 1 To 10 * n

Cells(i + 2, j) = ""

Next j

Next i

'заполнение массива случайными целыми числами

'вывод массива в рабочий лист Excel

Cells(4, 1) = "Исходный массив:"

For i = 1 To n

For j = 1 To m

a(i, j) = 50 - Int(Rnd() * 100)

Cells(i + 4, j) = a(i, j)

Next j

Next i

'сортировка двумерного массива по строкам

For i = 1 To n

'сортировка строки массива

For k = m - 1 To 1 Step -1

For j = 1 To k

If a(i, j) > a(i, j + 1) Then

'перестановка соседних элементов массива

prom = a(i, j)

a(i, j) = a(i, j + 1)

a(i, j + 1) = prom

End If

Next j

Next k

Next i

'вывод на печать массива с отсортированными строками

Cells(n + 6, 1) = "Преобразованный массив:"

For i = 1 To n

For j = 1 To m

Cells(i + n + 6, j) = a(i, j)

Next j

Next i

End Sub

Результат выполнения программы:

39. Пример 13. Дана матрица А(n, m). Отсортировать каждый столбец в порядке убывания.

 

Sub primer_13()

Dim a() As Integer

Dim n As Integer, m As Integer, i As Integer

Dim j As Integer,prom As Integer, k As Integer

n = Cells(1, 4)

m = Cells(2, 4)

ReDim a(n, m)

'очистка рабочего листа от посторонних надписей

For i = 1 To 10 * n

For j = 1 To 10 * m

Cells(i + 2, j) = ""

Next j

Next i

'заполнение массива случайными целыми числами

'вывод массива в рабочий лист Excel

Cells(4, 1) = "Исходный массив:"

For i = 1 To n

For j = 1 To m

a(i, j) = 50 - Int(Rnd() * 100)

Cells(i + 4, j) = a(i, j)

Next j

Next i

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

For j = 1 To m

'сортировка столбцов массива

For k = n - 1 To 1 Step -1

For i = 1 To k

If a(i, j) < a(i + 1, j) Then

'перестановка соседних элементов массива

prom = a(i, j)

a(i, j) = a(i + 1, j)

a(i + 1, j) = prom

End If

Next i

Next k

Next j

'вывод на печать массива с отсортированными строками

Cells(n + 6, 1) = "Преобразованный массив:"

For i = 1 To n

For j = 1 To m

Cells(i + n + 6, j) = a(i, j)

Next j

Next i

End Sub

Результат выполнения программы:

Типы процедур

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

Существует два вида процедур:

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

· Подпрограмма – представляет собой определенный набор операторов, составленный пользователем и расположенный отдельно от основной программы.

Отличие функции от подпрограммы состоит в том, что:

– функция обязательно должна возвращать (передавать результат вычисления) результат в основную программу;

– имя функции должно иметь спецификатор типа для определения типа самой функции.

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти