十進BASIC

ページ名:十進 ということは
  • 十進BASIC ということは・・・

 ここで、気づいた。十進BASIC で作成したソースコードは、このままフルコンパイルでオブジャクトを作れること。

これで多くの OS で動作するソフトを書けそうである。

 簡単な開発環境は整った。

 ここからは、一つひとつを吟味し、書いてある内容を走らせ検証する。


  • 数値

  • ABS(x)    絶対値

LET A=-15.753
LET B=ABS(A)
PRINT B

LET A=15.735
LET B=ABS(A)
PRINT B

END

 15.753
 15.735

 

  • ACOS(x)    逆余弦

 

逆余弦を戻します。x の値は -1 と 1 の間 (両端を含む) でなければなりません。

注意 : -1〜1の範囲を超えるとエラーで停止します。

LET A=ACOS(-1)
PRINT A

LET A=ACOS(-0.5)
PRINT A

LET A=ACOS(0)
PRINT A

LET A=ACOS(0.5)
PRINT A

LET A=ACOS(1)
PRINT A

END

 3.14159265358979
 2.0943951023932
 1.5707963267949
 1.0471975511966
 0

 

  • ANGLE(x,y)    偏角

注意 : (0,0)はエラーとなる。

LET A=angle(0,1)
PRINT A
 
END

A=1.5707963267949 = π/2

 

  • ASIN(x)    逆正弦

ASIN(x)     sinθ=x となるθ。ただし, -π/2≦θ≦π/2

LET A=ASIN(0)
PRINT A

LET A=ASIN(0.5)
PRINT A

LET A=ASIN(1)
PRINT A

LET A=ASIN(-0.5)
PRINT A

LET A=ASIN(-1)
PRINT A

END

 0
 .523598775598299
 1.5707963267949
-.523598775598299
-1.5707963267949

 

  • ATN(x)    逆正接

LET A=ATN(0)
PRINT A

LET A=ATN(0.5)
PRINT A

LET A=ATN(1)
PRINT A

LET A=ATN(-0.5)
PRINT A

LET A=ATN(-1)
PRINT A

END

 0
 .463647609000806
 .785398163397448
-.463647609000806
-.785398163397448

 

  • CEIL(x)     x以上の最小の整数

FOR A=-5 TO 5 STEP 0.5
   LET B=CEIL(A)
   PRINT A,B
NEXT A

END

-5                      -5
-4.5                    -4
-4                      -4
-3.5                    -3
-3                      -3
-2.5                    -2
-2                      -2
-1.5                    -1
-1                      -1
-.5                      0
 0                       0
 .5                      1
 1                       1
 1.5                     2
 2                       2
 2.5                     3
 3                       3
 3.5                     4
 4                       4
 4.5                     5
 5                       5

 

  • COS(x)    余弦

FOR A=-3.14 TO 3.14 STEP 0.314
   LET B=COS(A)
   PRINT A,B
NEXT A

END

-3.14                   -.99999873172754
-2.826                  -.950612598102916
-2.512                  -.80826742726931
-2.198                  -.586882948523859
-1.884                  -.308108031277992
-1.57                    7.96326710733325E-4
-1.256                   .309622813057024
-.942                    .588171730331375
-.628                    .809204180988032
-.314                    .951105719935495
 0                       1
 .314                    .951105719935495
 .628                    .809204180988032
 .942                    .588171730331375
 1.256                   .309622813057024
 1.57                    7.96326710733325E-4
 1.884                  -.308108031277992
 2.198                  -.586882948523859
 2.512                  -.80826742726931
 2.826                  -.950612598102916
 3.14                   -.99999873172754

 

  • COSH(x)    双曲線余弦

FOR A=-10 TO 10
   LET B= COSH(A)
   PRINT A,B
