Option Explicit
Dim X As Double, E As Double, Z As Double
Dim N As Integer, K As Integer, i As Integer
Dim S As Double, D As Double
Dim L As Double
Dim W As Double
Sub szereg()
Range("A1:H100").Clear
Cells(1, 1) = "Punkt rozwinięcia"
Cells(1, 2) = "Wynik Logarytmu"
Cells(1, 3) = "Wynik rozwinięcia"
Cells(1, 4) = "Błąd względny"
Cells(1, 5) = "Błąd bezwzględny"
Cells(1, 7) = "Ilość punktów rozwinięcia"
Cells(2, 7) = "różnica między punktami rozwinięcia"
Columns("A:H").AutoFit
E = 0.0001
E = Application.InputBox("podaj maksymalny błąd", "E", Type:=1)
If E < 0 Then
E = Abs(E)
MsgBox "Bład nie moze być ujemny, więc zostaje zamieniony w liczbę dodatnią", vbOKOnly + vbInformation, "Błąd w danych"
End If
Do
X = Application.InputBox("podaj punkt początku przedziału liczonych X większy niż -0,3 i mniejszy niż 0,3", "X", Type:=1)
If Abs(X) >= 0.3 Then
MsgBox "Popraw podany punkt", vbOKOnly + vbExclamation, "Błąd w danych"
End If
Loop While Abs(X) >= 0.3
Do
Z = Application.InputBox("podaj punkt końca przedziału liczonych X większy niż -0,3 i mniejszy niż 0,3", "X", Type:=1)
If Abs(X) >= 0.3 Then
MsgBox "Popraw podany punkt", vbOKOnly + vbExclamation, "Błąd w danych"
End If
Loop While Abs(X) >= 0.3
Do
K = Application.InputBox("podaj ilość punktów dla jakich ma być policzona wartość (większe lub równe 1)", "K", Type:=1)
If K < 1 Then
MsgBox "ilość punktów nie może być mniejsza niż 1", vbOKOnly + vbExclamation, "Błąd w danych"
End If
Loop While K = 1
Cells(1, 8).Value = K
D = Abs(X - Z) / K
Cells(2, 8).Value = D
For i = 1 To K + 1
L = 1 / (1 + 3 * X)
Cells(1 + i, 2).Value = L
W = 1
N = 1
S = 0
Do
N = N + 1
S = S + W
W = W * (-(3 * X))
Loop While Abs(L - S) > E
If L <> 0 Then
Cells(i + 1, 4).Value = (Abs((L - S)) / L)
Else
Cells(i + 1, 4).Value = 0
End If
Cells(i + 1, 3).Value = S
Cells(i + 1, 5).Value = Abs(L - S)
Cells(i + 1, 1) = X
X = X + D
Next i
End Sub