Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Средства описания и работы с двумерными массивами данных




Тема 4.8

Алгоритмы обработки двумерных массивов

 

Средства описания и работы с двумерными

Массивами данных

 

Базовые алгоритмы обработки двумерных

Массивов

 

Тестовые задания

 

4.8.4. Лабораторная работа по теме «Программирование алгоритмов формирования и обработки двумерных массивов»

 

 

Вопросы, подлежащие изучению

Общее задание на разработку проекта

 

Варианты индивидуальных заданий

 

4.8.4.4. Содержание отчёта

 

Пример выполнения задания

 

Контрольные вопросы

 

 

Средства описания и работы с двумерными массивами данных

 

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

Из предыдущей темы известно, что массив представляет собой последовательность переменных одинакового типа, объединенных общим именем.

Количество индексов (измерений) указывает на размерность (ранг) массива. Например, двумерный массив b(3,2):

 

b(0,0) b(0,1) b(0,2)
b(1,0) b(1,1) b(1,2)
b(2,0) b(2,1) b(2,2)
b(3,0) b(3,1) b(3,2)

 

Так, в приведенном выше примере размерность массива b(3,2) 2, т.е. массив двумерный (имеет два измерения). В нашем примере количество элементов массива b(3,2) равно 12 (4 строки и 3 столбца).

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

 

Dim b(3,2) As Single

 

Необходимо обратить внимание на то, что, как при описании – A(m,n), так и при обращении – A(i,j) к элементам двумерного массива, в скобках сначала указывается номер строки, а затем номер столбца ( рис. 4.8.1-1).

Для определения параметров двумерного массива могут использоваться свойство класса Array – Rank и метод класса ArrayGetLength(). Свойство Rank используется для определения количества измерений (ранга) массива (для двумерного массива ранг равен 2). Причем каждое измерение в массиве может иметь свою длину. Метод GetLength() используется для определения количества элементов в заданном измерении массива (для первого измерения используется значение 0, для второго – 1 и т.д.). Необходимо обратить внимание, что метод GetLength() возвращает значение, которое на единицу больше, чем указанное в объявлении Dim, так как индексация элементов массива в VBвсегда начинается с нуля, а метод GetLength() определяет количество элементов, считая от единицы.

 

Матрица прямоугольная A(n,m) - n¹m Матрица квадратная A(n,m) - n=m

 

    j m
       
       
i   A(i,j)  
       
n      

 

      j   m
           
           
i          
           
n          

 

 

Побочная диагональ Главная диагональ

матрицы i=n-j матрицы i= j

 

Рис. 4.8.1-1. Прямоугольная и квадратные матрицы

Так, для определения параметров массива Mac1(,), описанного как

 

Dim Mac1(4,7) As Integer

 

можно воспользоваться следующими выражениями:

 

ArrayRank = Mac1.Rank RawCount = Mac1.GetLength(ArrayRank-2) ColumnCount= Mac1.GetLength(ArrayRank-1)

 

Где ArrayRank – ранг матрицы (равен 2);

RawCount – количество строк (равно 5);

ColumnCount – количество столбцов (равно 8).

 

Таким образом, ArrayRank, RawCount, ColumnCount являются переменными целочисленного типа, которые принимают значения 2, 5 и 4.8.

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

Например, для массива Mac2(4,7):

Dim Mac2(4,7) As Double Dim Cтрока1, Столбец2 As Integer Строка1 = Mac2.GetUpperBound(0) 'Значение Строка1 'равно 4 Столбец2 = Mac2.GetUpperBound(1) 'Значение Столбец2 'равно 7

 

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

 

Пример 4.8.1-1. Написать процедуры ввода/вывода, которые могут использоваться в алгоритмах обработки двумерных массивов.

Некоторые процедуры ввода и вывода приведены в Темах 4.3, 4.4, 4.5, 4.6 и 4.7. Остальные процедуры ввода и вывода, которые можно использовать при написании базовых алгоритмов формирования и обработки двумерных массивов, представлены на рис. 4.8.1-2, 4.8.1-3, 4.8.1-4 и 4.8.1-5.

 

'Процедура ввода элементов двумерного массива Single с клавиатуры Sub vvodSngMac18(ByRef a(,) As Single) Dim i, j, m, n As Integer, y As Single m = a.GetLength(0) – 1: n = a.GetLength(1) - 1 Dim r1, r2 As String For i = 0 To m For j = 0 To n r1 = СStr(i): r2 = СStr(j) y = InputBox("эл-т массива a(" + r1 + "," + r2 + ") = ", _ "Ввод эначений эл-тов массива a()") a(i,j) = CSng(Val(y)) Next j Next i End Sub

Рис. 4.8.1-2. Процедура ввода элементов двумерного массива
vvodSngMac18() Примера 4.8.1-1

 

'Процедура формирования двумерного массива случайными числами Sub vvod2(ByRef a(,) As Double, ByVal m As Integer, _ ByVal n As Integer) Dim i, j As Integer Randomize() For i = 0 To m For j = 0 To n a(i, j) = 10 * Rnd() - 5 Next i Next j End Sub

Рис. 4.8.1-3. Процедура формирования массива vvod2()

случайными числами Примера 4.8.1-1

'Процедура форматированного вывода двумер-го массива в ListBox Sub vivodSngMac19(ByRef x(,) As Single, ByRef LB As ListBox) Dim i, j, m, n As Integer Dim z, z1 As String m = x.GetLength(0) – 1: n = x.GetLength(1) - 1 LB.Items.Clear() For i = 0 To m z= "" For j = 0 To n z1 = Format(x(i,j), "0.000") If x(i,j) < 0 Then z1 = Space(2) + z1 Else z1 = Space(3) + z1 End If z = z + z1 Next j LB.Items.Add(z) Next i End Sub

Рис. 4.8.1-4. Процедура форматированного вывода массива vivodSngMac19()

Примера 4.8.1-1

На рис. 4.8.1-4 представлен пример процедуры вывода целочисленной матрицы в TextBox. Напомним, что для того, чтобы в элементе управления TextBox можно было записать несколько строк текста, необходимо присвоить его свойству MultiLine значение True.

 

'Процедура форматированного вывода двум-го массива Integer в TextBox Sub vivodIntMac20(ByRef x(,) As Integer, ByRef TB As TextBox) Dim i, j, m, n As Integer Dim z As String m = x.GetLength(0) – 1: n = x.GetLength(1) - 1 TB.Text = "" For i = 0 To m For j = 0 To n If Abs(x(i,j)) >= 100 Then z = CStr (x(i,j)) & Space(2) ElseIf Abs(x(i,j)) >= 10 Then z = CStr (x(i,j)) & Space(4) Else z = CStr (x(i,j)) & Space(6) End If If x(I,j) >= 0 Then z = Space(1) + z TB.Text = TB.Text & z Next j TB.Text = TB.Text & vbCrLf Next i End Sub

Рис. 4.8.1-5. Процедура форматированного вывода массива
vivodIntMac20 в TextBox Примера 4.8.1-1






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


Дата добавления: 2016-11-24; Мы поможем в написании ваших работ!; просмотров: 455 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Ваше время ограничено, не тратьте его, живя чужой жизнью © Стив Джобс
==> читать все изречения...

2196 - | 2142 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.