Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по VB.doc
Скачиваний:
23
Добавлен:
12.11.2018
Размер:
2.66 Mб
Скачать
        1. Преобразование двумерных массивов

Преобразование матриц заключается, как правило, в изменении порядка следования его элементов без изменения значений самих элементов.

Пример 2. Сформировать массив из n*m элементов. Получить новый массив, повернув исходный на: 1800 и 900 по часовой стрелке и на 900 против часовой стрелки.

Фрагменты кодов программы :

'Поворот на 1800 градусов

For i=1 To n 'Цикл по строкам

For j=1 To m 'Цикл по столбцам

b(i,j)=a(n-i+1,m-j+1)

Next j

Next i

'Поворот на 900 градусов по часовой

For i=1 To n

For j=1 To m

b(i,j)=a(n-j+1,i)

Next j

Next i

'Поворот на 900 градусов против часовой

For i=1 To n

For j=1 To m

b(i,j)=a(j,m-i+1)

Next j

Next i

Пример 3. Сформировать массив из n * m элементов. Зеркально отразить (повернуть) его относительно горизонтальной оси и вертикальной оси. Дополнительных массивов не создавать..

При повороте массива относительно горизонтальной оси внешний цикл по строкам организуется только до целой части от деления n на 2 (горизонтальной оси массива).

Фрагмент кода программы:

'Относительно горизонтальной оси

For i=1 To n\2 'Цикл по строкам

For j=1 To m 'Цикл по столбцам

tmp=a(i,j)

a(i,j)=a(n-i+1,j)

a(n-i+1,j)=tmp

Next j

Next i

При повороте массива относительно вертикальной оси внутренний цикл по столбцам организуется только до целой части от деления m на 2 (вертикальной оси массива).

Фрагмент кода программы:

'Относительно вертикальной оси

For i=1 To n 'Цикл по строкам

For j=1 To m \ 2 'Цикл по столбцам

tmp=a(i,j)

a(i,j)=a(i,m-j+1)

a(n-i+1,j)=tmp

Next j

Next i

Пример 4. Сформировать массив из n * m элементов. Преобразовать его в одномерный массив.

Первый способ решения этой задачи состоит в том, что для формирования индекса очередного элемента одномерного массива задается независимый счетчик k.

Фрагмент кода программы:

'Использование независимого счетчика k для формирования одномерного массива

Dim a(1 To 30,1 To 30) As Single 'Описание статического двумерного

'массива, индексы элементов которого будут начинаться с 1

Dim b() As Single 'Описание динамического массива

Dim i As Integer,j As Integer,n As Integer,m As Integer

ReDim(n*m); 'Задание размера массива b, индексы элементов которого

'будут начинаться с 0!}

k=0 'Инициализация независимого счетчика

For i=1 To n Do 'Цикл по строкам

For j=1 To m Do 'Цикл по столбцам

Begin

b(k)=a(i,j)

k=k+1 'Значение счетчика увеличивается на 1

End;

Второй способ решения этой задачи состоит в том, что индекс очередного элемента одномерного массива вычисляется по формуле:

b(m * (i-1)+j-1) = a(i,j).

Фрагмент кода программы:

'Использование независимого счетчика k для формирования одномерного массива

Dim a(1 To 30,1 To 30) As Single 'Описание статического двумерного

'массива, индексы элементов которого будут начинаться с 1

Dim b() As Single 'Описание динамического массива

Dim i As Integer,j As Integer,n As Integer,m As Integer

ReDim(n*m); 'Задание размера массива b, индексы элементов которого

'будут начинаться с 0!

For i=1 To n Do 'Цикл по строкам

For j=1 To m Do 'Цикл по столбцам

b((i-1)*m +j-1)=a(i,j)