NEXT A
END
-10                      11013.2329201033
-9                       4051.54202549259
-8                       1490.47916125218
-7                       548.317035155212
-6                       201.715636122456
-5                       74.2099485247878
-4                       27.3082328360165
-3                       10.0676619957778
-2                       3.76219569108363
-1                       1.54308063481524
 0                       1
 1                       1.54308063481524
 2                       3.76219569108363
 3                       10.0676619957778
 4                       27.3082328360165
 5                       74.2099485247878
 6                       201.715636122456
 7                       548.317035155212
 8                       1490.47916125218
 9                       4051.54202549259
 10                      11013.2329201033  

 

  • COT(x)    余接

FOR A=-2 TO 0.2 STEP 0.2
   LET B= COSH(A)
   PRINT A,B
NEXT A

FOR A=2 TO 0.2 STEP -0.2
   LET B= COSH(A)
   PRINT A,B
NEXT A

END

-2                       3.76219569108363
-1.8                     3.10747317631727
-1.6                     2.57746447119489
-1.4                     2.15089846539314
-1.2                     1.81065556732437
-1                       1.54308063481524
-.8                      1.33743494630484
-.6                      1.18546521824227
-.4                      1.08107237183845
-.2                      1.02006675561908
 0                       1
 .2                      1.02006675561908
 2                       3.76219569108363
 1.8                     3.10747317631727
 1.6                     2.57746447119489
 1.4                     2.15089846539314
 1.2                     1.81065556732437
 1                       1.54308063481524
 .8                      1.33743494630484
 .6                      1.18546521824227
 .4                      1.08107237183845
 .2                      1.02006675561908

 

  • CSC(x)     余割(cosecant)

FOR A=-4*3.14 TO 4*3.14 STEP 0.314
   LET B= CSC(A)
   PRINT A,B
NEXT A

END

-12.56                   156.971793891958
-12.246                  3.17542637333988
-11.932                  1.68727761669402
-11.618                  1.23081976729257
-11.304                  1.04952428049049
-10.99                   1.00001553654208
-10.676                  1.05333093862321
-10.362                  1.2408232150097
-10.048                  1.71334243126059
-9.734                   3.28603992331124
-9.42                   -209.29510581941
-9.106                  -3.19074608994767
-8.792                  -1.69093968153593
-8.478                  -1.23222958578549
-8.164                  -1.05005841962119
-7.85                   -1.00000792675691
-7.536                  -1.05277742229546
-7.222                  -1.23937475763297
-6.908                  -1.70955663437098
-6.594                  -3.26974342380229
-6.28                    313.9419951209
-5.966                   3.20622251402292
-5.652                   1.69462198506887
-5.338                   1.23364577046654
-5.024                   1.05059576895272
-4.71                    1.00000285362043
-4.396                   1.05222715501792
-4.082                   1.23793281439658
-3.768                   1.70579184804765
-3.454                   3.25361597772142
-3.14                   -627.883193913827
-2.826                  -3.22185801605727
-2.512                  -1.69832467854288
-2.198                  -1.23506835050758
-1.884                  -1.05113633614402
-1.57                   -1.00000031706827
-1.256                  -1.05168012890922
-.942                   -1.23649735528802
-.628                   -1.70204791475075
-.314                   -3.23765501464745

 

  • DATE     日付

PRINT DATE

END

 19161

 

  • DEG(x)     ラジアンを度に変換

FOR A= -PI TO PI STEP 0.1*PI
 LET B=DEG(A)
  PRINT A,B
NEXT A

END

-3.14159265358979       -180
-2.82743338823081       -162
-2.51327412287183       -144
-2.19911485751285       -126
-1.88495559215387       -108
-1.57079632679489       -89.9999999999996
-1.25663706143591       -71.9999999999996
-.942477796076931       -53.9999999999996
-.628318530717952       -35.9999999999996
-.314159265358973       -17.9999999999996
 .000000000000006        3.43774677078494E-13
 .314159265358985        18.0000000000003
 .628318530717964        36.0000000000003
 .942477796076943        54.0000000000003
 1.25663706143592        72.0000000000002
 1.5707963267949         90.0000000000002
 1.88495559215388        108
 2.19911485751286        126
 2.51327412287184        144
 2.82743338823082        162 

 

 

 

 

 

 

 

 

 

 

 


