Разработка программного модуля, который находит сумму угловых элементов матрицы и сумму элементов, находящихся над главной диагональю
Разработка программного модуля, который находит сумму угловых элементов матрицы и сумму элементов, находящихся над главной диагональю
Содержание Введение Постановка задачи Проектирование программного модуля Реализация программного модуля Тестирование программного модуля Заключение Список использованных источников Введение Целью данной курсовой работы является разработка программного модуля который находит сумму угловых элементов и сумму элементов, находящихся над главной диагональю. В первом разделе рассматривается математическое описание, представлены входные и выходные данные, обработка ошибок. Во втором разделе содержится структурная диаграмма программного модуля, а также блок-схема алгоритма программы с подробным описанием всех ее блоков. В третьем разделе представлен код программы на языке VBA и содержится описание всех использованных в написании программного модуля операторов языка VBA. В четвертом разделе приводится тестирование программного модуля. Затем дано заключение и приведен список использованных источников. 1. Постановка задачи 1.1 Математическая модель задачи Для выполнения поставленной задачи необходимо составить программный модуль, который находит либо сумму угловых элементов, либо сумму элементов, расположенных над главной диагональю, в зависимости от действия пользователя. Если предположить, что размерность квадратной матрицы равна n, то: 1. Элемент матрицы A=a(i,j) будет угловым, если i=n либо j=n 2. Элемент матрицы A=a(i,j) будет находится над главной диагональю, если j будет больше i. Т.е. число столбцов должно превышать число строк. 1.2 Входные данные К вводным данным для данного курсового проекта относятся: - ввод значения n - размерности матрицы; Требования к входным данным: -n должно быть целым числом -n должно быть положительным числом -n должно быть больше либо равно двум - ввод исходных данных осуществлять в соответствующие поля ввода формы. 1.3 Выходные данные К выходным данным для данного курсового проекта относятся: - вывод на форму заполненной матрицы; Требования к выходным данным: - выходные данные выводятся в числовом виде. 1.4 Обработка ошибок При составлении программы важно, чтобы сама программа анализировала данные, которые вводит пользователь, и в случае ввода некорректных данных, либо информировала пользователя, либо пыталась программно исправить ошибки, что более предпочтительно. Таким образом, в случае ввода некорректных данных имеется два варианта развития событий: 1. Предотвращение ошибок: программно анализировать вводимые или вычисляемые данные и в случае, если они могут приводить к ошибке, информировать пользователя о том, что введенные им данные ошибочны и могут привести к неправильной работе программы. 2. Обработка ошибок: в случае появления ошибки, программа замечает ее и пытается самостоятельно исправить ее, без ведома пользователя. При создании приложений надо сочетать оба подхода, применяя в каждом конкретном случае и для каждой возможной ошибки тот, который кажется разработчику наиболее эффективным. Предусмотрена возможность прекращения работы программы и выдачи соответствующего сообщения в случае неправильных действий пользователя. 2. Проектирование программного модуля 2.1 Структурная диаграмма программного модуля Структурная диаграмма программного модуля представлена на рисунке 1. Рисунок 1 - Структурная диаграмма программного модуля UserForm1_Initialize() - процедура начальной инициализации пользовательской формы. ButtonCreate_click() - процедура, срабатывающая при нажатии кнопки «Заполнить матрицу», которая производит проверку исходных данных и создание матрицы матрицы. ButtonClear_click() - процедура, срабатывающая при нажатии кнопки «Очистить», которая очищает форму. ButtonExit_click() - процедура, срабатывающая при нажатии кнопки «Выход», которая выходит из программы. BtnTask1_click() - процедура, срабатывающая при нажатии кнопки “задание 1”. BtnTask2_click() - процедура, срабатывающая при нажатии кнопки “задание 2”. BtnExcel_click() - поцедура, срабатывающая при нажатии кнопки “На лист Excel”, которая прячет пользовательскую форму и выводит данные, представленные на листе Excel. 2.2 Разработка схемы программного модуля 2.2.1 Нахождение суммы угловых элементов Схема программного модуля для нахождения угловых элементов представлена на рисунке 2. Рисунок 2 2.2.2 Нахождение суммы элементов, находящихся над главной диагональю Нахождение суммы элементов, находящихся над главной диагональю представлено на рисунке 3. Рисунок 3 - Нахождение суммы элементов, расположенных выше главной диагонали Описание блок-схемы 1: Блок 1 - начало цикла; Блок 2 - чтение размерности матрицы, заданной пользователем; Блок 3-5 - цикл, в котором находится сумма угловых элементов; Блок 4-5 - подцикл, в котором проверяется строка матрицы на наличие угловых элементов; Блок 6 - записываем найденные данные в ячейку листа Excel; Блок 7 - выводим найденное значение на экран. Описание блок-схемы 2: Блок 1 - начало цикла; Блок 2 - чтение размерности матрицы, заданной пользователем; Блок 3-5 - цикл, в котором находится сумма элементов над главной диагональю; Блок 4-5 - подцикл, в котором проверяется строка матрицы на наличие элементов, расположенных над главной диагональю; Блок 6 - записываем найденные данные в ячейку листа Excel; Блок 7 - выводим найденное значение на экран. 2.3 Разработка пользовательского интерфейса При разработке интерфейса необходимо придерживаться следующих принципов: соблюдать стандарты при выборе цветовой палитры и элементов ввода-вывода; интерфейс является основным, а не процессы ввода-вывода; состав и форма представления входных и выходных данных должны быть стандартными. Цель создания эргономичного интерфейса состоит в том, чтобы отобразить информацию настолько эффективно насколько это возможно для человеческого восприятия и структурировать отображение на дисплее таким образом, чтобы привлечь внимание к наиболее важным единицам информации. Основная же цель состоит в том, чтобы минимизировать общую информацию на экране и представить только то, что является необходимым для пользователя. Интерфейс для программного модуля разработанного в данном курсовом проекте представлен на рисунке 5. Рисунок 4 - Пользовательская форма: 1 - TextBoxInput - поле для ввода значения n, размерности матрицы; 2 - ButtonCreate - кнопка, при нажатии которой осуществляется заполнение матрицы; 3 - ButtonClear-кнопка, при нажатии которой осуществляется очистка всех полей формы; 4 - BtnTask1 - кнопка, при нажатии которой программа находит сумму угловых элементов матрицы; 5 - BtnTask2 - кнопка, при нажатии которой программа находит сумму элементов матрицы, находящихся над верхней диагональю; 6 - BtnExcel - кнопка, при нажатии которой пользовательская форма скрывается, и отображаются данные на листе Excel; 7 - Кнопка, при нажатии которой осуществляется выход из программного модуля; 8 - Поле для вывода заполненной матрицы 3. Реализация программного модуля 3.1 Программный код Программа разработана в приложении Microsoft Excel на языке программирования Visual Basic For Application. Private Sub BtbTask2_Click() Dim a(1 To 100, 1 To 100) As Variant Dim summ As Integer n = TextBoxInput.Value For i = 1 To n For j = 1 To n a(i, j) = Cells(i, j) summ = summ + Check_Top_Elements(a(i, j), i, j) Next j Next i m = Application.CountA(Range("A:A")) Cells(m + 3, 1) = "Сумма элементов над главной диагональю: " + CStr(summ) TextBoxOutput2.Value = CStr(summ) End Sub Private Sub BtnTask1_Click() Dim a(1 To 100, 1 To 100) As Variant Dim summ As Integer n = TextBoxInput.Value For i = 1 To n For j = 1 To n a(i, j) = Cells(i, j) summ = summ + Check_Angular_Elements(a(i, j), i, j) Next j Next i m = Application.CountA(Range("A:A")) Cells(m + 2, 1) = "Сумма угловх элементов: " + CStr(summ) TextBoxOutput.Value = summ End Sub Private Sub ButtonClear_Click() ListBoxOutput.Clear End Sub Private Sub ButtonCreate_Click() Dim n As Variant Dim m As Variant Dim strng(100) As String Dim a(100, 100) As Variant Dim space As String 'пробел, который разделяет матрицу If IsNumeric(TextBoxInput.Value) = False Then MsgBox "Вы ввели неправильные данные Подсказка: данные должны быть представленны числом.", _ vblnformation, "Ошибка ввода" Else n = CInt(TextBoxInput.Value) 'если пользователь ввел дробное число, то округляем до целого If n = 1 Then MsgBox "Размерность не может быть равной еденице", vblnformation, "Ошибка задания матрицы" End If If n <= 0 Then If n < 0 Then MsgBox "Размерность не может быть отрицательной", vblnformation, "Ошибка задания матрицы" TextBoxInput.Value = Abs(n) End If If n = 0 Then MsgBox "Размерность не может быть равной нулю", vblnformation, "Ошибка задания матрицы" End If End If For i = 1 To 100 For j = 1 To 100 Cells(i, j) = "" Next j Next i ListBoxOutput.Clear For i = 1 To n For j = 1 To n a(i, j) = Int((20 - 0 + 1) * Rnd + 0) 'генерируем случайное число от 1 до 20 Cells(i, j) = a(i, j) If a(i, j) <= 9 Then 'если число представлено одной цифрой, то пробел между ним и след.числом больше space = " " Else 'в противном случае пробел меньше. Это делается, чтобы числа располагались одно под одним space = " " End If strng(i) = strng(i) + CStr(a(i, j)) + space 'скливаем все значения в i строку Next j ListBoxOutput.AddItem (strng(i)) 'добавляем строку на поле вывода Next i End If End Sub Private Sub ButtonExit_Click() 'при нажатии на кнопку выхода, закрываем программу Application.Quit End Sub Private Sub BtnExcel_Click() UserForm1.Hide Application.Visible = True End Sub Private Sub UserForm_Initialize() Application.Visible = False Dim a(1 To 100, 1 To 100) Dim space As String Dim strng(10) As String End Sub Function Check_Angular_Elements(a, i, j) 'проверяет, является ли элемент матрицы угловым, если да, то возвращает его If (i = 1) And (j = 1) Then Check_Angular_Elements = a End If If (i = 1) And (j = Int(TextBoxInput.Value)) Then Check_Angular_Elements = a End If If (i = Int(TextBoxInput.Value)) And (j = 1) Then Check_Angular_Elements = a End If If (i = Int(TextBoxInput.Value)) And (j = Int(TextBoxInput.Value)) Then Check_Angular_Elements = a End If End Function Function Check_Top_Elements(a, i, j) 'проверяет, находится ли элемент над гл. диагональю If j > i Then Check_Top_Elements = a End If End Function 3.2 Описание использованных операторов и функций Private Используется для описания, которые доступны только в модуле, в котором выполняется описание. MsgBox Выводит на экран диалоговое окно, содержащее сообщение, MsgBox устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Оператор присвоения присваивает значение выражения переменной, константе или свойству объекта. Оператор присвоения всегда включает знак равенства (=). If Then Else Оператор условного перехода. Если условие принимает значение True, то выполняется инструкция (или инструкции) после Then если False, то выполняется инструкция (или инструкции) после Else. Ветвь Else является необязательной. If Условие Then [Инструкции] [ElseIf Условие-n Then [Инструкции elseif] [Else] [Инструкции else] End If. Оператор For-Next. Синтаксис: For Счётчик = Начало То Конец [Step Шаг] [Инструкции] [Exit For] [Инструкции] Next [Счётчик] Повторяет выполнение группы инструкций, пока Счётчик изменяется от начального до конечного значения с указанным шагом. Если Шаг не указан, то он полагается равным 1. Альтернативный способ выхода из цикла предоставляет инструкция Exit For. Инструкция Dim Предназначена для описания типа данных переменной на уровне модуля или процедуры, а также для описания объектного типа переменных, синтаксис: Dim Имя переменной Аs Тип переменной [Имя переменной Аs Тип переменной ] Типы переменных: Integer, Long, Single, Double, String. Int(x) - функция округления переменной Х. IsNumeric (x) - проверка является ли переменная Х числом. Если IsNumeric (x) = True, то переменная Х является числом. Если IsNumeric (x) = False, то переменная Х не является числом. Abs (x) - возвращает модуль числа. 4. Тестирование программного модуля Тестирование этого программного модуля заключается в проверке правильности ввода данных, которые ввел пользователь. Результатом ввода корректных данных является правильное выполнение программы: вывод матрицы, заданной пользователем и вычисление сумм элементов. Сначала проверим программный модуль на отлавливание и обработку ошибок пользователя. При вводе в поле параметра n не числового выражения выводится окно представленное на рисунке 5. Рисунок 5 - Введено не числовое значение параметра m Если пользователь ввел размерность матрицы, равную нулю, либо не ввел данные (по умолчанию в VBA пустое значение автоматически приравнивается нулю), то выводится окно, представленное на рисунке 6. Рисунок 6 - Пользователь указал размерность матрицы, равную нулю При вводе в поле параметра n отрицательного значения, выводится окно, представленное на рисунке 7. Рисунок 7 - Введено отрицательное значение параметра n Если пользователь указал размерность матрицы равную единице, то, теоретически, это не является ошибкой, т.к. если исходить из определения, то любое действительное число - это матрица, размерностью 1*1. Но в условии данной задачи такая матрица не представляет интереса, поэтому рекомендуется поставить ограничение и на размерность равную единице. Выводимое окно представлено на рисунке 8. Рисунок 8 - Введенное значение параметра n равно 1 Кроме этого предусмотрено самостоятельное исправление ошибок. Например, если пользователь введет отрицательное значение, то программа автоматически исправит его на положительное. Если пользователь введет дробное число, то программа сама отбросит дробную часть. Проверим правильность работы программного модуля заполнив матрицу, размерность 3*3 и 5*5. Рисунок -9 - заполнение матрицы, размерностью 3*3 Рисунок -10 - заполнение матрицы, размерностью 5*5 Теперь проверим выполнение поставленных задач. Рисунок 11 - корректное выполнение поставленных задача Как видно из рисунков 9 ,10 ,11 программный модуль, разработанный в данном курсовом проекте, работает правильно и без сбоев. Заключение Согласно заданию был разработан программный модуль, осуществляющий заполнение матрицы А(n,n), которую задает пользователь, чтение заданной матрицы с листа Excel и подсчета суммы угловых элементов и элементов над верхней диагональю. При тестировании программ никаких отклонений не обнаружено: каждая функция корректно выполняет все операции. Таким образом, можно сделать вывод о том, что поставленная задача выполнена: на языке программирования Visual Basic for Application созданы программы, с помощью которых можно заполнить случайными числами квадратную матрицу размером n x n, найти сумму ее диагональных элементов и элементов над главной диагональю. В программе предусмотрена обработка ошибок, что обеспечивает бесперебойную работу программы. Задание на курсовой проект выполнено полностью. Список использованных источников Выгодский М.Я., “Справочник по высшей математике”, Москва - 1982 г., 323 с. 2. Гутер Р.С., Овчинский Б.В. Элементы числового анализа и математической обработки результатов опыта - М.: “Наука”, 1970 г. - 432 с. 3. Гаранев А.Ю. Самоучитель VBA - СПб.: БХВ - Санкт-Петербург, 2000 г. - 512. 4. Ракитин В.И. “Практическое руководство по методам программного вычисления с приложением для ПК”. - М.: “Высшая школа”, 1998 г. - 383.
|