Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




В дисциплине «Информатика» при изучении Visual Basic были рассмотрены одномерные массивы (соответствует последовательности или ряду данных), в которых каждый элемент определяется одним индексом. Современные языки программирования позволяют работать также с многомерными массивами (таблицы – 2х мерная, куб 3-х мерная и т д.), в которых элементы определяются несколькими индексами. Мы будем использовать двумерные массивы – каждый элемент определяется двумя индексами (соответствуют матрице – один индекс определяет номер строки, второй – столбца).

В Visual Basic Script все массивы должны быть определены оператором Dim. Двумерный массив с именем matrix, состоящий из трех элементов по одному измерению и двух элементов по другому измерению (матрица из трех строк и двух столбцов) определяется оператором:

Dim matrix(2,1)

В Visual Basic для определения массивов мы использовали, например, оператор Dim A (1 To 5) As Integer для определения целочисленного массива из пяти элементов (индексы элементов могут принимать значения от 1 до 5). В данном случае мы использовали явный способ задания диапазона значений индексов элементов массива от 1 до 5.

При неявном определении массива индексом первого элемента является 0. Оператор Dim A (5) определяет массив из 6 элементов (индексы 0, 1,2, 3, 4, 5).

В Visual Basic Script не допускается использование явного определения массивов. Таким образом, оператор Dim matrix(2,1) определяет двумерный массив, состоящий из трех элементов по одному измерению и двух элементов по другому измерению. Соответствующая такому массиву матрица из трех строк и двух столбцов показана на рисунке 18, в элементах матрицы указаны их индексы (первый индекс – номер строки, второй – номер столбца).

 

0,0 0,1
1,0 1,1
2,0 2,1

Рис. 18.

Оператор определения массива выделят ячейки (область) оперативной памяти для его размещения. Такие области всегда одномерны независимо от размерности массива. В разных языках программирования многомерные массивы упорядочиваются по-разному.

В Visual Basic и Visual Basic Script многомерные массивы упорядочиваются таким образом, что быстрее всего меняется левый индекс (для приведенной на рисунке матрицы это будет означать, что она упорядочивается по столбцам – сначала первый столбец, затем второй). Приведенный в примере массив matrix(2,1) в памяти будет храниться в следующей последовательности (рис. 19):

0,0 1,0 2,0 0,1 1,1 2,1

Рис. 19.

Для работы с многомерными массивами обычно применяются алгоритмы содержащие несколько циклов (один цикл по каждому измерению). Для суммирования значений всех элементов двумерного массива (суммируются все элементы матрицы) можно написать следующий фрагмент программы:

Цикл по i – внешний цикл, цикл по j – внутренний (вложенный). Каждому оператору For соответствует свой оператор Next. Цикл по j вложен в цикл по i.
Sum = 0

For i = 0 to 2

For j = 0 to 1

Sum = Sum + matrix (i,j)

Next j

Next i

Оператор суммирования Sum = Sum + matrix (i,j) выполняется 6 раз. Внешний и вложенный циклы работают в следующей последовательности:

· для первого значения параметра внешнего цикла i = 0 последовательно меняются значения параметра вложенного цикла (0,1), т.е. полностью выполняется внутренний цикл;

· параметр внешнего цикла i принимает следующее значение i = 1 и опять последовательно меняются значения параметра вложенного цикла (0,1), опять полностью выполняется внутренний цикл;

· и т.д.

 

Пример проекта.

Рис. 20.

Проект (рисунок 20) обеспечивает управляемый пользователем расчет сумм строк или столбцов матрицы (результатом каждого расчета является одномерный массив(вектор), элементы которого содержат суммы соответствующих строк или столбцов матрицы). Для ввода исходных данных (значения элементов матрицы) и вывода результатов расчета (сформированные векторы) используются текстовые окна в окне браузера. Расположение текстовых окон соответствует виду матрицы и векторов. Для выбора вида расчета используются два переключателя. Вычисление производится по щелчку мыши по командной кнопке.

Вид элементов на браузере показан на рисунке, фрагмент скрипта для определения этих элементов на браузере приводится ниже. Обратите внимание, что для обоих переключателей задается одинаковое имя option22. Переключатели с одинаковыми именами образуют связанную группу (возможен выбор только одного переключателя из группы).

<FORM name=Form1>

<P>

<INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;<INPUT type=Text maxLength=8 size=9>

</P>

<P>

<INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;<INPUT type=Text maxLength=8 size=9>

</P>