EPS(x)     直前直後の数との差
EXP(x)     指数関数
FP(x)     小数部分
INT(x)     xを超えない最大の整数
IP(x)     整数部分
LOG(x)     自然対数
LOG10(x)     常用対数
LOG2(x)     2を底とする対数
MAX(x,y)     大きい方
MAXNUM     最大の有限数
MIN(x,y)     小さいほう
MOD(x,y)     剰余
PI     円周率π
RAD(x)     度をラジアンに変換
REMAINDER(x,y)     剰余
RND     乱数
ROUND(x,n)     小数点以下n桁に丸める
SEC(x)     正割(secant)
SGN(x)     符号(sign)
SIN(x)     正弦
SINH(x)     双曲線正弦
SQR(x)     平方根(SQuare Root)
TAN(x)     正接
TANH(x)     双曲線正接
TIME     時刻
TRUNCATE(x,n)     切り捨て

 

OPTION ANGLE DEGREES 三角関数の角の大きさの単位を度(°)にする。
OPTION ANGLE RADIANS 三角関数の角の大きさの単位をラジアンにする。
ANGLE DEGREESを選択すると,COS(90),SIN(180)などは正確に0になります。

☆ 組込み関数の計算結果の正確さについても,JISの規定を満たすことを目標としています。
今のところ,反例は見つかっていません。(Virtual PC上で動作させた場合を除く)
(組込み関数の正確さは,FPUに依存する場合があります。非IntelなCPUをご使用の場合はご注意ください。)



・文字列

文字列組込み関数(JISが定める組込み関数をすべて用意しています)
CHR$(m)     文字コードmに対応する文字
DATE$    日付
LCASE$(a$)    小文字に変換
LEN(a$)     長さ
LTRIM$(a$)    左空白削除
ORD(a$)    a$の文字コード
POS(a$,b$)    a$におけるb$の位置
REPEAT$(A$,m)    反復文字列
RTRIM$(a$)    右空白削除
STR$(x)    文字列
TIME$    時刻
UCASE$(a$)    小文字に変換
USING$(a$,x)    書式化
VAL(a$)    数値化

部分文字列指定にも対応しています。
s$を文字列変数,a,bを数値式とするとき,s$(a:b)はs$のa文字目からb文字目までの部分文字列を表す。
LET s$(a:b)=文字列式 の形式で,部分文字列の置換も可能。
配列・行列演算
MAT A=B     代入
MAT A=B+C     行列演算(和)
MAT A=B-C     行列演算(差)
MAT A=B*C     行列演算(積)
MAT A=x*B     行列のスカラ倍
MAT A=ZER     零行列代入
MAT A=IDN     単位行列代入
MAT A=CON     定数行列代入
MAT A=INV(B)     逆行列
MAT A=TRN(B)     転置行列
DET(A)     行列式
DOT(A,B)     内積


・組込関数


LBOUND(M,i)     配列Mの第i次元の添字の下限
UBOUND(M,i)     配列Mの第i次元の添字の上限
SIZE(M,i)     配列Mの第i次元の要素数
SIZE(M)     配列Mの全要素数
MAXSIZE(M)    配列Mで許される要素数の上限

文字列mat文も使えます。



制御構造

FOR~NEXT
DO~LOOP
IF~ELSE~ELSEIF~END IF
SELECT~CASE~END SELECT

制御文

EXIT FOR
EXIT DO
GOTO
GOSUB
RETURN
ON GOTO
ON GOSUB

 



プログラム分割

DEF文
内部関数定義(FUNCTION ~ END FUNCTION)
外部関数定義(EXTERNAL FUNCTION ~ END FUNCTION)
内部副プログラム(SUB ~ END SUB)
外部副プログラム(EXTERNAL SUB ~ END SUB)
モジュール(MODULE ~ END MODULE)

