Разработка программного модуля
Разработка программного модуля
Кафедра «Автоматизированные системы управления» Курсовая работа по дисциплине ВТиП Разработка программного модуля Введение Целью данной курсовой работы является разработка программного модуля, с помощью которого можно задать размерность квадратной матрицы, заполнить матрицу случайными целыми числами от 0 до 6 и вычислить: - сумму элементов, находящихся под главной диагональю, - сумму элементов, составляющих главную диагональ. Для разработки программы использован табличный процессор Excel и язык программирования Visual Basic for Application. В первом разделе, который называется «Постановка задачи», приведена математическая модель задачи, описаны входные и выходные данные, описана обработка ошибок. Во втором разделе, «Проектирование программного модуля», изображена структурная диаграмма программного модуля, разработана схема программного модуля и пользовательский интерфейс. В разделе «Реализация программного модуля» описан код программы, произведено описание используемых операторов и функций. Тестирование программного модуля приведено в четвертом разделе. Кроме того, дано заключение и приведён список использованных источников. 1. Постановка задачи 1.1 Математическая модель задачи Определение квадратной матрицы: квадратной матрицей n-го порядка называется матрица, состоящая из m строк и m столбцов. Главной диагональю квадратной матрицы называется диагональ, составленная из элементов a11 a22… amm . Способ нахождения суммы элементов квадратной матрицы, лежащих под главной диагональю: Необходимый результат получается при суммировании элементов в следующем порядке: а21 + а31 + а32 +…+ аi1 + ai2 + ai3 + ai(j-1) - суммируются элементы, начиная со второй строки, и, при увеличении строки на 1, число столбцов, содержащих нужные элементы, также увеличивается на 1. В кратком виде этот цикл выглядит так: i=f…m, где начальное f=2; j=1…(m-b), где начальное b=m-1. При каждой последующей итерации значение f увеличивается на 1, а значение b на 1 уменьшается. Сумму элементов диагонали матрицы можно получить при суммировании элементов, лежащих на пересечении одинаковых строки и столбца, т.е. если i=j. 1.2 Входные данные В данном курсовом проекте к входным данным относится размерность квадратной матрицы (значение m). Требования к входным данным: - значение m должно вводиться в числовой форме; - значение m должно быть целым, положительным числом больше нуля. 1.3 Выходные данные К выходным данным относятся: - вывод заполненной матрицы на форму; - вывод заполненной матрицы на лист Excel; - сумма элементов, находящихся под главной диагональю; - сумма элементов, составляющих главную диагональ. Требования к выходным данным: - выходные данные выводятся в числовом виде. 1.4 Обработка ошибок При выполнении программного модуля произведена обработка следующих ошибок: - в поле ввода размерности матрицы вводится нечисловое значение. В этом случае появляется сообщение об ошибке, которое имеет вид, представленный на рисунке 1: Рисунок 1 - Сообщение об ошибке, в случае нечислового ввода размерности матрицы - в поле ввода вводится дробное числовое значение. В этом случае появляется сообщение об ошибке, которое имеет вид, представленный на рисунке 2: Рисунок 2 - Сообщение об ошибке, в случае ввода дробного значения размерности матрицы - в поле ввода вводится отрицательное число, либо число равное нулю. В этом случае появляется сообщение об ошибке, которое имеет вид, представленный на рисунке 3: Рисунок 3 - Сообщение об ошибке, в случае ввода отрицательного, либо нулевого значения размерности матрицы После уведомления пользователя об ошибке поле ввода очищается, и курсор возвращается в это поле. 2. Проектирование программного модуля 2.1 Структурная диаграмма программного модуля Программа имеет структуру, показанную на рисунке 4: Рисунок 4 - Структурная диаграмма программного модуля В данной диаграмме UserForm_Initialize() - процедура инициализации пользовательской формы. CommandButton1_Click() - процедура, срабатывающая при нажатии кнопки «Заполнить матрицу», которая производит проверку правильности ввода размерности матрицы, заполнение матрицы и вывод её на пользовательскую форму. CommandButton2_Сlick() - процедура, срабатывающая при нажатии кнопки «Очистить», которая очищает форму. CommandButton3_Сlick() - процедура, срабатывающая при нажатии кнопки «Выйти», позволяющая пользователю завершить работу с программой. CommandButton4_Click() - процедура, срабатывающая при нажатии кнопки «О программе», которая даёт краткие сведения о программе и её разработчике. CommandButton5_Сlick() - процедура, срабатывающая при нажатии кнопки «Работать с Excel», позволяющая пользователю переключиться на работу с листом Excel. OptionButton1_Click() - процедура-переключатель, при выборе которого вычисляется сумма элементов, находящихся под главной диагональю. OptionButton2_Click() - процедура-переключатель, при выборе которого вычисляется сумма элементов, составляющих главную диагональ. 2.2 Разработка схемы программного модуля и ее описание Блок-схема процедуры заполнения квадратной матрицы представлена на рисунке 5: 1 2 3 4 5 6 7 8 9 Рисунок 5 - Схема программного модуля (Заполнение матрицы) Описание блок-схемы: 1 - ввод размера массива; 2 - проверка того, что введённый размер массива является числом; 3 - проверка того, что введённый размер массива является положительным числом, отличным от нуля; 4 - проверка того, что введённый размер массива является целым числом; 5 - задание динамического массива; 6 - цикл, который пробегает значения строк от 1 до заданного размера массива, с шагом равным по умолчанию 1; 7 - цикл, который пробегает значения столбцов от 1 до заданного размера массива, с шагом равным по умолчанию 1; 8 - тело цикла, которое заполняет массив случайными числами от 0 до 6; 9 - вывод результата в поле, предназначенное для вывода квадратной матрицы. Блок-схема процедуры для первого переключателя представлена на рисунке 6: 1 2 3 4 5 6 Рисунок 6 - Схема программного модуля (первый переключатель) Описание блок-схемы: 1 - задание начальных параметров для вычисления суммы элементов матрицы; 2 - цикл, который пробегает значения строк от f до заданного размера массива, с шагом равным по умолчанию 1; 3 - цикл, который пробегает значения столбцов от 1 до m-b, с шагом равным по умолчанию 1; 4 - вычисление суммы элементов, лежащих под главной диагональю; 5 - увеличение параметра f на 1 и уменьшение параметра b на 1, после окончания цикла для столбцов (блок 3), и переход к циклу для строк (блок 2); 6 - вывод результата в поле вывода суммы элементов. Блок-схема процедуры для второго переключателя представлена на рисунке 7: 1 2 3 4 5 6 Рисунок 7 - Схема программного модуля (второй переключатель) Описание блок-схемы: 1 - задание начальных параметров для вычисления суммы элементов матрицы; 2 - цикл, который пробегает значения строк от 1 до заданного размера массива, с шагом равным по умолчанию 1; 3 - цикл, который пробегает значения столбцов от 1 до заданного размера массива, с шагом равным по умолчанию 1; 4 - проверка условия i = j. В случае выполнения данного условия происходит переход к блоку 5, в противном случае - к блоку 3; 5 - вычисление суммы элементов, составляющих главную диагональю; 6 - вывод результата в поле вывода суммы элементов. Блок-схема процедуры для работы с листом Excel представлена на рисунке 8: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Рисунок 8 - Схема программного модуля (Работа с листом Excel) Описание блок-схемы: 1 - ввод размера массива; 2 - проверка того, что введённый размер массива является числом; 3 - проверка того, что введённый размер массива является положительным числом, отличным от нуля; 4 - проверка того, что введённый размер массива является целым числом; 5 - задание динамического массива; 6 - цикл, который пробегает значения строк от 1 до заданного размера массива, с шагом равным по умолчанию 1; 7 - цикл, который пробегает значения столбцов от 1 до заданного размера массива, с шагом равным по умолчанию 1; 8 - тело цикла, которое заполняет массив случайными числами от 0 до 6; 9 - вывод массива на лист Excel; 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.
|