<P>

<INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;<INPUT type=Text maxLength=8 size=9>

</P>

<P>

<INPUT name=option22 type=radio>По строкам.&nbsp;&nbsp;<INPUT name=option22 type=radio>По столбцам

</P>

<P>

<INPUT name=btnOne type=button value="Вычислить ">

</P>

<P>Cумма по строкам</P>

<P> <INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;

<INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;

<INPUT type=Text maxLength=8 size=9></P>

<P>Cумма по столбцам</P>

<P> <INPUT type=Text maxLength=8 size=9>&nbsp;&nbsp;

<INPUT type=Text maxLength=8 size=9>

</P>

</FORM>

 

Как было сказано выше, объект Form (форма) содержит объекты управления (Element), организованные в виде коллекции. Как и массив, элементы коллекции имеют общее имя, а обращение к конкретному объекту коллекции производится по индексу. Первый объект коллекции объектов формы имеет индекс 0, далее 1, 2,…..

Об использовании в скриптах свойств или методов элементов коллекции объектов управления также было сказано выше.

Объекты коллекции элементов управления упорядочиваются соответственно последовательности их описания в скрипте.

В приведенном фрагменте скрипта определения элементов на браузере заданы 14 элементов. Индексы элементов принадлежат диапазону от 0 до 13.

Элементы в скрипте определяются построчно (теги <p> и </p>), последовательно в каждой строке.

Первая строка содержит два текстовых окна (индексы в коллекции 0, 1).

Вторая строка содержит два текстовых окна (индексы в коллекции 2, 3).

Третья строка содержит два текстовых окна (индексы в коллекции 4, 5).

Четвертая строка содержит два переключателя (индексы в коллекции 6, 7).

Пятая строка содержит командную кнопку (индекс в коллекции 8).

Седьмая строка содержит три текстовых окна (индексы в коллекции 9, 10, 11).

Девятая строка содержит два текстовых окна (индексы в коллекции 12, 13).

В операторе Document.Form1.elements(i).Value в зависимости от значения индекса i будет использоваться свойство Value того или иного объекта формы.

Ниже приводится текст программы на VBScript для управляемого пользователем расчета сумм строк или столбцов матрицы (результатом каждого расчета является одномерный массив, элементы которого содержат суммы соответствующих строк или столбцов матрицы).

< SCRIPT language=VBScript>

<!--

Option Explicit

dim matrix(2,1)

dim vector_stroka (2)

dim vector_stolbec (1)

dim i,j

Sub btnOne_onClick

For i=0 to 2

For j =0 to 1

matrix (i,j) = Document.Form1.elements(i*2 +j).Value

' MsgBox matrix (i,j)

Next

Next

if Document.Form1.elements(6).Checked Then

'Если выбран переключатель "По строкам"

‘вычисление значений по строкам

For i=0 To 2

vector_stroka (i) =0

For j=0 To 1

vector_stroka (i) =vector_stroka (i)+matrix (i,j)

Next

'MsgBox vector_stroka (i)

Next

‘ вывод результатов

For i=0 To 2

Document.Form1.elements(9 + i).Value=vector_stroka (i)

Next

Else

' Если выбран переключатель "По столбцам"

For j=0 To 1

vector_stolbec (j) =0

For i=0 To 2

vector_stolbec(j) =vector_stolbec (j)+ matrix (i,j)

Next

'MsgBox vector_stolbec (j)

Next

For j=0 To 1

Document.Form1.elements(12 +j).Value=vector_stolbec (j)

Next

End if

End Sub

-->

</SCRIPT>

Описание программы:

Операторы dim matrix (2,1), dim vector_stroka (2), dim vector_stolbec (1), dim i,j определяют:

· двумерный массив matrix (2,1) (исходная матрица из трех строк и двух столбцов, индексы строк - 0,1,2, индексы столбцов - 0,1)

· одномерный массив vector_stroka (2) (вектор сумм строк из трех элементов, индексы элементов 0,1,2 соответствуют индексам строк матрицы)

· одномерный массив vector_stolbec (1) (вектор сумм столбцов из двух элементов, индексы элементов 0,1 соответствуют индексам столбцов матрицы)

· переменные i,j, используемые в операторах цикла.

Формирование векторов производится в процедуре обработки события щелчка мыши по командной кнопке (процедура btnOne_onClick).

Операторы

For i = 0 to 2

For j = 0 to 1

matrix (i,j) = Document.Form1.elements(i*2 +j).Value

Next