CALL文 (副プログラム呼出し)
手続きの再帰呼び出しが可能です。

☆CHAIN文に配列を引数として渡すこともできるようになりました。 ver. 5.4.4

 



入出力

INPUT
LINE INPUT
CHARACTER INPUT
READ
PRINT
PRINT USING

配列入出力の機能を用意しています。不定長ベクトルにも対応。

MAT READ A
MAT PRINT A
MAT INPUT A

PRINT文の実行結果は独立したウィンドウに出力されます。
行数の制限はありません。縦横にスクロールして全体を見ることができます。

メニュー選択で出力結果を印刷したり,クリップボードに貼り付けたりすることができます。

 



ファイル

JIS Full BASIC 中核機能単位の要求を満たします。
表示形式ファイル(普通のテキストファイル),順編成内部形式ファイル(本BASICではCSV),流れ編成内部形式ファイルが使えます。
経路を副プログラムの引数にすることができます。

OPEN文
CLOSE文
ERASE文
WRITE文
READ文
SET MARGIN
SET ZONEWIDTH
SET POINTER
ASK文(MARGIN, ZONEWIDTH, POINTER, NAME, ACCESS, RECTYPE, ORGANIZATIONなど)

★ 拡充ファイルとして規定される範囲には対応しません。
すなわち,相対編成,索引編成ファイル,固有形式ファイルは使えません。

※ Windows版は,COMポート(RS-232C)をファイルとして扱うことができます。



例外状態処理

JISが定める構造化例外状態処理が使えます。

WHEN EXCEPTION IN ~ USE ~ END WHEN
WHEN USE ~ END WHEN
HANDLER ~ END HANDLER
CAUSE EXCEPTION
EXIT HANDLER
CONTINUE文
RETRY文
EXTYPE関数
EXLINE関数

手続き定義中で処理されなかった例外を呼び出し元に伝達する機構を備えています。

 



図形

問題座標系によるグラフィック機能を提供します。

SET WINDOW
SET VIEWPORT
SET DEVICE WINDOW
SET DEVICE VIEWPORT
SET LINE COLOR
SET POINT COLOR
SET AREA COLOR
SET TEXT COLOR
SET COLOR MIX
SET LINE STYLE
SET POINT STYLE
SET TEXT JUSUTIFY
SET TEXT HEIGHT
SET TEXT ANGLE ver. 4.9.7
ASK文(ASK WINDOW など)
PLOT LINES
PLOT POINTS
PLOT AREA
PLOT TEXT
GET POINT
MAT PLOT LINES
MAT PLOT POINTS
MAT PLOT AREA
MAT PLOT CELLS
ASK PIXEL VALUE
ASK PIXEL ARRAY
ASK PIXEL SIZE
CLEAR
LOCATE CHOICE ver. 5.5.0
LOCATE VALUE ver. 5.5.0
MAT GET POINT ver. 5.5.2

絵定義とDRAW文
内部絵定義(PICTURE ~ END PICTURE)
外部絵定義(EXTERNAL PICTURE ~ END PICTURE)
図形変形関数:DRAW文で次の関数が使えます。合成も可能。
SHIFT(a,b)    平行移動
SCALE(a,b)    拡大縮小
SCALE(a)    拡大縮小
ROTATE(a)    回転
SHEAR(a)    せん断
4行4列の行列を指定して射影変換も実行できます。 ver. 5.8.4

図形出力ウィンドウの下部には最後に実行したSET WINDOW文にもとづいてマウスカーソル位置の座標値を表示します。


メニュー選択で出力結果を印刷したり,クリップボードに貼り付けたりすることができます。

☆ Windows版は,図形の出力先を,ビットマップ(画面表示),メタファイル(サイズ指定),メタファイル(プリンタ参照),プリンタの4つから選べます。
Ver. 5.7.1では,SET VIEWPORT, SET DEVICE WINDOW, SET DEVICE VIEWPORTが,上記全モードで使えるようになりました。
LOCATE POINT, GET POINT, MAT LOCATE POINT, MAT GET POINTは,出力先がビットマップ(画面表示)のときにのみ機能します。

