Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

8996

.pdf
Скачиваний:
0
Добавлен:
25.11.2023
Размер:
2.12 Mб
Скачать

i = i + 1

Loop While Not IsEmpty(Cells(i, 1)) And Cells(i, 1) <> 2

MsgBox i – 1

End Sub

Оператор Do until-Loop выполняется до тех пор, пока «условие» имеет значение False. Синтаксис оператора Do until-Loop:

Do Until «условиие»

«блок_операторов»

[Exit Do]

«блок_операторов»

Loop

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

Sub Пример3()

Dim i As Integer

i = 1

Do Until IsEmpty(Cells(i, 1))

i = i + 1

Loop

MsgBox i – 1

End Sub

Операторы Do-Loop while и Do-Loop until выполняются как минимум один раз, т.к. сначала выполняется цикл, а затем проверяется его условие.

Оператор Exit Do

Оператор Exit Do обеспечивает досрочный выход из оператора цикла.

Можно прерывать ход выполнения не только циклов, но и процедур и функций.

Синтаксис оператора Exit Do:

Do

«блок_операторов»

61

[Exit Do]

«блок_операторов»

Loop While «условиие»

Do

«блок_операторов»

[Exit Do]

«блок_операторов»

Loop Until «условиие»

Практические задания

Написать программу, используя циклы с предусловием и постусловием в соответствии с вариантом. Вывод результатов реализовать в ячейки текущего листа. Значения переменных вводятся с клавиатуры.

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

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

3.Вычислять и выводить в ячейки рабочего листа члены арифметической прогрессии до тех пор, пока очередной член прогрессии не окажется большим 50. Первый член арифметической прогрессии равен 2,

разность равна 5;

4. Вычислять и выводить в ячейки рабочего листа члены геометрической

прогрессии до тех пор, пока очередной член прогрессии не окажется большим

250. Первый член геометрической прогрессии равен 3, знаменатель равен 4;

5.

Общий

член

последовательности

задан формулой: an

n2 / 5 .

Вычислить сумму n первых членов последовательности, меньших 75.

 

 

 

6.

Общий

член

последовательности

задан формулой: an

 

5n

.

 

 

 

 

 

 

 

n2 1

Вычислить сумму n первых членов последовательности, больших 1;

62

7. Общий член последовательности задан формулой:

n

2n 1 .

5

 

 

Суммировать первые n членов последовательности, до тех пор, пока сумма не окажется большей 100. Вывести значение суммы и последнего n-го члена последовательности;

8. Общий член последовательности задан формулой: a

 

 

n

n 4 .

n

 

 

3

 

 

 

 

Вычислять произведение первых n членов последовательности до тех пор, пока произведение не окажется большим 1000. Вывести значение произведения и последнего n-го члена последовательности;

9. Первый член арифметической прогрессии равен -50, разность равна 7.

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

10. Первый член арифметической прогрессии равен 90, разность равна -8.

Вычислить сумму всех положительных членов данной арифметической прогрессии.

Лабораторная работа 7. Одномерные массивы

Цель: овладеть навыками программирования с использованием одномерных массивов на языке VBA.

Теоретические сведения

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

Все элементы массива имеют одно и то же наименование ‒ наименование массива. К элементу массива можно обратиться, указав имя массива и индекс

(номер) этого элемента, записанный в круглых скобках и может быть числом,

переменной или выражением.

Например: А(10), В(I,J), SUM(1,J+5).

63

Если для выделения элемента массива нужен один индекс, то массив называется одномерным, два индекса ‒ двумерным. Число элементов массива называется длиной или размером массива. Одномерный массив называется вектором. Двумерный массив называется матрицей.

Объявление массивов

Для объявления массива используется оператор Dim. Синтаксис

оператора Dim:

Dim VarName([Subscripts]) [As Type]

VarName ‒ имя массива.

Subscripts ‒ измерение массива (Subscripts разделяются запятыми).

Синтаксис Subscripts:

[lower To] upper [,[lower To] upper]..

lower ‒ необязательный аргумент, который определяет нижний диапазон индекса массива;

upper ‒ необязательный аргумент, который определяет верхний предел

массива.

Type – тип данных из которых состоит массив.

Массивы в VBA могут быть фиксированного размера (статические) или динамические. У массива с фиксированным размером, заданный при его объявлении размер не изменяется. При объявлении такого массива в круглых скобках после его имени указывается верхняя граница массива. Нижняя граница массива по умолчанию равна нулю.

Пример объявления статического массива:

Dim Array (1 To 10) As Integer ‒ явное задание границ одномерного статического числового массива, состоящего из 10 элементов.

Dim A(9) As Integer ‒ объявление массива фиксированного размера, где массив с именем А имеет 10 элементов.

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

64

Пример: Dim К() As Integer

Изменение размерности динамического массива

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

когда этот массив используется, а затем освобождая ее.

В случае, если данные находящиеся в массиве больше не нужны поскольку есть необходимость переопределить размерность массива и разместить в нем другие данные, используется оператор ReDim.

Синтаксис оператора ReDim:

ReDim [Preserve] varname(subscripts) [As Type] [, varname(subscripts) [As Type]]

varname ‒ имя массива; subscripts ‒ размерность массива;

Type ‒ тип данных;

Preserve ‒ необязательный аргумент, который влияет на то что,

имеющиеся в массиве данные после изменения его размерности сохраняются.

Пример одномерного динамического массива: ReDim А(5).

