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

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

Пример. В одномерном массиве a1, a2, a3, …, an , состоящем из n элементов, изменить порядок следования значений элементов на обратный от позиции n1 до позиции n2 (n1<n2<n).

Алгоритм изменения порядка следования элементов в массиве на обратный состоит в следующем:

n1-ый элемент меняется местами с n2-ым,

(n1+1)-ый элемент меняется местами с (n2-1)-ым,

…………………………………………………….

(n1+i)-ый элемент меняется местами с (n2-i)-ым,

Цикл выполняется лишь до половины диапазона от n1 до (n1+n2) div 2, иначе в массиве ничего не изменится.

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

For i=n1 To (n1 + n2) div 2 'Цикл по количеству перестановок

tmp=a[i] 'Обмен местами элементов ai и an1+n2-i

a(i)=a(n1+n2-i)

a(n1+n2-i)=tmp

Next i

        1. Кольцевой сдвиг элементов массива

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

Пример. В одномерном массиве, состоящем из n элементов произвести кольцевой сдвиг элементов на k позиций. Значение k задается, оно может быть как положительным, так и отрицательным, но должно быть целым.

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

'Анализ числа k, сдвиг будет происходить только если k отлично от 0

If k <> 0 Then

'Формирование переменной sdvig

If k >0 Then sdvig=k Else sdvig=n+k

'Кольцевое смещение осуществляется на 1 позицию sdvig раз

For i=1 To sdvig

'Смещение начинается с последнего элемента, который помещают во вспомогательную

'переменную tmp, чтобы его значение не потерялось, откуда его затем извлекают и 'отправляют в первую позицию после выхода из внутреннего цикла.

tmp=a(n);

For j=n-1 To 1 Do a(j+1)=a(j)

a(1)=tmp

Next i

End if

    1. Двумерные массивы

Для обработки двумерных массивов чаще всего используют два вложенных друг в друга цикла For…Next, каждый из них позволяет перебирать элементы в массиве по соответствующему индексу строки или столбца. Формат описания двумерного массива в разделе объявления переменных:

Dim Имя_массива ([Тип_индекса, Тип_индекса]) [As Тип_данных]

Например,

Dim A[1 To 10, 1 To 10] Of Single

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

      1. Ввод и вывод двумерных массивов

        1. Формирование двумерного массива с помощью диалогового окна InputBox и функции Split

Использование функции Split для формирования двумерного массива аналогично одномерному. В приведенном ниже примере каждая строка двумерного массива заполняется с помощью диалогового окна InputBox. Элементы строки массива разделяются пробелом, далее с помощью функции Split строка разделяется по пробелу на массив подстрок. Подстрок будет столько, сколько было введено элементов. Массив полученных подстрок индексируется с нуля!

Значения массива выводятся на PictureBox.

Option Base 1

Dim a(30,30) As Single

Dim av As String

Private Sub Command1_Click()

n = Val(Text1.Text) 'Ввод количества строк

m = Val(Text2.Text) 'Ввод количества столбцов

'Формирование строки подсказки для пользователя в окне InputBox

txt = "Введите", + Text2.Text +"элементов строки"

For i = 1 To n 'Цикл по количеству строк

x=InputBox(txt, "Ввод данных") 'Вывод окна InputBox

av = Split(x, " ") 'Ввод строки, состоящей из n значений

'элементов массива в переменную av

For j = 1 To n 'Цикл по количеству элементов в строке

a(i,j) = Val(av(j - 1)) 'Заполнение i-ой строки массива

Picture1.Print a(i,j)

Next j

Next i

End Sub