☆図形出力先がビットマップのときのPLOT TEXT文の動作をJISに適合させました。 ver. 7.4.0

 



独自の拡張
扱う数値は5つのモードから一つ選択

1) 十進15桁モード(JIS)。十進小数を正確に扱う。すべての組込み関数が使える。

2) 十進1000桁モード。1000桁までの十進小数を正確に扱う。加減乗除,整数べきと平方根の計算が可能。

3) 2進およそ16桁モード。FPUの2進演算を利用して高速に計算する。すべての組込み関数が使える。

4) 複素数モード。一部の組込み関数の定義域が拡張される点を除くと2進16桁モードと同じように動く。

5) 有理数モード。有理数の加減乗除と整数べき,INTSQR,GCDなど。桁数の上限なし(メモリがあるかぎり計算可能)。
複素数モード

ABS(z),SQR(z),EXP(z),LOG(z)は定義域を複素数に拡張しています。

また,以下の関数を追加しています。

COMPLEX(x,y) 複素数x+yi
RE(z)        実部
IM(z)        虚部
ARG(z)       偏角
CONJ(z)      共役複素数

図形変形関数SCALEとSHIFTを拡張して複素数による図形変形が直接扱えるようにしています。

 



有理数モード

有理数モードでは,多倍長の有理数演算ができます。

また,有理数モード専用の関数として次の関数があります。

INTSQR(x) xの正の平方根の小数点以下を切り捨てた数値
NUMER(x)  xの分子
DENOM(x)  xの分母
GCD(x,y)  xとyの最大公約数


文法

標準(JIS Full BASIC),旧JIS基本BASIC互換,Microsoft互換の3モードから選択。

標準(JIS Full BASIC)モードでは,JISに従います。

旧JIS基本BASIC互換モードでは,暗黙の配列宣言を許容し,配列添字の下限を0とします。

Microsoft互換のモードでは,次のような構文を許容します。
(N88BASIC,Quick BASICなどとの互換モードです)
    代入文におけるLETの省略
    マルチステートメント
    IF文のネスト
    NEXT変数の省略
    INPUT "文字列";変数
    PRINT USING "書式";
    LPRINT
    数値式における単項マイナス
    算術演算の MOD ,\
    文字列連結演算子の+
    比較演算とAND,OR,NOTの各演算を真のとき-1,偽のとき0の数値演算として扱う
    条件に数値式を書く
    'による注釈
    一部の描画命令(WINDOW,PSET,LINE,COLOR,SCREEN,CLS, CIRCLE, PAINT)
    RANDOMIZE seed

 


自動修正

マイクロソフト構文の自動修正
マイクロソフト文法で書かれたプログラムをJISで許される形に書き換える機能を用意しています。
Microsoft互換モードで実行可能なプログラムは,次に示すものを除いて自動修正が可能です。

    条件として数値式を書いたもの
    比較式,論理式を数値として扱うもの
    変数名の末尾に%や!,#を附加したもの
    LPRINT
    描画命令


自動インデント
通常,翻訳時に区構造に従ってプログラムテキストが自動的にインデントされます。

GUIによるデバッグ機能

言語によるデバッグ機能(DEBUG ON, BREAK, TRACE ON)のほかに,GUIによるデバッグ機能を用意しています。
プログラムの実行中は実行メニューから中断を選ぶか中断ボタンをクリックすることでデバッグ状態に移行できます。
ステップ実行を選んで最初からデバッグ状態でプログラムを起動することもできます。
デバッグウィンドウでは,ブレークポイントの設定,トレースの有無の設定,ステップ実行の履歴の表示などができます。
トレースウィンドウには実行した行とその結果変化した変数の値を表示します。

 


Windows版の特殊機能
外部DLL呼び出し(Win32 APIが利用可能)
OLEオートメーション(非表示のOCXの利用が可能)

 

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する