Автор: lapulechka
Дата сообщения: 19.05.2007 12:11
Ребят, я запуталась. По-моему неправильно считается.
Составить процедуру и функцию для вычисления:
Y = 1+ + + …
принимая, что аргумент Х по модулю меньше единицы. Вычисления проводить до тех пор, пока модуль разности между очередным слагаемым и его предыдущим значением больше малой заданной величины, рассматриваемой в качестве точности вычислений.
Полученные подпрограммы записать в модуль. Используя подпрограммы модуля, вывести на экран с заданной точностью таблицу значений Y для аргумента Х от его заданного начального значения до заданного конечного значения с заданным шагом.
Private Sub Form_Load()
Label1 = " Составить процедуру и функцию для вычисления:" & vbCrLf & _
"Y = 1 + 2/x + 2*3/x^2 + 2*3*2/x^3 + 2*3*2*3/x^4 + ... ," & vbCrLf & _
"принимая, что аргумент X по модулю меньше единицы. Вычисления проводить до тех пор, пока модуль " & vbCrLf & _
"разности между очередным слагаемым и его предыдущим значением больше за-данной величины, " & vbCrLf & _
"рассматриваемой в качестве точности вычислений." & vbCrLf & _
" Полученные подпрограммы записать в модуль. Используя подпрограммы модуля, вывести с заданной " & vbCrLf & _
"точностью таблицу значений Y для аргумента X от его заданного начального значения до заданного " & vbCrLf & _
"конечного значения с заданным шагом изменения."
End Sub
Public Sub p(ByVal x!, ByVal eps#, ByRef sum#)
Dim pred#, posl#
Dim ch%, sum_sk_ch%, sk_ch%
Dim zn%, sum_sk_zn%, sk_zn%
Dim z%, kf!
ch = 1
zn = 2: sum_sk_zn = 31: sk_zn = 4
z = 1: sum = 1 + x / 2
pred = 1: posl = x / 2
Do While Abs(Abs(pred) - Abs(posl)) > eps
sk_zn = sum_sk_zn - sk_zn: zn = zn + sk_zn
kf = ch / zn
pred = posl
posl = pred * z * kf * x
sum = sum + posl
Loop
End Sub
Public Function f(ByVal x!, ByVal eps#) As Double
Dim pred#, posl#, sum#
Dim ch%, sum_sk_ch%, sk_ch%
Dim zn%, sum_sk_zn%, sk_zn%
Dim z%, kf!
ch = 1
zn = 2: sum_sk_zn = 31: sk_zn = 4
z = 1: sum = 1 + x / 2
pred = 1: posl = x / 2
Do While Abs(Abs(pred) - Abs(posl)) > eps
sk_zn = sum_sk_zn - sk_zn: zn = zn + sk_zn
kf = ch / zn
pred = posl
posl = pred * z * kf * x
sum = sum + posl
Loop
f = sum
End Function
Private Sub Command1_Click()
Dim x As Single, y As Double
Dim xn As Single, dx As Single, xk As Single
Dim eps As Double, b As Boolean, s As String
Dim g As Double, i As Byte, j As Byte
xn = Val(InputBox("Введите начальное значение x"))
Label3.Caption = "Начальное значение x = " & xn
dx = Val(InputBox("Введите шаг по x"))
Label4.Caption = "Шаг по x = " & dx
xk = Val(InputBox("Введите конечное значение x"))
Label5.Caption = "Конечное значение x = " & xk
eps = Val(InputBox("Введите точность вычисления"))
Label6.Caption = "Точность вычислений = " & eps
'Выбор средства вычислений: с помощью процедуры или функции
If Combo1.Text = "Процедура" Then
b = True
Else
b = False
End If
'Вычисление значения суммы ряда для заданного интервала значений x.
List1.Clear
x = xn
Do While x < xk + 0.5 * dx
If b Then
Call p(x, eps, y)
Else
y = f(x, eps)
End If
' Вывод результатов вычисления суммы ряда с заданной точностью
g = eps: j = 0
Do While g < 1
g = g * 10
j = j + 1
Loop
s = "#0."
For i = 1 To j
s = s & "0"
Next i
List1.AddItem " " & Format(x, "0.00") & Space(16) & Format(y, s)
' Переход к следующему значению x из заданного диапазона
x = x + dx
Loop
End Sub
Private Sub Command3_Click()
End
End Sub