home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC & Mediji 1997 April
/
PCM_9704.iso
/
makri
/
dekadn~1.txt
next >
Wrap
Text File
|
1997-03-16
|
4KB
|
107 lines
Dim Shared a, k, P, rezultat, R$, razmak$
Sub MAIN
' Program izracuna "log X" za 10E-99 < X < 10E99
' opomba: log X = ln X / ln 10
'__________________zajem podatka ________________________________
a = Val(Selection$()) : e = 2.7182818284591 : ln10 = 2.302585092994
For I = 1 To 30 : razmak$ = razmak$ + " " : Next
MsgBox "Program raΦuna dekadni 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
P = rezultat : 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
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: rezultat = rezultat / ln10 : N = 0
'________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 "log " + Str$(a) + " = " + R$ + " "
REM WordRight : Insert " = " + R$ : Insert " (log) "
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 dekadni 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