Source code in Pascal:

Procedure Hord(A,B:Real; E:Real; var X, Fx:Real;n:integer); var X0,Fa,Fb:real; Begin if dF2(A,n)*F(A,n) > 0 then begin X:=B;X0:=A; Fa:=F(A,n); while (Abs(X0-X)>E) do begin X0:=X; Fx:=F(X0,n); X:=X0-Fx*(X0-A)/(Fx-Fa); end end else begin X:=A;X0:=B; Fb:=F(B,n); while (Abs(X0-X)>E) do begin X0:=X; Fx:=F(X0,n); X:=X0-Fx*(B-X0)/(Fb-Fx); end end; Fx:=F(X,n); End. 

Attempt to solve on VBA:

 Dim x As Single, x1 As Single, f1 As Single, f2 As Single Dim n As Integer Const e = 0.001 Private Function f(ByVal x As Double) As Double f = x - 3 - Sin(3 * x) End Function Private Function Fd(ByVal x As Double) As Double Fd = 1 - 3 * Cos(3 * x) End Function Private Sub Command3_Click() 'metod hord Text3.Text = "" x1 = Val(Text1.Text) X2 = Val(Text2.Text) Do While Abs(x1 - X2) > e x3 = X2 - f(X2) * (X2 - x1) / (f(X2) - f(x1)) x1 = X2 X2 = x3 DoEvents Loop Text3.Text = Round(x3, 5) End Sub 
  • In, it's better. I moved the code from your comment directly to the question. In the future, to add a question, edit it: edit button. - Nick Volynkin
  • Well, thank you - Anya Lis

1 answer 1

Ok, you brought your code, that's good.

Look, modern imperative languages ​​are all very similar to each other, so you can translate almost line by line. Let's try? Read the comments, they are important (and I have not translated all the code).

I don't have anything to check, so the correct syntax may not be everywhere.

 ' Procedure Hord(A,B:Real; E:Real; var X, Fx:Real;n:integer); ' функции, не возвращающие значение, определяются ключевым словом Sub ' обыкновенные параметры - ByVal, var-параметры - ByRef ' Непонятно, зачем вам n, оно по идее нигде не используется, так что я его выкинул Private Sub Hord(ByVal A As Double, ByVal B As Double, ByVal E As Double, _ ByRef X As Integer, ByRef Fx as Double, ByVal n as Integer) As Double ' var ' X0,Fa,Fb:real; Dim X0, Fa, Fb As Double ' Begin ' блоки в VB неявные, begin/end отпадают ' if dF2(A,n)*F(A,n) > 0 then ' тут проблема, вы, кажется, тут анализируете вторую производную (dF2)? ' во-первых, у вас нет такой функции (её можно написать аналогично Fd), ' но я не уверен, что это математически правильно. If dF2(A) * F(A) > 0 Then ' begin ' X:=B;X0:=A; X = B Х0 = A ' Fa:=F(A,n); Fa = F(A) ' while (Abs(X0-X)>E) do ' begin While Math.Abs(X0-X) > E ' X0:=X; X0 = X ' Fx:=F(X0,n); Fx = F(X0) ' X:=X0-Fx*(X0-A)/(Fx-Fa); X = X0 - Fx * (X0 - A) / (Fx - Fa) ' end End While ' end ' else Else ' эта часть совершенно аналогична, переведёте сами? End If ' Fx:=F(X,n); Fx = F(X) ' End. End Sub