Dim Shared a, k, P, rezultat, R$, razmak$ Sub MAIN ' Program izracuna "ln X" za 10E-99 < X < 10E99 '__________________zajem podatka ________________________________ a = Val(Selection$()) : e = 2.7182818284591 For I = 1 To 30 : razmak$ = razmak$ + " " : Next MsgBox "Program računa naravni logaritem števila " + Str$(a), - 8 If a = 1 Then R$ = Str$(0) : rezultat = 0 : Goto ZAOKROZEVANJE If a > 1E+100 Or a < 1E-100 Then R$ = " Napaka ! " : Goto IZPIS If (a <= 1.9 And a > 1) Then P = a : LN : Goto ZAOKROZEVANJE If a < 1 Then Goto MALI Else Goto VELIKI '________________korenjenje podatka za stevila > 1.9_____________ VELIKI: P = a : k = 0 While P > 1.9 SQRT : P = rezultat : k = k + 1 Wend LN : P = rezultat For w = 1 To k : P = P * 2 : Next 'množenje rezultata z 2 rezultat = P : R$ = Str$(P) : Goto ZAOKROZEVANJE '________________korenjenje podatka za stevila < 1________________ MALI: P = a : k = 0 '________________podatek je zapisan eksponencialno________________ While InStr(LTrim$(Str$(P)), "-") <> 0 k = k + 1 : SQRT : P = rezultat Wend '________________podatek je zapisan decimalno_____________________ While Left$(LTrim$(Str$(P)), 3) = "0.0" SQRT : P = rezultat : k = k + 1 Wend P = rezultat : LN : P = rezultat For w = 1 To k : P = P * 2 : Next 'množenje rezultata z 2 rezultat = P : R$ = Str$(P) '____________zaokrozitev na N decimalk (npr.6)____________________ ZAOKROZEVANJE: N = 6 '________razdelitev na celi,decimalni in ekponentni del___________ dc = InStr(R$, ".") : exp = InStr(R$, "E") : If exp <> 0 Then exp$ = Mid$(R$, exp, Len(R$) - exp + 1) Else exp = Len(R$) If dc > 1 Then R$ = LTrim$(Left$(Str$(rezultat), dc)) Else Goto IZPIS dec1$ = Mid$(Str$(rezultat), dc + 1, exp - dc - 1) If N = O And Val(Mid$(dec1$, 1, 1)) >= 5 Then K1 = Val(R$) : If K1 > 0 Then K1 = K1 + 1 Else K1 = K1 - 1 If K1 <> 0 Then R$ = Str$(K1) : Goto SKUPAJ If Len(dec1$) < N And exp$ = "" Then dec1$ = Mid$(Str$(rezultat), dc + 1, exp - dc) If Len(dec1$) > N Then dec2$ = Mid$(dec1$, N + 1, 1) : dec1$ = Mid$(dec1$, 1, N) : dec$ = "" If Val(dec1$) = 0 Then dec$ = dec1$ : Goto SKUPAJ If Val(dec2$) >= 5 Then For x = 1 To N - 1 : dec$ = dec$ + Mid$(dec1$, x, 1) : Next : dec$ = dec$ + LTrim$(Str$(Val(Mid$(dec1$, N, 1)) + 1)) Else dec$ = dec1$ End If SKUPAJ: If Len(dec$) < N Then For x = Len(dec$) To N - 1 : dec$ = dec$ + "0" : Next R$ = R$ + dec$ + exp$ '__________z vklopom in izklopom REM izbiramo nacin izpisa_________ IZPIS: Insert "ln " + Str$(a) + " = " + R$ + " " REM WordRight : Insert " = " + R$ : Insert " (ln) " REM WordRight : CharRight 1 : Insert Chr$(9) + R$ MsgBox "KONČANO !", - 2 End Sub Sub LN '__________________izracun ln x za 0 < x < 2_______________________ '___________________(Mat.prirocnik str.378)________________________ a2 = 1 : imen = 1 : st1 = - 1 : vrsta = 0 For N = 1 To 100 + k * 30 stev = a2 * (P - 1) : a2 = stev '(x-1) na N imen = N 'n st1 = st1 * (- 1) '(-1) na N+1 vrsta = st1 * stev / imen + vrsta MsgBox "Program računa naravni logaritem števila " + Str$(a) + razmak$ + "Preostalih korakov : " + Str$((100 + k * 30) - n), - 8 Next T = N : rezultat = vrsta : R$ = Str$(rezultat) End Sub Sub SQRT '________________izracun kv.korena stevila P_______________________ a0 = P + 1 : a1 = (a0 + P / a0) / 2 While a0 <> a1 a0 = a1 : a1 = (a0 + P / a0) / 2 Wend rezultat = a1 : R$ = Str$(rezultat) End Sub