ПОЗНАВАТЕЛЬНОЕ Сила воли ведет к действию, а позитивные действия формируют позитивное отношение Как определить диапазон голоса - ваш вокал
Игровые автоматы с быстрым выводом Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими Целительная привычка Как самому избавиться от обидчивости Противоречивые взгляды на качества, присущие мужчинам Тренинг уверенности в себе Вкуснейший "Салат из свеклы с чесноком" Натюрморт и его изобразительные возможности Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д. Как научиться брать на себя ответственность Зачем нужны границы в отношениях с детьми? Световозвращающие элементы на детской одежде Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия Как слышать голос Бога Классификация ожирения по ИМТ (ВОЗ) Глава 3. Завет мужчины с женщиной 
Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | Программирование обработки двумерных массивов Двумерные массивы обозначаются переменными с двумя индексами и используются для представления матриц. Например, массив А(3,5) можно представить в виде таблицы: А(1,1) | А(1,2) | А(1,3) | А(1,4) | А(1,5) | А(2,1) | А(2,2) | А(2,3) | А(2,4) | А(2,5) | А(3,1) | А(3,2) | А(3,3) | А(3,4) | А(3,5) | Первый индекс в обозначении элемента массива является номером строки, а второй - номером столбца матрицы. Так же как и одномерные массивы, типы двумерных массивов должны быть определены в начале программы. Причем для статически размещаемых массивов следует так же указать предельные значения номеров строк и столбцов массива. Например, оператор Dim MAMI(4,6), A2(4,-3 To 3), B_matr(3 To 7, 6) определяет три двумерных массива, содержащих по 35 элементов в каждом и имеющих 5 строк и 7 столбцов. Для массива MAMI номера строк должны изменяться в диапазоне от 0 до 4, столбцов - в диапазоне от 0 до 6. Для массива A2 номера строк изменяются в том же диапазоне, а номера столбцов должны изменяться в диапазоне от -3 до 3. В матрице B_matr номера строк должны быть от 3 до 7, а номера столбцов от 0 до 6. Расположение элементов многомерных массивов в памяти ЭВМ в стандарте языка VBA не оговариваются. В отличие от одномерных массивов, где конкретный элемент массива определяется одним индексом, при обработке двумерных массивов следует сформировать все возможные сочетания численных значений двух индексов. Это реализуется с помощью двух циклов - один по индексам строк, другой по индексам столбцов. В зависимости от того, какой из этих циклов будет внешним, различают две схемы обработки двумерных массивов - по строкам, когда внешним является цикл по номерам строк, и по столбцам, когда внешним является цикл по номерам столбцов. ' схема обработки массива ' по строкам For i=1 To N ' внешний цикл For j=1 To M ' внутренний цикл ' обработка элемента А(i,j) Next 'конец внутреннего цикла j Next 'конец внешнего цикла i | ' схема обработки массива ' по столбцам For j=1 To M For i=1 To N 'обработка элемента А(i,j) Next ' внутр. цикл i Next ' внешний цикл j | При написании операторов Next для наглядности можно дописать имена индексов соответствующего цикла. Однако, если их перепутать, то при выполнении программы будет выдано сообщение об ошибке. Схема обработки элементов массивы по строкам заключается в следующем. Сначала индексы i и j получают значение единицы и происходит обработка элемента А(1,1). После этого индекс j увеличивается на единицу, а индекс i остается прежним. В результате происходит последовательная обработка элементов 1-ой строки: А(1,2), А(1,3), А(1,4), ... , А(1,M). После завершения внутреннего цикла увеличивается значение переменной i, и при выполнении цикла по индексу j осуществляется обработка 2-ой строки матрицы и т.д. Аналогичный процесс происходит при обработке по столбцам, только здесь изменяется индекс i при фиксированном номере столбца j. Ввод-вывод двумерных массивов может быть организован такими же способами, что и ввод-вывод одномерных массивов. Однако при вводе-выводе двумерных массивов переменной длины, когда при составлении программы неизвестно количество строк и столбцов, их количество должно быть задано перед началом работы с массивом. Пример 5.8. Написать фрагмент программы для определения сумм элементов каждого столбца матрицы М(5,7) и записи полученных значений в одномерный массив. Исходная матрица расположена на активном листе таблицы Excel. Полученный массив с суммами столбцов поместить в восьмую строку этой же таблицы. В этой программе следует использовать схему обработки двумерного массива по столбцам. Сумма элементов каждого столбца формируется в переменной S и записывается в одномерный массив Summa, содержащий 7 элементов. Option Explicit ' запрет на использование необъявленных переменных Sub Пример_5_8() Dim Mas(4, 6) As Single Dim Summa(6) As Single, S As Single Dim i As Integer, j As Integer ' ввод массива из таблицы Excel по строкам For i = 1 To 5 For j = 1 To 7 Mas(i - 1, j - 1) = Cells(i, j) Next Next For j = 0 To 6 ' внешний цикл обработки массива по столбцам S = 0 ' подготовка переменной для накапливания суммы For i = 0 To 4 ' внутренний цикл по строкам S = S + Mas(i, j) ' вычисление суммы j-го столбца Next ' конец внутреннего цикла по параметру i Summa(j) = S ' запись суммы столбца в одномерный массив Next ' конец внешнего цикла по параметру j Cells(7, 1) = "Сумма элементов по столбцам" For i = 1 To 7 Cells(8,i)=Summa(i-1) 'запись массива Summa в 8-ю строку таблицы Next End Sub Тестовые данные и результат отладки программы показаны на рисунке 5.3.  Рисунок 5.3 - Данные и результат отладки программы «Пример_5_8» Пример 5.9. Написать фрагмент программы транспонирования массива Tразмером N×N. For i=1 To N–1 For j=i+1 To N ' перестановка элементов T(i,j) и T(j,i) R = T(i, j) T(i, j)=T(j, i) T(j, i)=R Next Next Этот фрагмент программы переставляет местами строки и столбцы матрицы с одинаковыми номерами. При такой перестановке элементы T(i,j) и T(j,i) должны поменяться местами, например, Т(1,3) должен занять место Т(3,1) и наоборот. Перестановка элементов строки и столбца массива с одинаковыми номерами осуществляется во внутреннем цикле, а во внешнем цикле обеспечивается переход к следующей строке. Так как начальное значение параметра внутреннего цикла j равно i+1, перестановка элементов новой строки начинается не с первого элемента строки, а с элемента T(i,i+1) и продолжается от этого элемента вправо по строке. Элементы строки, расположенные левее главной диагонали, уже переставлены. Для перестановки двух элементов местами целесообразно ввести дополнительную переменную соответствующего типа, а саму перестановку осуществлять по следующей схеме: 1-й шаг - значение первого элемента присваивается рабочей переменной (например «R»); 2-ой шаг - значение второго элемента записывается в первый элемент (при этом старое значение первого элемента пропадает, поэтому оно предварительно было сохранено в рабочей переменной); 3-ий шаг - старое значение первого элемента из рабочей переменной R записывается во второй элемент. |