Разработка программного модуля который находит сумму угловых элементов матрицы и сумму элементов

Содержание



Введение

Постановка задачи

Проектирование программного модуля

Реализация программного модуля

Тестирование программного модуля

Заключение

Список использованных источников


Введение



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

		В первом разделе рассматривается математическое описание, представлены входные и выходные данные, обработка ошибок. Во втором разделе содержится структурная диаграмма программного модуля, а также блок-схема алгоритма программы с подробным описанием всех ее блоков. В третьем разделе представлен код программы на языке 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. 





UserFrom1

UserFrom1_Initialize()

ButtonCreate_Click()

ButtonClear_Click()

BtnTask1_Click()

BtnTask2_Click()

BtnExcel_Click()

ButtonExit_Click()

Рисунок 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.





Начало

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)

summ

m = Application.CountA(Range("A:A"))

Cells(m + 2, 1) = "Сумма угловх элементов: " + CStr(summ)

Выводим сумму угловых элементов

Конец

1

2

3

4

5

6

7

Рисунок 2


2.2.2 Нахождение суммы элементов, находящихся над главной диагональю 

Нахождение суммы элементов, находящихся над главной диагональю представлено на рисунке 3.



Начало

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)

summ

m = Application.CountA(Range("A:A"))

Cells(m + 3, 1) = "Сумма угловх элементов: " + CStr(summ)

Выводим сумму элементов над главной диагональю

Конец

Рисунок 3 – Нахождение суммы элементов, расположенных выше главной диагонали



Описание блок-схемы 1:

Блок 1 – начало цикла;

Блок 2 – чтение размерности матрицы, заданной пользователем;

Блок 3-5 – цикл, в котором находится сумма угловых элементов;

Блок 4-5 – подцикл, в котором проверяется строка матрицы на наличие угловых элементов;

Блок 6 – записываем найденные данные в ячейку листа Excel;

Блок 7 – выводим найденное значение на экран.

Описание блок-схемы 2:

Блок 1 – начало цикла;

Блок 2 – чтение размерности матрицы, заданной пользователем;

Блок 3-5 – цикл, в котором находится сумма элементов над главной диагональю;

Блок 4-5 – подцикл, в котором проверяется строка матрицы на наличие элементов, расположенных над главной диагональю;

Блок 6 – записываем найденные данные в ячейку листа Excel;

Блок 7 – выводим найденное значение на экран.

2.3 Разработка пользовательского интерфейса

При разработке интерфейса необходимо придерживаться следующих принципов:

соблюдать стандарты при выборе цветовой палитры и элементов ввода-вывода;

интерфейс является основным, а не процессы ввода-вывода;

	состав и форма представления входных и выходных данных должны быть стандартными. 

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

Интерфейс для программного модуля разработанного в данном курсовом проекте представлен на рисунке 5.




7

6

5

4



3

2

1

8Рисунок 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.