新しく発言する  EXIT  インデックスへ

組み込み関数BSTR$を拡張する


  組み込み関数BSTR$を拡張する 山中和義 2008/03/29 19:40:53 
  組み込み関数BVALを拡張する 山中和義 2008/03/29 19:41:48 
Re: 組み込み関数BSTR$を拡張する  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/29 19:41:48
組み込み関数BVALを拡張する


!記数法の変換(N進法から10進法へ)

LET MaxLevel=200 !最大桁数

FUNCTION VAL1(x$,N) !N進法の数値 ※ASCIIコード表から
IF t$>"9" THEN
LET t=ORD(t$)-ORD("A")+10
ELSE
LET t=ORD(t$)-ORD("0") !※t=VAL(t$)でも可
END IF
IF t<0 OR t>=N THEN !0〜N-1の範囲かどうか確認する
PRINT x$;"は範囲外の値です。"
STOP
END IF
LET VAL1=t
END FUNCTION

FUNCTION ExBVAL(a$,N) !a$を非負のn進法の数とした値
LET L=LEN(a$) !文字列長を得る

!整数部
LET s=0
FOR i=1 TO L !上位の桁から順に
LET t$=UCASE$(a$(i:i))
IF t$="." THEN EXIT FOR !小数点なら、終了

LET s=s*N+VAL1(t$,N) !多項式(( … ((a[1]*N+a[2])*N+a[3])*N … +a[i-2])*N+a[i-1])*N+a[i] ※左シフト
NEXT i


!小数部
LET ss=0
IF i<L THEN
LET i=L !下位の桁から順に ※精度の確保
LET k=0 !桁数
DO
LET t$=UCASE$(a$(i:i))
IF t$="." THEN EXIT DO !小数点なら、終了

IF t$="]" THEN !循環小数なら
LET p=i !位置を記録する
ELSEIF t$="[" THEN
IF k<MaxLevel THEN LET i=p !有効桁数だけ繰り返す
ELSE
LET ss=ss/N+VAL1(t$,N) !多項式(( … ((a[i]/N+a[i-1])/N+a[i-2])/N … +a[3])/N+a[2])/N+a[1] ※右シフト
END IF

LET i=i-1 !次の桁へ
LET k=k+1
LOOP
LET ss=ss/N
END IF

LET ExBVAL=s+ss
END FUNCTION



PRINT ExBVAL("0.199999999999",16)
PRINT ExBVAL("1.1[9]",16) !循環小数 1.1999…
PRINT ExBVAL(".[3204]",5) !0.320432043204…
PRINT ExBVAL("123",8)
PRINT ExBVAL("123.",10)


END

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。