Лабораторная работа № 15.
Циклические алгоритмы. Работа с массивами

Время выполнения

8 часов

Цель работы

Научиться использовать язык программирования Visual Basic for Applications (VBA) для разработки модулей в Excel на основе циклических алгоритмов.

Задачи лабораторной работы

После выполнения данной работы студент должен знать и уметь:
  • знать все операторы, используемые в программах;
  • уметь применять любые из изученных операторов для написания своих модулей;
  • уметь объяснить написанную программу.

Перечень обеспечивающих средств

Для обеспечения выполнения работы необходимо иметь компьютер со следующим математическим обеспечением: операционная система Windows XP, электронные таблицы Excel с приложением в виде языка Visual Basic for Applications.

Общие теоретические сведения

VBA – это язык объектно-ориентированного программирования.
Основными парадигмами являются объект, свойство, метод, событие, класс и семейство объектов.
Объект – это инкапсуляция данных вместе с кодом, предназначенным для их обработки.
Семейство – объект, содержащий несколько других объектов того же типа.
Классы – это проект, на основе которого будет создан объект, т.е. класс определяет имя объекта, его свойства и действия, над ним выполняемые. А каждый объект, свою очередь, является экземпляром класса. 
Методы – это действия, выполняемые над объектом.
Свойства – это атрибут объекта, определяющий его характеристики: размер, цвет, положение на экране или состояние (доступность, видимость).
События – это действия, распознаваемые объектом.

Пример 1. 
В массиве чисел М(10) очистить клетки с нулевыми значениями.

Запись программы в виде блок-схемы (рис. 1) и визуальное представление ввода данных и вывода результата (рис. 2): 
 Рисунок 1. Электронная таблица с исходными данными


 Рисунок 2. Результат работы программы

Пример 2.
Выявить, есть ли в массиве число 10? Если есть, на каком месте оно стоит (известно, что число может встретиться несколько раз).

Программный код
Sub Число()
Dim A As Variant
Dim i, k As Integer
i = 1
k = 0
A = Range("A1:A10")
For i = 1 To 10
    If A(i, 1) = 10 Then
    MsgBox ("Номер ячейки, содержащей число  10 - " & i)
    k = k + 1
End If
Next i
    MsgBox ("Число 10 встретилось следующее количество раз - " & k)
End Sub

Пример 3.
Вычислить произведение ряда: 

 
Программный код
Sub Main()
Dim x, n, res As Double
x = 3
n = 4
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
MsgBox "res=" & CStr(res)
End Sub
Private Sub CommandButton4_Click()
Dim x, n, res As Double
x = Cells(36, 1)
n = Cells(36, 2)
res = 1
For i = 2 To n
res = res * (i * x / (2 * i - 1))
Next i
Cells(38, 2) = res
End Sub

Визуальное представление ввода данных и вывода результата (рис. 3): 
 Рисунок 3. Результат работы программы

Пример 4.
Найти максимальное значение из значений элементов последовательности x1, x2, …, x20 (одномерного массива), используя оператор do while…loop

Программный код
Private Sub CommandButton5_Click()
Dim x(20) As Double
Dim res, res1 As Double
i = 1
res = 0
Do While i < 20
x(i) = Cells(44 + i, 1)
If x(i) > res Then res = x(i)
i = i + 1
Loop
Cells(47, 4) = res
End Sub

Визуальное представление ввода данных и вывода результата (рис. 4): 
 Рисунок 4. Результат работы программы

Пример 5.
Задан двумерный массив F(4 to 85, 2 to 6). Найти сумму элементов этого массива.

Программный код
Private Sub CommandButton1_Click()
Dim f(6) As Integer
For j = 4 To 8
res = 0
For i = 2 To 6
f(i) = Cells(j, i)
res = res + f(i)
Next i
Cells(j, 7) = res
Next j
End Sub

Пример 6.
Найти в процедуре сумму в каждом столбце.

Программный код
Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer)
Dim i, j, k(2) As Integer
For j = 0 To m
k(j) = 0
For i = 0 To n
k(j) = k(j) + x(i, j)
Next i
MsgBox "k(j)=" & CStr(k(j))
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 2) As Integer
Dim k(2) As Integer
n = 4
m = 2
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m
End Sub

Пример 7.
В процедуре найти сумму элементов 1 и 3 строки и записать их на место элементов 1 строки.

Программный код
Sub kol(ByRef x() As Integer, ByVal n As Integer, ByVal m As Integer, k() As Integer)
Dim i, j As Integer
For j = 0 To m
x(1, j) = x(1, j) + x(3, j)
Next j
End Sub
Sub commandbutton1_click()
Dim i, j, n, m, x(4, 4) As Integer
Dim k(2) As Integer
n = 4
m = 4
For i = 0 To n
For j = 0 To m
x(i, j) = Cells(i + 1, j + 1)
Next j
Next i
kol x, n, m, k
For j = 0 To m
For i = 0 To n
Cells(i + 7, j + 1).Value = x(i, j)
Next i
Next j
End Sub

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

Технология выполнения работы
  1. Разработать алгоритм для написания программы в виде блок-схемы.
  2. Написать программу.
  3. Протестировать ее с разными исходными данными.

Содержание отчета

  1. Цель работы, условие задачи
  2. Алгоритм в виде блок-схемы.
  3. Исходный текст программы.
  4. Вводимые данные и результаты.
  5. Фрагменты экрана с диалоговыми окнами Excel.
  6. Результат работы программы должен иметь наглядный вид.

Вопросы для защиты работы

  1. Как описываются массивы переменных?
  2. Сколько операций цикла DO Вы знаете?
  3. Как выглядит оператор цикла FOR?
  4. Указать вид оператора DO, который выполняется, пока условие дает истину.
  5. Указать вид оператора DO, который выполняется, пока условие дает ложь.
  6. Можно ли прервать выполнение оператора FOR принудительно?