lapulechka
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребят, я запуталась. По-моему неправильно считается. Составить процедуру и функцию для вычисления: 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 |