Кафедра «Автоматизовані системи управління»
Курсова робота
з дисципліни ВТіП
Розробка програмного модуля
Введення
Метою даної курсової роботи є розробка програмного модуля, за допомогою якого можна задати розмірність квадратної матриці, заповнити матрицю випадковими цілими числами від 0 до 6 і обчислити:
- Суму елементів, що знаходяться під головною діагоналлю,
- Суму елементів, які становлять головну діагональ.
Для розробки програми використаний табличний процесор Excel і мова програмування Visual Basic for Application.
У першому розділі, який називається «Постановка завдання», наведена математична модель задачі, описані вхідні і вихідні дані, описана обробка помилок.
У другому розділі «Проектування програмного модуля», зображена структурна діаграма програмного модуля, розроблена схема програмного модуля і призначений для користувача інтерфейс.
У розділі «Реалізація програмного модуля» описаний код програми, вироблено опис використовуваних операторів і функцій.
Тестування програмного модуля наведено в четвертому розділі.
Крім того, даний висновок і наведено список використаних джерел.
1. Постановка завдання
1.1 Математична модель задачі
Визначення квадратної матриці: квадратною матрицею n-го порядку називається матриця, що складається з m рядків і m стовпців. Головною діагоналлю квадратної матриці називається діагональ, складена з елементів a 11 a 22 ... a mm.
Спосіб знаходження суми елементів квадратної матриці, що лежать під головною діагоналлю:
Необхідний результат виходить при підсумовуванні елементів у наступному порядку: а 21 + а 31 + а 32 + ... + а i1 + a i2 + a i3 + a i (j-1) - підсумовуються елементи, починаючи із другого рядка, і, при збільшенні рядка на 1, число стовпців, що містять потрібні елементи, також збільшується на 1. У стислому вигляді цей цикл виглядає так: i = f ... m, де початкове f = 2; j = 1 ... (mb), де початкове 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;
1913 - ви хування суми елементів, що лежать під головною діагоналлю;
1914 - збільшення параметра f на 1 і зменшення параметра b на 1, після закінчення циклу для стовпців (блок 12), і перехід до циклу для рядків (блок 11);
1915 - висновок суми елементів, що лежать під головною діагоналлю на лист Excel;
16 - завдання початкових параметрів для обчислення суми елементів матриці, що становлять головну діагональ;
17 - цикл, який пробігає значення рядків від 1 до заданого розміру масиву, з кроком рівним за замовчуванням 1;
18 - цикл, який пробігає значення стовпців від 1 до заданого розміру масиву, з кроком рівним за замовчуванням 1;
19 - перевірка умови i = j. У разі виконання цієї умови відбувається перехід до блоку 5, в іншому випадку - до блоку 3;
1920 - ви хування суми елементів, які становлять головну діагоналлю;
21 - висновок суми елементів, які становлять головну діагональ на аркуш Excel.
2.3 Розробка користувальницького інтерфейсу.
Інтерфейс користувача (ПІ) програми - це сукупність елементів, що дозволяють користувачу програми керувати її роботою і отримувати необхідні результати, тобто це діалог між комп'ютером і користувачем.
Інтерфейс для програмного модуля, розробленого в даному курсовому проекті представлений на рисунку 9:
Рисунок 9 - Вид користувальницької форми: 1 - поле для введення розмірності квадратної матриці, 2 - поле для виводу суми елементів матриці, залежно від вибраного перемикача; 3 - перемикач, при виборі якого обчислюється сума елементів матриці, що знаходяться під головною діагоналлю; 4 - перемикач, при виборі якого обчислюється сума елементів матриці, що становлять головну діагональ; 5 - кнопка, при натисканні якої відбувається заповнення матриці; 6 - кнопка, яка здійснює очищення всіх полів форми; 7 - кнопка, що здійснює вихід з програми; 8 - кнопка, при натисканні якої з'являється коротка інформація про програму; 9 - кнопка, що дозволяє користувачеві перейти на роботу з аркушем Excel; 10 - поле для виводу заповненої матриці
3. Реалізація програмного модуля
3.1 Код програми
Dim summa 1 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 CommandButton 2_ Click ()
OptionButton1.Value = False
OptionButton2.Value = False
TextBox1.Text = ""
TextBox2.Text = ""
ListBox1.Clear
TextBox 1. SetFocus
End Sub
'Процедура виходу з програми:
Private Sub CommandButton3_Click ()
UserForm1.Hide
Application. Quit
End Sub
'Виклик короткої інформації про програму:
Private Sub CommandButton 4_ 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
TextBox 2. Text = summa 1
End Sub
'Процедура обчислення суми елементів, які становлять головну діагональ:
Private Sub OptionButton2_Click ()
summa2 = 0
= 1 For i 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) = "Сума елементів складових головну діагональ =" & summa 2
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.