10 – задание начальных параметров для вычисления суммы элементов матрицы, расположенных под главной диагональю;
11 – цикл, который пробегает значения строк от f до заданного размера массива, с шагом равным по умолчанию 1;
12 – цикл, который пробегает значения столбцов от 1 до m-b, с шагом равным по умолчанию 1;
13 – вычисление суммы элементов, лежащих под главной диагональю;
14 – увеличение параметра f на 1 и уменьшение параметра b на 1, после окончания цикла для столбцов (блок 12), и переход к циклу для строк (блок 11);
15 – вывод суммы элементов, лежащих под главной диагональю на лист Excel;
16 – задание начальных параметров для вычисления суммы элементов матрицы, составляющих главную диагональ;
17 – цикл, который пробегает значения строк от 1 до заданного размера массива, с шагом равным по умолчанию 1;
18 – цикл, который пробегает значения столбцов от 1 до заданного размера массива, с шагом равным по умолчанию 1;
19 – проверка условия i = j. В случае выполнения данного условия происходит переход к блоку 5, в противном случае – к блоку 3;
20 – вычисление суммы элементов, составляющих главную диагональю;
21 – вывод суммы элементов, составляющих главную диагональ на лист Excel.
2.3 Разработка пользовательского интерфейса.
Пользовательский интерфейс (ПИ) программы - это совокупность элементов, позволяющих пользователю программы управлять ее работой и получать требуемые результаты, т.е. это диалог между компьютером и пользователем.
Интерфейс для программного модуля, разработанного в данном курсовом проекте представлен на рисунке 9:
Рисунок 9 - Вид пользовательской формы: 1 – поле для ввода размерности квадратной матрицы; 2 – поле для вывода суммы элементов матрицы, в зависимости от выбранного переключателя; 3 – переключатель, при выборе которого вычисляется сумма элементов матрицы, находящихся под главной диагональю; 4 – переключатель, при выборе которого вычисляется сумма элементов матрицы, составляющих главную диагональ; 5 – кнопка, при нажатии которой происходит заполнение матрицы; 6 – кнопка, которая осуществляет очистку всех полей формы; 7 – кнопка, осуществляющая выход из программы; 8 – кнопка, при нажатии которой появляется краткая информация о программе; 9 – кнопка, позволяющая пользователю переключиться на работу с листом Excel; 10 - поле для вывода заполненной матрицы
3. Реализация программного модуля
3.1 Код программы
Dim summa1 As Double
Dim summa2 As Double
Dim a() As Double
Dim m As Variant
‘задаём начальные параметры при инициализации формы:
Private Sub UserForm_Initialize()
Application.Visible = False
UserForm1.Caption = "Курсовой проект"
CommandButton1.Default = True
TextBox1.SetFocus
End Sub
‘процедура заполнения матрицы:
Private Sub CommandButton1_Click()
m = TextBox1.Text
If IsNumeric(TextBox1.Text) = False Then
MsgBox "Размерность матрицы должна задаваться числом", 16, "Ошибка ввода"
TextBox1.Text = ""
TextBox1.SetFocus
Exit Sub
End If
If m <= 0 Then
MsgBox "Размерность матрицы задаётся положительным числом отличным от нуля ", 16,
"Ошибка ввода"
TextBox1.Text = ""
TextBox1.SetFocus
Exit Sub
End If
m = CDbl(m)
If m <> Int(m) Then
MsgBox " Размерность матрицы должна задаваться целым числом ", 16, " Ошибка ввода "
TextBox1.Text = ""
TextBox1.SetFocus
Exit Sub
End If
ReDim a(1 To m, 1 To m)
For i = 1 To m
For j = 1 To m
a(i, j) = Int((7 * Rnd) + 0)
Next j
Next i
With ListBox1
ColumnCount = m
List = a
End With
End Sub
'процедура очистки пользовательской формы:
Private Sub CommandButton2_Click()
OptionButton1.Value = False
OptionButton2.Value = False
TextBox1.Text = ""
TextBox2.Text = ""
ListBox1.Clear
TextBox1.SetFocus
End Sub
'процедура выхода из программы:
Private Sub CommandButton3_Click()
UserForm1.Hide
Application.Quit
End Sub
' вызов краткой информации о программе:
Private Sub CommandButton4_Click()
MsgBox "Программа для заполнения случайными числами" & Chr(13) & _
"от 0 до 6 квадратной матрицы, размерностью" & Chr(13) & _
"задаваемой пользователем, и вычисления суммы" & Chr(13) & _
"элементов матрицы, в зависимости от выбрано-" & Chr(13) & _
"го переключателя." & Chr(13) & _
" Разработчик: Логунов А.П..", 48, "О программе"
End Sub
'процедура вычисления суммы элементов, расположенных под главной диагональю:
Private Sub OptionButton1_Click()
summa1 = 0
f = 2
b = m - 1
For i = f To m
For j = 1 To m - b
summa1 = summa1 + a(i, j)
Next j
f = f + 1
b = b - 1
Next i
TextBox2.Text = summa1
End Sub
'процедура вычисления суммы элементов, составляющих главную диагональ:
Private Sub OptionButton2_Click()
summa2 = 0
For i = 1 To m
For j = 1 To m
If i = j Then
summa2 = summa2 + a(i, j)
End If
Next j
Next i
TextBox2.Text = summa2
End Sub
'процедура для работы с Excel:
Private Sub CommandButton5_Click()
Application.Visible = True
Cells.Select
Selection.ClearContents
Range("A1").Select
UserForm1.Hide
m = InputBox("Задайте размерность матрицы", "Окно ввода")
If IsNumeric(m) = False Then
MsgBox ""Размерность матрицы должна задаваться числом", 16, "Ошибка ввода"
Exit Sub
End If
If m <= 0 Then
MsgBox "Размерность матрицы задаётся положительным числом отличным от нуля ", 16,
"Ошибка ввода"
Exit Sub
End If
m = CDbl(m)
If m <> Int(m) Then
MsgBox " Размерность матрицы должна задаваться целым числом ", 16, " Ошибка ввода "
Exit Sub
End If
Cells(5, 1) = "Матрица размерностью n=" & m & ":"
ReDim a(1 To m, 1 To m)
For i = 1 To m
For j = 1 To m
a(i, j) = Int((7 * Rnd) + 0)
Cells(i + 5, j) = a(i, j)
Next j
Next i
summa1 = 0
f = 2
b = m - 1
For i = f To m
For j = 1 To m - b
summa1 = summa1 + a(i, j)
Next j
f = f + 1
b = b - 1
Next i
Cells(2, 1) = "Сумма элементов под главной диагональю =" & summa1
summa2 = 0
For i = 1 To m
For j = 1 To m
If i = j Then
summa2 = summa2 + a(i, j)
End If
Next j
Next i
Cells(3, 1) = " Сумма элементов составляющих главную диагональ =" & summa2
Select Case MsgBox("Вернуться к UserForm?", vbYesNo, "Окно возврата")
Case vbYes
Application.Visible = False
TextBox1.SetFocus
UserForm1.Show
Case vbNo
End Select
End Sub
3.2 Описание использованных операторов и функций
Dim Имя_переменной As Тип_переменной – синтаксис описания типа переменной;
Private – указывает, что процедура Sub доступна для всех других процедур только того модуля, в котором она описана;
If Условие Then [Инструкция] [Else Инструкции_else] – оператор условного перехода. Если условие принимает значение True, то выполняется инструкция Then, если False, то выполняется инструкция_else. Ветвь Else является необязательной;
IsNumeric(переменная) – функция, проверяющая является ли переменная числовым значением;
MsgBox (сообщение, [кнопка], [заголовок])- выводит на экран диалоговое окно, содержащее сообщение;
CDbl() – функция преобразования считываемых данных в числовой формат типа Double, т.к. числа, вводимые в текстовую область формы, воспринимаются как текст, а не как число.
Int() – функция, которая возвращает целые числовые значения;
ReDim <имя массива>(<задаётся размерность массива>) – функция задания динамического массива;
For Счетчик = Начало To Конец [Step Шаг]
[Инструкции]
Next Счетчик – повторяет выполнение группы инструкций, пока Счетчик изменяется от начального значения до конечного с указанным шагом. Если шаг не указан, то он полагается равным 1;
Rnd – функция, которая служит для генерации случайных чисел;
With Объект
[инструкции]
End With – позволяет выполнить последовательность инструкций над Объектом не повторяя его имени;
ColumCount – устанавливает число столбцов в списке;
Clear – очистка;
SetFocus – возвращает курсор в указанное поле;
InputBox () – выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле;
Select Case Выражение
Case список выражений
[инструкции]
Case Else
[инструкции Else]
End Select – выполняет одну из нескольких групп инструкций в зависимости от некоторого выражения.
4. Тестирование программного модуля
Ниже приведён пример работы программного модуля. Для этого ввели в поле ввода размерность матрицы равную 5. При нажатии кнопки «Заполнить матрицу» в окне вывода появилось квадратная матрица пятого порядка, заполненная случайными числами от 0 до 6, что представлено на рисунке 10:
Рисунок 10 - Вид пользовательской формы с заполненной матрицей
При выборе первого переключателя определяется сумма элементов, находящихся под главной диагональю матрицы. При выборе второго переключателя – сумма элементов матрицы, составляющих главную диагональ.
При нажатии кнопки «о программе» появляется сообщение с краткой информацией о программе.
При нажатии кнопки «Работать с Excel» появляется диалоговое окно, в котором задаётся размерность матрицы.
При нажатии кнопки «Оk» на листе Excel появляется результат, который представлен на рисунке 11:
Рисунок 11 – Лист Excel с результатом
Диалоговое окно «окно возврата» позволяет пользователю вернуться к работе с пользовательской формой.
Как видно из приведенного примера программа является полностью работоспособной.
Заключение
В данном курсовом проекте с помощью языка программирования Visual Basic for Application был разработан программный модуль, который позволяет: задавать квадратную матрицу и программно заполнять её случайными числами от 0 до 6; вычислять сумму элементов находящихся под главной диагональю; вычислять сумму элементов составляющих главную диагональ. Был предусмотрен режим работы с листом Excel.
В программе произведена обработка возможных ошибок, что облегчает пользователю работу с программой.
В ходе тестирования программа показала себя полностью работоспособной. Следовательно, поставленную задачу можно считать выполненной.
Список использованных источников
1. Гарнаев А.Ю. Самоучитель VBA. – СПб.: БХВ – Санкт-Петербург, 2000. – 512 с.
2. Гарнаев А.Ю. Самоучитель VBA. – СПб, БХВ – Санкт-Петербург, 2002.
3. MS OfficeXP: Разработка приложений / Под редакцией Ф.А. Новикова. СПб.: БХВ – Санкт-Петербург, 2003.