Массивы. Элементарные операции с матрицами.


Чтобы посмотреть презентацию с картинками, оформлением и слайдами, скачайте ее файл и откройте в PowerPoint на своем компьютере.
Текстовое содержимое слайдов презентации:

Массивом называется последовательность или таблица переменных одного типа, называемых элементами массива. В обращении к элементу указывается имя массива и один (если массив одномерный) или несколько (если массив многомерный) индексов. Одномерный массив аналогичен строке или столбцу таблицы и вектору в математике (рис. 1). Двумерный массив аналогичен прямоугольному диапазону ячеек таблицы Excel и матрице в математике (рис. 2). Описание статических массивовСтатические массивы на языке программирования Visual Basic for Applications (VBA) описываются в программе при помощи ключевых слов Dim и As. Границами являются целые числа в скобках. Между верхней и нижней границами ставится ключевое слово To.Одномерные массивы имеют один индекс.Базовый синтаксис одномерного статического массива следующий:Dim Имя_массива (граница1 To граница2) As тип_данных. Здесь важную роль играют следующие аргументы.Dim – это ключевое слово, для объявления массива. Если массив помещается в стандартный модуль, то вместо Dim используется слово Public. Имя_массива – это имя переменной массива, которое будет использовано для представления массива в программе. Имена массивов подчиняются тем же правилам, что и имена переменных.Граница1 – это нижняя граница массива.Гранца2 – это верхняя граница массива.Тип_данных – это тип данных, хранимых в массиве. В большинстве случаев все переменные в массиве относятся к одному и тому же типу данных. Если в массиве будут храниться данные разных типов, то можно указать тип Object. Например: Dim A(1 To 10) As Integer Dim B(-10 To 10) As StringЕсли в скобках указано только одно целое число, то это – верхняя граница. При этом нижняя граница равна нулю.Например: Dim C(10) As Byte.Этот оператор эквивалентен оператору Dim C(0 To 10) As Byte.Если нужно, чтобы нижней границей массива была единица, то перед первой строкой программы необходимо набрать строку Option Base 1.При этом оператор последнего примера будет эквивалентен следующему: Dim C(1 To 10) As Byte.Значения границ не должны выходить за пределы диапазона значений для данных типа Long.Для описания многомерных массивов (имеющих несколько индексов), указывается несколько границ, через запятую.Например: Dim A(4,4) As Byte Dim B(1 To 5, -5 To -1) As Byte.В данных примерах объявленные массивы А и В являются двумерными и содержат одинаковое количество элементов, равное 5 × 5 = 25.Число размерностей массива может достигать 60. Описание динамических массивовДинамические массивы используются в том случае, когда количество элементов массива заранее не известно, а определяется в процессе выполнения программы. По окончании работы с динамическим массивом можно освободить память, которую он занимает. Это важно для задач, требующих большого объема оперативной памяти.Описание динамического массива осуществляется в два этапа:Объявляется массив с использованием оператора Dim, но без указания размерности. Признаком массива являются скобки после его имени.В нужном месте программы описывается данный массив с указанием размерности при помощи оператора ReDim, причем в качестве границ можно использовать не только целые числа, но и арифметические выражения. Важно, чтобы к выполнению оператора ReDim все переменные в этих арифметических выражениях имели числовые значения.При помощи оператора ReDim можно задавать любые размерности массива. Например:Dim A() As ByteReDim A(1, 1) ′ двумерный массивA(0, 0)=13A(1, 1)=14ReDim A(3, 3, 1 To 3) ′ трехмерный массив. Следует иметь в виду, что при каждом выполнении оператора ReDim (то есть при каждом переопределении массива) значения элементов будут потеряны, так как оператор ReDim обнуляет все элементы массива.Чтобы при переопределении массива значения элементов не пропали, используется ключевое слово Preserve при изменении верхней границы одномерного массива или при изменении верхней границы последней размерности многомерного массива.Например:Sub Сохранение()Dim I As IntegerDim J As IntegerDim A() As Integer ′объявление массиваReDim A(2, -5 To 1) ′указание размерностиFor I = 0 To 2For J = -5 To 1A(I, J) = (I+1)*J^2Next JNext IReDim Preserve A(2, -5 To 4) ′указание размерностиFor I = 1 To 2For J = 2 To 4A(I, J) = (I + 1)*J^3Next JNext IEnd Sub. Работа с массивамиДля определения значений нижней и верхней границ массива любой размерности используются функции LBound и UBound соответственно.Например: Используя функции LBound и UBound определить границы одномерного массива А.Dim Low As IntegerDim Up As IntegerLow = LBound(A) ′Low – нижняя граница массиваUp = UBound(A) ′Up – верхняя граница массива.Функция UBound необходима, например, когда значение верхней границы одномерного массива неизвестно и при этом необходимо увеличить это значение на определенной число.Для освобождения оперативной памяти, занимаемой динамическим массивом, используется оператор Erase.Например:Sub Память()Dim A() As ByteDim B() As ByteReDim A(8) ′Память для А: 9 байтErase A ′Память для А: 0 байтReDim B(2, 2) ′Память для В: 3*3 = 9 байтEnd Sub. Для того, чтобы просмотреть выполнение данной программы необходимо после ввода программы "Память" выполнить следующие действия:Дважды выполнив Debug (отладка) > Add Watch (добавить контрольное значение), в окне Watches (контрольное значение) сгенерировать строки, соответствующие массива А и В.Кликнуть левой кнопкой мыши в любом месте программы для установки там мигающего курсора.Произвести пошаговое выполнение программы "Память", наблюдая за распределением памяти с помощью окна Watches.Для решения многих математических задач требуются массивы случайных чисел. Случайные числа рассчитываются с помощью функции Rnd.Перед серией обращений к функции Rnd должен находиться оператор Randomize.Например: программа, рассчитывающая 10 случайных чисел от 0 до 1:Sub случайные_числа()Dim N As IntegerDim I As IntegerDim S() As SingleN = 10ReDim S(1 To N)RandomizeFor I = 1 To NS(I) = RndNext IEnd Sub. Основные виды матрицВ математике матрицей называют прямоугольную таблицу значений, упорядоченных по строкам и столбцам, например, матрица A размера n  m имеет вид:где aij – элемент матрицы А, расположенный в i-ой строке j-ого столбца; m, n – количество строк и столбцов матрицы соответственно.Матрица характеризуется размерностью, то есть произведением числа строк на число столбцов.Элементы aii (i = j) образуют главную диагональ матрицы А.Если количество строк и столбцов матрицы совпадают, т.е. n = m то матрицу называют квадратной, если не совпадают – прямоугольной матрицей.Матрица размером 1  m называется вектором-строкой, размера n  1 – вектором столбцом. Нулевой называется матрица у которой элементы aij = 0.Единичной называется квадратная матрица, у которой на главной диагонали стоят 1, а все остальные элементы равны 0.Диагональной является квадратная матрица, где все элементы (кроме элементов, расположенных на главной диагонали) равны 0, т.е. aij = 0 при i  j.Квадратная матрица A размерностью n  n называется симметричной (симметрической), если aij = aji. Треугольной называется матрица порядка n  n, у которой одна часть элементов (либо над главной диагональю, либо под ней) равна 0.Транспонированной матрицей AT, называется матрица у которой строки полностью совпадают со столбцами исходной матрицы А, а столбцы – со строками матрицы А. Основные операции с матрицамиОперации над матрицами определяются с помощью операций над их элементами:Две матрицы А и В размерностью n  m равны друг другу (А = В) в том случае, если aij = bij;Сумма матриц А и В размерностью n  m есть матрица C(n  m), то есть С = A + B = (aij + bij) = cij, где i = 1, 2, …, n; j = 1, 2, …, m;Произведение матрицы А на скаляр  – есть матрица С =   A = (  aij) = cij;Произведение матрицы А размерностью n  m на матрицу В размерностью m  r – есть матрица С размерностью n  r, то есть , где i = 1, 2, …, n; j = 1, 2, …, m. Ввод матрицБлок схема формирования произвольной матрицы А размерностью (n  m) приведена на рис 3.Блок-схема формирования нулевой матрицы А размерностью (n  m) приведена на рис. 4.Блок-схема формирования единичной матрицы А размерностью (n  n) приведена на рис. 5.Блок-схема формирования диагональной матрицы А размерностью (n  n) приведена на рис. 6.Блок-схема формирования симметричной матрицы А размерностью (n  n) представлена на рис. 7.Блок-схема формирования треугольной матрицы А размерностью ( n  n ) представлена на рис. 8, 9. Вывод матрицНа рис. 10 представлена блок-схема вывода матрицы А(n  n). Операции над матрицамиБлок-схема умножения матрицы А размерностью (n  m) на константу С и получения результирующей матрицы В представлена на рис. 11.Блок-схема транспонирования матрицы А размерностью (n  n) представлена на рис. 12.Блок-схема сложения матриц А и В размерностями (n  m) и получения результирующей матрицы С той же размерности представлена на рис. 13.Блок-схема умножения матриц А(m  n) и В(n  l) и получения результирующей матрицы С размерностью (m  l) представлена на рис. 14. Сортировка методом прямого включенияТекстовый алгоритм: Начало.2. Выполнить цикл, пока i имеет значения от 2 до N, шаг = 1:i-ый элемент (A(i)) поместить в ячейку A(0);присвоить j = -1, то есть j равно номеру элемента, находящегося слева от испытуемого (i-го) и таким образом стоящего в "готовой" последовательности;если А(0) ≥ А(j), то элемент А(0) поместить в ячейку А(j+1), иначе элемент А(j) поместить в ячейку А(j+1), уменьшить значение j на единицу и вновь выполнить пункт в).Конец. Сортировка методом прямого выбораТекстовый алгоритм:Начало.Выполнить цикл, пока i имеет значения от 1 до N – 1, шаг = 1:поместим текущий (i-ый) элемент в какую-нибудь ячейку памяти (Х) и запомним порядковый номер (i) текущего элемента (в переменной К);выполнить цикл, пока j имеет значения от i + 1 (то есть от следующего за i элемента) до N, шаг = +1: тело цикла: если Х > А(j), то помещаем в ячейку Х элемент А(j) и запоминаем его номер в ячейке К;присвоить А(К) = А(i) и А(i) = Х.Конец. Сортировка методом прямого обменаТекстовый алгоритм:Начало.Выполнить цикл, пока i имеет значения от 2 до N, шаг = +1:выполнить цикл, пока j имеет значения от N до i, шаг = -1: тело цикла: если А(j-1) > А(j), то меняем местами эти два элемента.Конец. Сортировка бинарными включениямиТекстовый алгоритм:Начало.Выполнить цикл, пока I имеет значение от 2 до N с шагом = 1X = A(i), l = 1, r = i-1Если l > r, то:выполнить цикл, пока j имеет значение от (i-1) до l с шагом = -1.тело цикла: A(j + 1) = A(j)присвоить A(l) = Xиначе:присвоить m = (l + r) \ 2если X < A(m), то r = m – 1 иначе l = m + 1перейти к пункту б).Конец. Шейкер – сортировкаТекстовый алгоритм:Начало.Присвоить переменной t (слева массива) значение 2, переменной r (справа массива) и переменной k – значение количества элементов массива.Выполнить цикл, пока i имеет значение от r до t с шагом = -1:если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.Присвоить переменной t значение = k + 1.Выполнить цикл, пока i имеет значение от t до r с шагом = 1:если A(i-1) > A(i), то меняем местами эти два элемента и переменной k присваиваем значение = i.Присвоить переменной r значение = k – 1.Если t > r, то идти к пункту 8, иначе идти к пункту 3.Конец.

Приложенные файлы

  • pptx 15828057
    Размер файла: 2 MB Загрузок: 1

Добавить комментарий