Next

производят считывание значений заданных в текстовых окнах в соответствующие элементы двумерного массива (матрицы). Текстовые окна (элементы коллекции) имеет линейное упорядочение с индексами от 0 до 5 (см. выше). Массив matrix является двумерным с индексами строк - 0,1,2 и индексами столбцов - 0,1. Два цикла по I и j, параметры которых используются для вычисления индекса текстового окна в коллекции (i*2 +j), обеспечивают соответствие элементов двумерного массива и одномерной коллекции. Рисунки 21 и 22 иллюстрируют соответствие элементов двумерного массива и элементов одномерной коллекции.

 

0,0 0, 1
1,0 1,1
2,0 2,1

Рис. 21.

           
0,0 0,1 1,0 1,1 2,0 2,1
0*2+0=0 0*2+1=1 1*2+0=2 1*2+1=3 2*2+0=4 2*2+1=5

Рис. 22.

Условие Document.Form1.elements(6).Checked имеет значение True (истина), если выбран переключатель "По строкам". В противном случае условие имеет значение False. Условный оператор IF – THEN-ELSE-ENDIF (развилка с условием) с этим условием осуществляет переход на формирование того или иного вектора.

Операторы

For i=0 To 2

vector_stroka (i) =0

For j=0 To 1

vector_stroka (i) =vector_stroka (i)+matrix (i,j)

Next

Next

обеспечивают формирование вектора из сумм строк матрицы. Внешний цикл по i(индекс строки матрицы), внутренний (вложенный) цикл по j(индекс столбца матрицы). Индекс элемента формируемого вектора соответствует индексу строки матрицы. Для каждого нового элемента вектора во внешнем цикле начальное значение обнуляется (vector_stroka (i) = 0 – начальному значению суммы присваивается 0).

Операторы

For i=0 To 2

Document.Form1.elements(9 +i).Value=vector_stroka (i)

Next

обеспечивают заполнение текстовых окон под заголовком «Сумма по строкам» вычисленными значениями (индексы этих текстовых окон в коллекции 9, 10, 11).

Операторы

For j=0 To 1

vector_stolbec (j) =0

For i=0 To 2

vector_stolbec(j) =vector_stolbec (j)+matrix (i,j)

Next

'MsgBox vector_stolbec (j)

Next

обеспечивают формирование вектора из сумм столбцов матрицы. Внешний цикл по j (индекс столбца матрицы), внутренний (вложенный) цикл по i (индекс строки матрицы). Индекс элемента формируемого вектора соответствует индексу столбца матрицы. Для каждого нового элемента вектора во внешнем цикле начальное значение обнуляется (vector_stolbec (j) = 0 – начальному значению суммы присваивается 0).

Операторы

For j=0 To 1

Document.Form1.elements(12 +j).Value=vector_stolbec (j)

Next

обеспечивают заполнение текстовых окон под заголовком «Сумма по столбцам» вычисленными значениями (индексы этих текстовых окон в коллекции 12, 13).

