`результаты расчета передаются в текстовое окно «Наращенная сумма»
`оба фрейма становятся недоступными (доступ возможен к командным кнопкам «Построение графика» и «Расчет показателя»)
Dim i As Single ` годовая процентная ставка
Dim r As Single ` годовой взнос ренты
Dim p As Single ` число платежей в год
Dim n As Integer ` число периодов наращения
If Text1.Text = “” Or Val(Text1.Text) = 0 Then ` если нулевые или пустые параметры
Call MsgBox(«Не заданы параметры расчета», vbExclamation, «Ошибка при задании параметров») ` вывести сообщение
Text1.SetFocus ` перевести курсор в текстовое окно Text1
Exit Sub
End If
If Text2.Text = “” Or Val(Text2.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета», vbExclamation, « Ошибка при задании параметров»)
Text2.SetFocus
Exit Sub
End If
If Text3.Text = “” Or Val(Text3.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета «, vbExclamation, « Ошибка при задании параметров»)
Text3.SetFocus
Exit Sub
End If
If Text4.Text = “” Or Val(Text4.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета «, vbExclamation, « Ошибка при задании параметров»)
Text4.SetFocus
Exit Sub
End If
i = Val(Text1.Text) ` Val(string) – возвращает числовую составляющую
строки
r = Val(Text2.Text) ` присвоение переменным значений введенных
p = Val(Text3.Text) ` параметров из текстовых окон
n = Val(Text4.Text)
Text10.Text = s(i, r, p, n) ` в текстовое окно передать результаты расчета показателя
Frame1.Enabled = False ` фрейм недоступен
Frame2.Enabled = False ` фрейм недоступен
Command1.Enabled = True ` командная кнопка доступна
Command2.Enabled = True ` командная кнопка доступна
Picture1.Cls ` очистка PictureBox
Label1.Enabled = False ` метка недоступна
Label2.Enabled = False ` метка недоступна
Label3.Enabled = False ` метка недоступна
Label4.Enabled = False ` метка недоступна
Label6.Enabled = False ` метка недоступна
Label7.Enabled = False ` метка недоступна
Label8.Enabled = False ` метка недоступна
Label9.Enabled = False ` метка недоступна
Label10.Enabled = False ` метка недоступна
Label5.Caption = «Наращенная сумма» ` установка метки
End Sub
Private Sub Command2_Click()
‘После нажатия кнопки «Построение графика» становится доступным фрейм «Построение графика», остальные элементы формы становятся недоступными
Frame1.Enabled = False ` фрейм недоступен
Frame2.Enabled = True ` фрейм доступен
Text5.SetFocus ` перевести курсор в текстовое окно Text5
Command1.Enabled = False ` командная кнопка недоступна
Command2.Enabled = False ` командная кнопка недоступна
Label6.Enabled = True ` метка доступна
Label7.Enabled = True ` метка доступна
Label8.Enabled = True ` метка доступна
Label9.Enabled = True ` метка доступна
Label10.Enabled = True ` метка доступна
Label5.Caption = «» ` очистка текста метки
End Sub
Private Sub Text5_Change()
Dim i As Integer
Dim KeyAscii As Integer
For i = 1 To Len(Text5.Text)
KeyAscii = Asc(Mid(Text5.Text, i, 1))
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46) Then
Text5.Text = “”
Exit Sub
End If
Next
End Sub
Private Sub Text5_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text6.SetFocus
End If
End Sub
Private Sub Text6_Change()
Dim i As Integer
Dim KeyAscii As Integer
For i = 1 To Len(Text6.Text)
KeyAscii = Asc(Mid(Text6.Text, i, 1))
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46) Then
Text6.Text = “”
Exit Sub
End If
Next
End Sub
Private Sub Text6_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text7.SetFocus
End If
End Sub
Private Sub Text7_Change()
Dim i As Integer
Dim KeyAscii As Integer
For i = 1 To Len(Text7.Text)
KeyAscii = Asc(Mid(Text7.Text, i, 1))
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46) Then
Text7.Text = “”
Exit Sub
End If
Next
End Sub
Private Sub Text7_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text8.SetFocus
End If
End Sub
Private Sub Text8_Change()
Dim i As Integer
Dim KeyAscii As Integer
For i = 1 To Len(Text8.Text)
KeyAscii = Asc(Mid(Text8.Text, i, 1))
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46) Then
Text8.Text = “”
Exit Sub
End If
Next
End Sub
Private Sub Text8_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Text9.SetFocus
End If
End Sub
Private Sub Text9_Change()
Dim i As Integer
Dim KeyAscii As Integer
For i = 1 To Len(Text9.Text)
KeyAscii = Asc(Mid(Text9.Text, i, 1))
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46) Then
Text9.Text = “”
Exit Sub
End If
Next
End Sub
Private Sub Text9_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command4.SetFocus
End If
End Sub
Private Sub command4_Click()
`производится проверка на заполненность текстовых окон (если окно незаполненно, то происходит выдача сообщения и курсор переводится в соответствующее текстовое окно)
`очистка объекта PictureBox от предыдущего графика
`построение графика в объекте PictureBox (масштабирование объекта PictureBox, рисование координатных осей и графика)
`рисование графика осуществляется в следующей последовательности: задается система координат формы, для чего находятся минимальное и максимальное значения функции на отрезке; рисуются координатные оси; рисуется жирная точка в начале графика; на отрезке определения функции с шагом, заданным пользователем, рисуется график.
`фреймы делаются недоступными (доступ возможен только к командным кнопкам «Построение графика» и «Расчет показателя»)
Dim i As Single ` годовая процентная ставка
Dim r As Single ` годовой взнос ренты
Dim p As Integer ` число платежей в год
Dim n As Integer ` число периодов обращения
Dim m As Integer ` счетчик цикла
Dim st As Single ` счетчик цикла
Dim minfx As Single ` функции
Dim maxfx As Single ` функции
Dim minx As Single ` минимальное значение аргумента
Dim maxx As Single ` максимальное значение аргумента
Dim step_t As Double ` шаг построения графика
If Text5.Text = “” Or Val(Text5.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета «, vbExclamation, « Ошибка при задании параметров «)
Text5.SetFocus
Exit Sub
End If
If Text6.Text = “” Or Val(Text6.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета», vbExclamation, « Ошибка при задании параметров «)
Text6.SetFocus
Exit Sub
End If
If Text7.Text = “” Or Val(Text7.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета», vbExclamation, « Ошибка при задании параметров «)
Text7.SetFocus
Exit Sub
End If
If Text8.Text = “” Or Val(Text8.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета», vbExclamation, « Ошибка при задании параметров «)
Text8.SetFocus
Exit Sub
End If
If Text9.Text = “” Or Val(Text9.Text) = 0 Then
Call MsgBox(«Не заданы параметры расчета», vbExclamation, « Ошибка при задании параметров «)
Text9.SetFocus
Exit Sub
End If
Picture1.Cls ` очистка элемента PictureBox
i = Val(Form1.Text5.Text) ` Val(string) – возвращает числовую составляющую
r = Val(Form1.Text6.Text) ` строки
p = Val(Form1.Text7.Text) ` присвоение переменным значений введенных
n = Val(Form1.Text8.Text) ` параметров из текстовых окон
`зададим систему координат формы
`для чего найдем максимальное и минимальное значение принимаемое
`функций на отрезке
'начальное значение выбираем произвольное
minfx = s(i, r, p, n) ` минимальное значение функции
maxfx = s(i, r, p, n) ` максимальное значение функции
minx = 0 ` минимальное значение аргумента
maxx = 0 ` максимальное значение аргумента
step_t = Val(Text9.Text) ` присвоим переменной значение шага графика
For st = 0 To n Step step_t ` вычислим min и max значение функции
If minfx > s(i, r, p, st) Then ` вычисли минимальное значение функции
minfx = s(i, r, p, st)
minx = st
End If
If maxfx < s(i, r, p, st) Then ` вычислим максимальное значение функции
maxfx = s(i, r, p, st) ‘
maxx = st ‘
End If ‘
Next st
`задание пользовательской системы координат в окне изображения
Picture1.Scale (0.1, maxfx)-(n, 0.1) ` установка масштаба
Picture1.DrawWidth = 2 ` толщина точки равна 2
`рисуем ось X
Picture1.Line (0, 0 + 0.01 * maxfx)-(n, 0 + 0.01 * maxfx), RGB(0, 255, 0) ` при рисовании оси Х задается отступ от края объекта PictureBox на 0.01 * maxfx для лучшей видимости координатной оси
`рисуем ось Y
Picture1.Line (0 + 0.01 * n, 0)-(0 + 0.01 * n, maxfx), RGB(0, 255, 0) ` при рисовании оси Х задается отступ от края объекта PictureBox на 0.01 * maxfx для лучшей видимости координатной оси
Picture1.DrawWidth = 1 ` толщина точки равна 1
Picture1.CurrentX = minx ` задание координат пера
Picture1.CurrentY = s(i, r, p, minx) `задание координат пера
Picture1.DrawWidth = 8 ` толщина точки равна 8
Picture1.Pset (Picture1.CurrentX, Picture1.CurrentY) ` рисование точки в начале графика
Picture1.DrawWidth = 1 ` толщина точки равна 1
Picture1.CurrentX = 0 ` задание координат пера
Picture1.CurrentY = s(i, r, p, 0) ` задание координат пера
`рисование графика
For m = 0 To n Step step_t
Picture1.DrawWidth = 5 ` толщина точки равна 5
Picture1.Pset (Picture1.CurrentX, Picture1.CurrentY) ` рисование точек построения графика
Picture1.DrawWidth = 1 ` толщина точки равна 1
Picture1.Line –(m, s(i, r, p, m)) ` рисование графика
Next m
Label11.Caption = maxfx ` значение метки – сумма наращенного платежа
Label12.Visible = True ` метка доступна
Frame1.Enabled = False ` фрейм недоступен
Frame2.Enabled = False ` фрейм недоступен
Command1.Enabled = True ` командная кнопка доступна
Command2.Enabled = True ` командная кнопка доступна
Label1.Enabled = False ` метка недоступна
Label2.Enabled = False ` метка недоступна
Label3.Enabled = False ` метка недоступна
Label4.Enabled = False ` метка недоступна
Label6.Enabled = False ` метка недоступна
Label7.Enabled = False ` метка недоступна
Label8.Enabled = False ` метка недоступна
Label9.Enabled = False ` метка недоступна
Label10.Enabled = False ` метка недоступна
End Sub
`функция для расчета финансового показателя
Public Function s(ByVal i As Single, ByVal r As Single, ByVal p As Single, ByVal n As Single) As Single
On Error GoTo err1 `в случае ошибки – перейти на метку err1
s = r * ((1 + i / 100) ^ n – 1) / (p * ((1 + i / 100) ^ (1 / p) – 1)) ` функция наращения по формуле p-срочной ренты
On Error GoTo 0
Exit Function ` выйти из функции
err1: ` обработка ошибки
If Err.Number = 6 Then ` если ошибка – переполнение, вывести на экран сообщение
Dim Msg As String
Msg = «Ошибка при вычислении!»
MsgBox Msg, , «Переполнение»
Err.Clear ` очистка поля ошибки
End If
End ` завершение работы проекта
End Function
1.3.РАБОТА ПРИЛОЖЕНИЯ.
Расчетная формула:
S=r*((1+i/100)^n-1)/(p*[(1+i/100)^(1/p)-1]),
Где n – число периодов наращения;
i – годовая процентная ставка;
S – наращенная сумма;
r – годовой взнос ренты;
m – число начислений процентов в год;
p – число платежей в год.
Пример. Для обеспечения некоторых будущих расходов создается фонд. Средства в фонд, поступают в виде постоянной годовой ренты постнумерандо в течение пяти лет. Размер разового платежа – 4 млн. руб. На поступившие взносы начисляются проценты по ставке 18,5% годовых. Платежи выплачиваются поквартально: R/p=1 млн. руб., общее число платежей составит 20.
S= 4*(1,1855-1)/{4*[(1+0,185)1/4-1]}=28,9 млн. Руб.
1.3.1.РАСЧЕТ ПОКАЗАТЕЛЯ.
Рисунок№3
1.3.2.ПОСТРОЕНИЕ ГРАФИКА.
Рисунок№4
1.3.3.ПРИМЕР ОКНА СООБЩЕНИЯ.