Главная страница
Навигация по странице:

  • Первый способ

  • Второй способ

  • Введение 8 Этапы создания Windowsприложения 8


    Скачать 6.98 Mb.
    НазваниеВведение 8 Этапы создания Windowsприложения 8
    АнкорVisual Basic 2005 (word97).doc
    Дата22.12.2017
    Размер6.98 Mb.
    Формат файлаdoc
    Имя файлаVisual Basic 2005 (word97).doc
    ТипРеферат
    #12532
    страница34 из 63
    1   ...   30   31   32   33   34   35   36   37   ...   63

    8. Обработка двумерных массивов (матриц)


    Многомерные массивы применяются в тех случаях, когда обрабатываемые данные представляются в виде таблиц или совокупности таблиц. В первом случае используют двумерные массивы (другое название двумерного массива – матрица), во втором – трехмерные. Существуют массивы и большей размерности. Visual Basic 2005 позволяет создавать массивы, содержащие до 32 размерностей. Рассмотрим основные приемы обработки матриц.

    Описание двумерного массива практически не отличается от описания одномерного массива. Сначала указывается имя матрицы, затем – круглые скобки, между которыми ставится одна запятая. Она показывает Visual Basic 2005, что мы организуем массив, который будет иметь два индекса. Последним задается тип данных, к которому будут принадлежать все элементы матрицы. Существует два способа объявления матрицы.

    Первый способ

    Dim a(,) As Integer

    Эта конструкция описывает двумерный целочисленный массив a(,) типа Integer, размеры которого заранее неизвестны. Изначально в нем нет ни одного элемента. Размеры этой матрицы будут определены позднее с помощью оператора ReDim.

    Второй способ

    Dim b(10, 18) As Single

    Такая запись определяет двумерный массив b(,) типа Single, состоящий из 11 строк и 19 столбцов. Строки матрицы будут пронумерованы от 0 до 10, а столбцы – от 0 до 18. Обратите внимание, что при описании матрицы всегда сначала указывается номер последней строки, а потом – номер последнего столбца. Обратите внимание, что нумерация строк и столбцов матрицы всегда начинается с нуля независимо от способа ее объявления. Размеры этого массива тоже можно будет изменять в процессе выполнения программы с помощью оператора ReDim.
    Объем памяти, занимаемой матрицей, вычисляется как произведение числа строк, числа столбцов и объема памяти, который занимает одна переменная указанного типа данных. Вычислим объем памяти, необходимый для хранения матрицы b(,). В этой матрице 11 строк, 19 столбцов. Один элемент матрицы занимает 4 байта памяти, так как имеет тип Single. Перемножаем эти числа и получаем: 11 * 19 * 4 = 836 байт.

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

    b(3, 6) = 7.5

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

    For i = 0 to 10

    For j = 0 to 18

    A(i, j) = i + j

    Next

    Next

    На каждом шаге внешнего цикла (For i = 0 to 10) полностью выполняется внутренний цикл (For j = 0 to 18). Внешний цикл выполняется 11 раз, внутренний – 19. Следовательно, действие, находящееся в теле внутреннего цикла выполнится 11 * 19 = 209 раз. При организации вложенных циклов важно помнить, что счетчики внешнего и внутреннего циклов обязательно должны быть различными.

    8.1. Ввод прямоугольной матрицы


    Ввести матрицу – значит, задать ее размеры и указать значения всех ее элементов. Как и при обработке одномерного массива, значения элементов матрицы можно задавать двумя способами: вводя значения с клавиатуры или пользуясь генератором случайных чисел. Рассмотрим особенности программной реализации первого способа.

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

    Сначала описывается целочисленная матрица a(,). Так как ее размеры заранее неизвестны, то при описании матрицы номера последней строки и столбца не указываются.

    Dim a(,) As Integer

    Для работы с матрицей нам необходимо знать ее размеры. Они будет храниться в переменных m и n. Число строк – в переменной m, число столбцов – в переменной n. Обе этих переменных будут иметь целочисленный тип данных.

    Dim m, n As Integer

    Поскольку для обработки матрицы нам потребуется два цикла For, то нам необходимо описать два счетчика i и j. Очевидно, что обе эти переменных всегда будут иметь целый тип.

    Dim i, j As Integer

    Задание матрицы начинается с определения ее размеров. Мы просим пользователя указать число строк в матрице. Так как это количество может быть только положительным, то при вводе этого значения необходима проверка, которую мы организуем с помощью цикла Do Loop Until.

    Do

    m = Val(InputBox("Введите количество строк"))

    Loop Until m > 0

    Аналогичным образом вводится число столбцов матрицы.

    Do

    n = Val(InputBox("Введите количество столбцов"))

    Loop Until n > 0

    В Visual Basic 2005 нумерация элементов любого массива (в том числе и двумерного) всегда начинается с нуля. Следовательно, номера последней строки и последнего столбца будут на единицу меньше соответствующего количества. Поэтому уменьшаем значения переменных m и n на единицу. Теперь в них хранятся не количества строк и столбцов, а номера последней строки и последнего столбца матрицы.

    m -= 1

    n -= 1

    Задаем размер матрицы a(,), указывая в операторе ReDim номера последней строки и последнего столбца. При этом порядок перечисления переменных имеет значение.

    ReDim a(m, n)

    Для ввода значений элементов матрицы нам потребуется организовать вложенные циклы. Строки матрицы последовательно пронумерованы от 0 до m, а столбцы от 0 до n. Следовательно, счетчики обоих циклов должны изменяться в этих же диапазонах. Внешний цикл будем использовать для последовательной обработки строк матрицы, а внутренний – для работы с элементами, находящимися в пределах одной строки. В таких случаях говорят, что внешний цикл идет по строкам матрицы, а внутренний – по столбцам. В результате на i-м шаге внешнего цикла мы будем работать с i-й строкой матрицы, а на j-м шаге внутреннего цикла обрабатывать элемент, стоящий в i-й строке и j-м столбце.

    For i = 0 To m

    For j = 0 To n

    С помощью функции InputBox вводим значение элемента a(i, j). Так как вводимое значение является числом, то используем преобразование Val.

    a(i, j) = Val(InputBox("Введите элемент (" + _

    Str(i) + "," + Str(j) + ")"))

    Next

    Next

    Полный текст программы представлен в приложении 37.
    1   ...   30   31   32   33   34   35   36   37   ...   63


    написать администратору сайта