Закомментированные операторы (например, 'MsgBox vector_stolbec (j))позволяют контролировать работу программы во время ее отладки).

Работа проекта показана на рисунке 23.

Рис. 23.

Задание 8 для самостоятельного выполнения.

Разработать и отладить проект на VBScript, обеспечивающий:

· задание в браузере значений элементов исходной матрицы в соответственно расположенных текстовых окнах

· выбор с помощью переключателей альтернативного способа формирования вектора из элементов матрицы

· формирование векторов из элементов матрицы по альтернативным способам (запускается событием «щелчок мыши» по командной кнопке)

· вывод на браузер альтернативно сформированных векторов в соответственно расположенные текстовые окна

Взаимное расположение на браузере исходной матрицы, командной кнопки, переключателей и результирующих векторов, размерность матрицы и векторов, альтернативные способы формирования векторов определяются вариантами задания.

Варианты задания

Вариант 1.

Расположение (сверху вниз по строкам):

§ Вектор 1

§ Вектор 2

§ Матрица

§ Командная кнопка

§ Переключатели

Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество нулевых элементов строк

§ Вектор 2 - количество нулевых элементов столбцов

 

Вариант 2.

Расположение (сверху вниз по строкам):

§ Переключатели

§ Вектор 1

§ Матрица

§ Вектор 2

§ Командная кнопка

Размерность матрицы: 4*3

Формируемые вектора:

§ Вектор 1 – количество нулевых элементов столбцов

§ Вектор 2 - количество нулевых элементов строк

 

Вариант 3.

Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Переключатели

§ Матрица

§ Вектор 1

§ Вектор 2

Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество нулевых элементов строк

§ Вектор 2 - количество нулевых элементов столбцов

 

Вариант 4.

Расположение (сверху вниз по строкам):

§ Вектор 1

§ Вектор 2

§ Матрица

§ Командная кнопка

§ Переключатели

Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество положительных элементов строк

§ Вектор 2 - количество отрицательных элементов столбцов

 

Вариант 5.

Расположение (сверху вниз по строкам):

§ Переключатели

§ Вектор 1

§ Матрица

Вектор 2

§ Командная кнопка

§ Размерность матрицы: 4*3

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - количество положительных элементов строк

 

Вариант 6.

Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Переключатели

§ Матрица

§ Вектор 1

§ Вектор 2

§ Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – сумма положительных элементов строк

§ Вектор 2 - количество отрицательных элементов столбцов

§

Вариант 7.

§ Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Вектор 1

§ Матрица Вектор 2

§ Переключатели

§ Размерность матрицы: 3*2

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - сумма положительных элементов строк

 

Вариант 8.

§ Расположение (сверху вниз по строкам):

§ Переключатели

§ Вектор 1

§ Матрица

§ Вектор 2

§ Командная кнопка

§ Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - количество положительных элементов строк

 

Вариант 9.

§ Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Переключатели

§ Матрица

§ Вектор 1

§ Вектор 2

Размерность матрицы: 5*6

§ Формируемые вектора:

§ Вектор 1 – сумма положительных элементов строк

§ Вектор 2 - количество отрицательных элементов столбцов

 

Вариант 10.

§ Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Вектор 1

§ Матрица Вектор 2

§ Переключатели

§ Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - сумма положительных элементов строк

Вариант 11.

§ Расположение (сверху вниз по строкам):

§ Вектор 1

§ Матрица

§ Вектор 2

§ Переключатели

§ Командная кнопка

§ Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – количество нулевых элементов столбцов

§ Вектор 2 - сумма положительных элементов строк

 

Вариант 12.

§ Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Вектор 1

§ Матрица Вектор 2

§ Переключатели

§ Размерность матрицы: 4*5

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - сумма положительных элементов строк

 

Вариант 13.

§ Расположение (сверху вниз по строкам):

§ Вектор 1

§ Матрица

§ Вектор 2

§ Переключатели

§ Командная кнопка

§ Размерность матрицы: 3*4

Формируемые вектора:

§ Вектор 1 – сумма положительных элементов строк

§ Вектор 2 - сумма отрицательных элементов столбцов

 

Вариант 14.

§ Расположение (сверху вниз по строкам):

§ Матрица

§ Вектор 1

§ Вектор 2

§ Командная кнопка

§ Переключатели

§ Размерность матрицы: 5*3

Формируемые вектора:

§ Вектор 1 – сумма положительных элементов строк

§ Вектор 2 - сумма отрицательных элементов столбцов

 

Вариант 15.

§ Расположение (сверху вниз по строкам):

§ Командная кнопка

§ Переключатели

§ Вектор 1

§ Матрица Вектор 2

§ Размерность матрицы: 5*3

Формируемые вектора:

§ Вектор 1 – количество отрицательных элементов столбцов

§ Вектор 2 - сумма положительных элементов строк

§

Вариант 16.

§ Расположение (сверху вниз по строкам):

§ Вектор 1

§ Матрица

§ Вектор 2

§ Переключатели

§ Командная кнопка

§ Размерность матрицы: 2*4

Формируемые вектора:

§ Вектор 1 – сумма положительных элементов строк

§ Вектор 2 - сумма отрицательных элементов столбцов

§

Примечание к вариантам 7, 10, 12, 15:

В этих вариантах формируемый вектор из сумм соответствующих строк матрицы находится справа от матрицы (рисунок 24).

Рис. 24

Индексы элементов коллекции в столбце: 2, 5, 8

 

В этом случае нужно внести следующие модификации в алгоритмы.

Ввод исходных значений элементов матрицы из текстовых окон:

For i=0 to 2

For j =0 to 2

If j < 2 Then

matrix (i,j) = Document.Form1.elements(i*3 +j).Value

' MsgBox matrix (i,j)

endif

Next

Next

Вывод значений сумм строк в соответствующие элементам формируемого вектора текстовые окна:

For i=0 To 2

Document.Form1.elements(3*(i+1)-1).Value=vector_stroka (i)

Next

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...