Задача 11. Ввод и вывод линейного массива.

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

 

Ввод массивас клавиатуры:

For i = 1 To 10

М(i) = InputBox("Введите элемент массива")

Next

 

Ввод массива с листа Excel (массив расположен на листе в диапазоне, например, A1:A10):

 

For i = 1 To 10

М(i)=Cells(i,1) ‘номер строки меняется в цикле, столбец первый (А)

Next

 

Вывод массива в VBA нагляднее всего реализовать непосредственно на лист Excel, например, в диапазон B 1: B 10:

 

For i = 1 To 10

Cells(i,2)= М(i) ‘номер строки меняется в цикле, столбец второй (В)

Next

 

Вывод массива с помощью оператора MsgBox :

 

For i = 1 To 10

MsgBox М(i)

Next

 

Задача 12. В массиве из 10 чисел найти максимальное значение.

Решение. Задача отличается от разобранной в Задаче 7 только тем, что вначале последовательность вводится в массив (одномерный), а затем анализируется: каждый элемент A(i) массива сравнивается с уже полученным на предыдущих шагах максимумом. В качестве начального значения можно взять любой из A(i), но удобнее A(1) – циклическую проверку можно тогда начать со второго элемента, сократив число шагов:

 

Sub maxmas()

Dim i, max, A(10) As Integer

For i = 1 To 10

A(i) = InputBox("Введите число – элемент массива")

Next

max = A(1)

For i = 2 To 10

If A(i) > max Then

max = A(i)

End If

Next

MsgBox (max)

End Sub

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

 

Sub maxm()

Dim i, max, A(10) As Integer

max = InputBox("Введите число –первый элемент массива")

For i = 2 To 10

A(i) = InputBox ("Введитечисло –элементмассива")

If A(i) > max Then

max = A(i)

End If

Next

MsgBox (max)

End Sub

 

Задача 13. Поменять местами первый положительный и первый отрицательный элементы массива А из 10 целых чисел.

Решение. Алгоритм состоит из четырех частей:

1) ввод массива,

2) поиск в нем первого положительного элемента,

3) поиск первого отрицательного элемента,

4) обмен их значений.

5) вывод полученного массива.

Для наглядности будем вводить массив с листа Excel (например, из диапазона А1:А10) и выводить результат на тот же лист (например, в диапазон В1:В10).

Поиск первого положительного элемента проведем, перебирая в цикле значения A. Как только встретится A(k)>0, нужно запомнить его индекс (номер k) и сразу выйти из этого цикла. Обратите внимание, что если продолжить цикл, то мы в результате получим номер не первого, а последнего положительного элемента массива.

Аналогично проводим поиск первого отрицательного элемента массива. Пусть это будет A(j). Индекс j запоминаем.

Теперь осталось обменять значения A(k) и A(j), используя переменную- посредника.

Вся программа выглядит так:

 

Sub obmen()

Dim i, j, k, rab, A(10) As Integer

For i = 1 To 10 ‘вводим массив из листа Excel:

A(i) = Cells(i, 1)

Next

For i = 1 To 10 ‘находим первый положительный элемент:

If A(i) > 0 Then

k = i

Exit For

End If

Next

For i = 1 To 10 ‘находим первый отрицательный элемент:

If A(i) < 0 Then

j = i

Exit For

End If

Next

rab = A(k) ‘меняем значения

A(k) = A(j)

A(j) = rab

For i = 1 To 10 ‘выводим массив налистExcel:

Cells(i, 2) = A(i)

Next

End Sub