Реферат: Разработка программного модуля
Кафедра «Автоматизированные системыуправления»
Курсовая работа
по дисциплине ВТиП
Разработка программного модуля
Введение
Целью данной курсовойработы является разработка программного модуля, с помощью которого можно задатьразмерность квадратной матрицы, заполнить матрицу случайными целыми числами от0 до 6 и вычислить:
— сумму элементов,находящихся под главной диагональю,
— сумму элементов,составляющих главную диагональ.
Для разработки программыиспользован табличный процессор Excel и язык программирования Visual Basic forApplication.
В первом разделе, которыйназывается «Постановка задачи», приведена математическая модель задачи, описанывходные и выходные данные, описана обработка ошибок.
Во втором разделе,«Проектирование программного модуля», изображена структурная диаграммапрограммного модуля, разработана схема программного модуля и пользовательскийинтерфейс.
В разделе «Реализацияпрограммного модуля» описан код программы, произведено описание используемыхоператоров и функций.
Тестирование программногомодуля приведено в четвертом разделе.
Кроме того, данозаключение и приведён список использованных источников.
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:
/>
/> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> />
Рисунок 9 — Видпользовательской формы: 1 – поле для ввода размерности квадратной матрицы; 2 –поле для вывода суммы элементов матрицы, в зависимости от выбранногопереключателя; 3 – переключатель, при выборе которого вычисляется суммаэлементов матрицы, находящихся под главной диагональю; 4 – переключатель, привыборе которого вычисляется сумма элементов матрицы, составляющих главнуюдиагональ; 5 – кнопка, при нажатии которой происходит заполнение матрицы; 6 –кнопка, которая осуществляет очистку всех полей формы; 7 – кнопка,осуществляющая выход из программы; 8 – кнопка, при нажатии которой появляетсякраткая информация о программе; 9 – кнопка, позволяющая пользователюпереключиться на работу с листом Excel; 10 — поле для вывода заполненнойматрицы
3. Реализацияпрограммного модуля
3.1 Код программы
Dim summa1 As Double
Dim summa2 AsDouble
Dim a() AsDouble
Dim m As Variant
‘задаём начальныепараметры при инициализации формы:
Private SubUserForm_Initialize()
Application.Visible= False
UserForm1.Caption= «Курсовой проект»
CommandButton1.Default= True
TextBox1.SetFocus
End Sub
‘процедура заполненияматрицы:
Private SubCommandButton1_Click()
m =TextBox1.Text
IfIsNumeric(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 Tom, 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 SubCommandButton3_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 SubOptionButton1_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 SubOptionButton2_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 SubCommandButton5_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 <= 0Then
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 Tom, 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.