Зміст
Введення
1. Постановка завдання
1.1 Математична модель задачі
1.2 Вхідні дані
1.3 Вихідні дані
1.4 Обробка помилок.
2 Проектування програмного модуля
2.1 Структурна діаграма програмного модуля
2.2 Розробка схеми програмного модуля та її опис
2.3 Розробка користувальницького інтерфейсу
3 Реалізація програмного модуля
3.1 Код програми
4 Тестування програмного модуля
Висновок
Список використаних джерел
Введення
Метою даної курсової роботи є розробка програмного модуля для обчислення наближеного значення нескінченної суми з точністю до Е = 0.05, якщо x приймає значення на відрізку [a, b] з кроком h. Для розробки використовується табличний процесор Excel і мова програмування Visual Basic for Application.
Ця курсова робота складається з 4 розділів.
У розділі «Постановка завдання» описані: математична модель задачі, вхідні і вихідні дані, обробка помилок, які можуть бути допущені при роботі з даною програмою.
У розділі «Проектування програмного модуля» приведена структурна діаграма програмного модуля, схема програмного модуля з її описом і описаний користувальницький інтерфейс.
У розділі «Реалізація програмного модуля» знаходиться код програми з коментарями до нього і описані використовувані оператори і функції.
У розділі «Тестування програмного модуля» показано роботу програми.
1. Постановка завдання
1.1 Математична модель задачі
Дана сума є нескінченний ряд Тейлора. Для досягнення заданої точності треба підсумовувати члени ряду до тих пір, поки черговий член за модулем не буде менше Е. Для отримання наступного члена ряду через попередній скористаємося рекуррентной формулою:
1.2 Вхідні дані
Вхідними даними є:
Початок відрізка;
Кінець відрізка;
Крок.
Вимоги до вхідних даних:
Передбачити перевірку на допустимість вихідних даних і повторення введення при помилкових даних;
Введення вихідних даних здійснювати в поля введення форми.
1.3 Вихідні дані
Вихідними даними є:
Таблиця сум нескінченного ряду в залежності від x;
Графік функції.
Вимоги до вихідних даних:
Всі вихідні дані виводяться на форму;
До всіх вихідних даних повинен бути заборонений доступ з боку користувача.
1.4 Обробка помилок
У даній програмі реалізований наступний спосіб контролю введення:
Спочатку перевіряється, чи є набраний символ або цифрою, або комою;
Якщо не є, то набір символу ігнорується;
Якщо набирається символ є цифрою, то він вводиться в поле введення;
Якщо набирається символ є коми, то перевіряється, чи є вона першою вводиться коми. Якщо раніше коми не вводилися, то вона вводиться в поле введення. В іншому випадку введення коми ігнорується.
Даний спосіб контролю введення реалізований за допомогою функції KeyPress.
Проте користувач може не ввести в поле введення дані. У цьому випадку видається наступне повідомлення:
Малюнок 1. Повідомлення про помилку.
Якщо користувач ввів початок відрізка більше, ніж кінець відрізка, то в цьому випадку видається наступне повідомлення:
Малюнок 2. Повідомлення про помилку.
2 Проектування програмного модуля
2.1 Структурна діаграма програмного модуля
Малюнок 3. Структурна діаграма програмного модуля.
UserForm1 - призначена для користувача форма.
UserForm_Initialize () - процедура початкової ініціалізації користувача форми.
CommandButton1_Click () - процедура, що спрацьовує при натисканні кнопки «Обчислити суму», яка зчитує вихідні дані, робить обчислення і записує результат.
CommandButton2_Click () - процедура, що спрацьовує при натисканні кнопки «Видалити дані», яка здійснює видалення введених даних і результатів.
CommandButton3_Click () - процедура, що спрацьовує при натисканні кнопки «Вихід», яка закриває програму.
Sum () - функція визначення суми нескінченної низки.
2.2 Розробка схеми програмного модуля та її опис
Малюнок 4. Схема процедури обробки кнопки «Обчислити суму».
Малюнок 5. Схема функції обчислення суми нескінченної низки.
2.3 Розробка користувальницького інтерфейсу
При запуску програми з'являється наступне вікно (Рис.6). Текстова інформація розміщена на елементах управління Label.
Малюнок 6. Вікно програми.
У вікні програми розташовуються комірки вводу (елементи управління TextBox), таблиця результатів (елемент управління ListBox) і графік функції, який розташовується на елементі управління Image.
Після натискання на кнопку (CommandButton) «Обчислити суму» зчитуються дані, проводиться розрахунок, виводиться результат.
Після натискання на кнопку «Видалити дані» дані і результат стираються.
3 Реалізація програмного модуля
3.1 Код програми
Dim h As Double 'крок
Dim a As Double 'початок відрізка
Dim b As Double 'кінець відрізка
Dim i As Integer 'лічильник ітерацій
Dim n As Integer 'лічильник ітерацій
Dim x As Double 'аргумент
Dim eps As Double 'точність
Dim Cn As Double '1-ий член ряду
Dim y As Double 'значення суми ряду
Dim summa As Double 'значення суми ряду
Dim MaxIter As Integer 'допустіпое число ітерацій
Dim flag As Boolean 'логічна змінна
Dim usl As Boolean 'логічна змінна
Dim number As String 'рядок для перевірки вводиться числа
Dim sign As String 'рядок для перевірки знака вводиться числа
Dim ry As Range 'область даних по y для побудови графіка
Dim rx As Range 'область даних по x для побудови графіка
Private Sub UserForm_Initialize ()
Application.Visible = False 'робимо Excel невидимим
number = "0123456789, -" 'рядок для перевірки вводиться числа
sign = "-" 'рядок для перевірки знака вводиться числа
eps = 0.05 'точність
End Sub
Private Sub CommandButton1_Click () 'Кнопка "Обчислити суму"
'Перевіряємо чи введені всі дані
If (TextBox1.Value = "" Or TextBox2.Value = "" Or TextBox3.Value = "") Then
MsgBox ("Введені не всі параметри")
Exit Sub
End If
'Перевіряємо чи правильно введені дані (a <b)
If (CDbl (TextBox1.Value)> = CDbl (TextBox2.Value)) Then
MsgBox ("Введені неправильно початок і кінець відрізка")
Exit Sub
End If
'Зчитуємо дані
a = CDbl (TextBox1.Value)
b = CDbl (TextBox2.Value)
h = CDbl (TextBox3.Value)
'Обчислення суми і запис результатів
i = 1
x = a
ListBox1.AddItem "x"
ListBox1.List (0, 1) = "Sum (x)"
For x = a To b Step h
ListBox1.AddItem x
summa = Sum (x)
If (flag) Then
ListBox1.List (i, 1) = summa
Cells (i, 1) = x
Cells (i, 2) = summa
Else
ListBox1.List (i, 1) = "Ряд розходиться"
End If
i = i + 1
Next x
CommandButton1.Enabled = False 'робимо кнопку "Обчислити суму" недоступною
'Побудова діаграми
Set ry = Sheets (ActiveSheet.Name). Range (Cells (1, 2), Cells (i, 2))
Set rx = Sheets (ActiveSheet.Name). Range (Cells (1, 1), Cells (i, 1))
Charts.Add
ActiveChart.ChartType = xlLine
ActiveChart.SetSourceData Source: = ry, PlotBy: = xlColumns
ActiveChart.SeriesCollection (1). XValues = "=" & rx.Address (ReferenceStyle: = xlR1C1, external: = True)
ActiveChart.Location Where: = xlLocationAsObject, Name: = "Лист1"
With ActiveChart
. HasTitle = False
. Axes (xlCategory, xlPrimary). HasTitle = False
. Axes (xlValue, xlPrimary). HasTitle = False
End With
With ActiveChart.Axes (xlCategory)
. HasMajorGridlines = False
. HasMinorGridlines = False
End With
With ActiveChart.Axes (xlValue)
. HasMajorGridlines = False
. HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveChart.HasDataTable = False
ActiveChart.Export filename: = CurDir + "\ Graf.gif", FilterName: = "GIF"
ActiveSheet.ChartObjects.Delete
Worksheets (1). UsedRange.Clear
Image1.Picture = LoadPicture (CurDir + "\ Graf.gif") 'завантажуємо в Image1 файл з графіком
Image1.Visible = True
End Sub
Private Sub CommandButton2_Click () 'Кнопка "Видалити дані"
ListBox1.Clear 'очищаємо ListBox1
TextBox1.Value = "" 'очищаємо TextBox1
TextBox2.Value = "" 'очищаємо TextBox2
TextBox3.Value = "" 'очищаємо TextBox3
TextBox1.SetFocus
CommandButton1.Enabled = True 'робимо кнопку "Обчислити суму" доступною
Image1.Visible = False
End Sub
Private Sub CommandButton3_Click ()
If MsgBox ("Закрити вікно?", VbYesNo + vbQuestion, "Завершення роботи") = vbYes Then
UserForm1.Hide
Application.Quit
End If
End Sub
Public Function Sum (x As Double) As Double 'Функція обчислення суми нескінченної низки
MaxIter = 100
Cn = 1
y = x
n = 0
flag = True
usl = True
Do While (Abs (Cn)> eps)
Cn = Cn * (x * x / ((2 * n + 2) * (2 * n + 3)))
y = y + Cn
n = n + 1
If (n> MaxIter) Then
usl = False
Exit Do
End If
Loop
If (usl) Then
Sum = y
Else
flag = False
End If
End Function
Private Sub TextBox1_KeyPress (ByVal KeyAscii As MSForms.ReturnInteger) 'Перевірка символів, що вводять
If KeyAscii> 26 Then
If InStr (number, Chr (KeyAscii)) = 0 Or (InStr (TextBox1.Text, ",")> 0 And Chr (KeyAscii) = ",") Or (TextBox1.SelStart> 0 And InStr (sign, Chr ( KeyAscii))> 0) Then
KeyAscii = 0
End If
End If
End Sub
Private Sub TextBox2_KeyPress (ByVal KeyAscii As MSForms.ReturnInteger) 'Перевірка символів, що вводять
If KeyAscii> 26 Then
If InStr (number, Chr (KeyAscii)) = 0 Or (InStr (TextBox2.Text, ",")> 0 And Chr (KeyAscii) = ",") Or (TextBox2.SelStart> 0 And InStr (sign, Chr ( KeyAscii))> 0) Then
KeyAscii = 0
End If
End If
End Sub
Private Sub TextBox3_KeyPress (ByVal KeyAscii As MSForms.ReturnInteger) 'Перевірка символів, що вводять
If KeyAscii> 26 Then
If InStr (number, Chr (KeyAscii)) = 0 Or (InStr (TextBox3.Text, ",")> 0 And Chr (KeyAscii) = ",") Or (TextBox3.SelStart> 0 And InStr (sign, Chr ( KeyAscii))> 0) Then
KeyAscii = 0
End If
End If
End Sub
Private Sub UserForm_QueryClose (Cancel As Integer, CloseMode As Integer) 'Закриття форми
Select Case MsgBox ("Закрити вікно?", VbYesNo + vbQuestion, "Завершення роботи")
Case vbYes
Cancel = 0
Application.Quit
Case vbNo
Cancel = -1
End Select
End Sub
4 Тестування програмного модуля
Для тестування програми візьмемо наступні дані:
a =- 1, b = 1, h = 0,1.
Вводимо вихідні дані:
Малюнок 7. Приклад введення вхідних даних.
Після натискання кнопки «Обчислити суму» ми отримуємо таблицю результатів, де для кожного значення аргументу розраховано значення суми ряду:
Малюнок 8. Таблиця результатів.
Малюнок 9. Графік функції.
Висновок
Метою даної курсової роботи була розробка програмного модуля для обчислення наближеного значення нескінченної суми з точністю до Е = 0.05, якщо x приймає значення на відрізку [a, b] з кроком h..
Тестування показало, що результати, отримані розробленим програмним модулем, відповідають теоретичним розрахункам. У програмі присутній обробка помилок. При введенні помилкові дані ігноруються, а за відсутності введених даних видається повідомлення про помилку. Курсова робота виконана в повному обсязі відповідно до завдання.
Список використаних джерел
1 Біллінг В.А. VBA і Office 2000. Офісне програмування. - М.: «Російська редакція», 1999.
2 Гарнаєв Ю.А. Використання MS Excel і VBA в економіці та фінансах. - СПб: БХВ - Санкт-Петербург, 2002.
3 Гарнаєв Ю.А. самовчитель VBA. - СПб: БХВ - Санкт-Петербург, 2002.
4 Васильєв А. VBA в Office 2000: навчальний курс - СПб: Питер, 2002.
5 Кузьменков В.Г. VBA 2002. - М.: Видавництво БІНОМ, 2002.
6 MS Office XP: Розробка додатків / Под ред. Ф. А. Новікова - СПб: БХВ - Санкт-Петербург, 2003.