ReDim Preserve А(I + 1) позволяет изменить размер массива, но при этом не потерять данные, при использовании вместе с оператором ReDim с

ключевого слова Preserve.

Пример использования оператора ReDim:

ReDim Preserve M(1 To 3) ‒ при сохранении содержимого массива изменяется размер массива М до 3-х элементов.

Ввод/вывод массивов

Ввод/вывод массива осуществляется поэлементно, а для этого нужно использовать цикл.

Пример ввода элементов массива с клавиатуры

For i=1 to 5

65

А(i)= InputBox(“Ввести элемент массива”)

Next

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

таблицы

For i = 1 To 5

S(i) = Worksheets("лист1").Cells(i, 1)

Next

Ввод элементов массива генератором случайных чисел ‒ Rnd[

(Number)].

Функция случайных чисел Rnd возвращает значения в диапазоне от 0 до

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

Randomize.

Пример: сформировать массив в диапазоне от 1 до 50.

Randomize()

For i=1 to 20

A(i)= Int ( (50-1+1) * Rnd) + 1)

Next

Вывод массива в ячейки электронной таблицы

Для вывода массива в ячейки электронной таблицы используется оператор Worksheets, в котором указывается имя листа и параметр Cells

определяет номер строки и столбца куда вводится массив. Пример ввода массива в ячейки электронной таблицы:

For i = 1 To 5

Worksheets("лист1").Cells(i, 2) = А(i)

Next

Обнуление числового массива

Любой числовой массив (статический или динамический) можно

очистить с помощью оператора Erase.

66

Пример обнуления массивов

Dim A(3,4) As String, B() As Variant

……

‘определение динамического массива

ReDim B(2,3)

……

‘очищение массива

Erase A

Erase B

В результате массивы будут возвращены в исходное состояние, т.е.

массив А будет иметь размерность (3,4), а динамический массив В не сохранит размерность ().

Другой способ обнуления динамического массива является определение с помощью оператора ReDim с той же размерностью.

Пример

Dim M() As Double

…….

'переопределение массива М

ReDim M(5, 6)

……

'очищение массива М

ReDim Massiv(5, 6)

Заполнение одномерного массива

Прежде чем приступить к работе с массивами его необходимо заполнить,

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

Пример заполнения одномерного массива случайными числами

Sub Одномерный_Массив()

Dim A(10) As Integer

67

For I = 1 To 10

A(I) = Int(Rnd * 100 + 1) 'Задание массива целыми числами от 1 до 100

Cells(i, j) = A(i, j)

Next j

Next i

Пример ввод данных в массив

‘ ввод данных в массив в цикле

Dim A(10) As Integer

For I = 0 To 10

A(I) = I + 2

Next I

' ввод элементов массива с явным указанием типа данных

Dim A() As Integer = { 1, 2, 3, 4, 5 }

Пример. Создайте лист «Лист 2» для сохранения результатов данной лабораторной работы. В одномерном массиве найти сумму элементов,

разделить элементы исходного массива на сумму, вывести результирующий массив. На листе с именем «Лист 2» представлены исходные данные (Рисунок

11).

Рисунок 11. Исходные данные примера Решение с использованием фиксированного массива:

Sub massivep()

Dim a(2 To 12) As Byte

Dim b(2 To 12) As Double

68

Dim i As Byte

Dim sum As Double

sum = o

For i = 2 To 12

a(i) = Worksheets("лист2").Cells(i, 1)

sum = sum + a(i)

Next

For i = 2 To 12

b(i) = a(i) / sum

Worksheets("лист2").Cells(i, 2) = b(i)

Next

End Sub

Решение задачи с использованием динамического массива:

Sub massiveD()

Dim a() As Byte

Dim b() As Double

Dim i As Byte

Dim sum As Double

ReDim a(2 To 12)

ReDim b(2 To 12)

sum = o

For i = 2 To 12

a(i) = Worksheets("лист1").Cells(i, 1)

sum = sum + a(i)

Next

For i = 2 To 12

b(i) = a(i) / sum

Worksheets("лист1").Cells(i, 3) = b(i)

Next

69

End Sub

Практические задания

Написать программу на языке VBA в соответствии с вариантом задания.

1.Дан массив из N вещественных чисел. Составить программный код подсчета числа элементов массива, которые принадлежат отрезку [1,2], иначе выдать сообщение «Таких элементов нет».

2.Дан массив из N вещественных чисел. Составить программный код следующей задачи: если последний элемент массива положительный,

заменить нулем каждый третий элемент массива, иначе выдать сообщение

«Все без изменений».

3.Дан массив из N целых чисел. Разработать программный код подсчета, сколько раз число пять встречается среди элементов данного массива, иначе сообщить: «Таких элементов нет».

4.Дан массив А из 10 целых чисел. Написать программу подсчета суммы элементов, расположенных между максимальным и минимальным элементами.

5.Дан массив случайных чисел М[10]. Написать программу, в

которой решается задача: в данном массиве все элементы, индексы которых нечётны, разделить на 10, а остальные поменять на противоположные.

6.Написать программу, в которой решается задача: в одномерном массиве из N чисел, вводимых с клавиатуры, поменять местами минимум и максимум.

7.Написать программу, в которой в одномерном массиве из N

случайных чисел из диапазона [20; 40] поменять местами пару элементов,

номера которых вводятся с клавиатуры.

8. Дан массив из N вещественных чисел. Написать программу, в

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

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]