トップページに戻る   このページについて   計算機2018 v2

計算機2018 (旧版)

ファイル
開く…
名前を付けて保存…
例1-階乗
例2-樹木
例3-正多角形
例4-正多角形2
例5-サイクロイド曲線
LocalStorage
開く
保存
クリア
表示切替
計算式
Canvas
データ
ログ
説明

      

データ


    

ログ


    

【概要】

漸化式などの反復的な計算ができるHTML5アプリです。

-----------------------------------------

【説明】

基本的な構造は、以下のような形式になります。
命令1 { 式 }
命令2 { 式 }
...
式は逆ポーランド記法で記述します。 語句は半角スペースで区切る必要があります。 関数を呼び出す式では関数名の前に&または@を付けます。 仮引数、引数の欄には引数をスペースで区切って入力します。

@付き関数は引数の個数が可変になります。
呼び出す時にスタックに積まれている変数がすべて渡されます。
@付き関数内からは「"arguments_" 変数 . 」で参照することができます。 「arguments_length」で引数の個数を参照することができます。
-----------------------------------------

命令 : ini , var , do , output , wait , exit , return , if , use
演算子 : + , - , * , / , = , % , . , (>) , (>=) , (==) , (!=) ,(<=) , (<) , (&&) , (||) , exec
関数 :
&sin
&cos
&tan
&asin
&acos
&atan
&atan2
&pow
&sqrt
&exp
&random
&randBetween (引数: 最小値, 最大値, 戻り値:数値)
&log
&ceil
&floor
&abs
&rad (引数:数値, 戻り値:ラジアン)
&deg (引数:数値, 戻り値:度)
&chaAt (引数: 文字列, インデックス , 戻り値:文字)
&length (引数: 文字列, 戻り値: 文字列の長さ)
&convertRadix (引数: 数値, 元の基数 , 変換したい基数 , 戻り値:変換後の数値)
&ins (引数: 文字列1 , index , 文字列2 , 戻り値: 文字列1のindexの位置に文字列2を挿入)
&del (引数: 文字列1 , index , 長さr , 戻り値: 文字列1のindexの位置からr個削除)
&index (引数: 文字列1 , 文字列2 , 検索開始位置 , 戻り値: 文字列2を前方検索した位置)
&lastIndex (引数: 文字列1 , 文字列2 , 検索開始位置 , 戻り値: 文字列2を後方検索した位置)
&substring (引数: 文字列1 , index , 長さ , 戻り値: 文字列1を切り取る長さ-1の場合最後まで切り取る)

&red, &deg はラジアンと度を変換します。
比較演算子と論理演算子は()で囲む必要があります。
. 演算子で文字列を連結できます。連結した文字列を変数名として評価することもできます。

命令 ini は他の命令と組合せて使います。ini の付いた命令は最初に1回だけ実行されます。
【注意】:サブルーチン内にreturnまたはexit命令を書かないと無限ループに入ってしまいます。

【計算式の例 : フィボナッチ数列】

ini var { f1 0 = f2 1 = f3 1 = }
ini output { f1 " " . f2 " " . }
do { f3 f1 f2 + = f1 f2 = f2 f3 = }
output { f3 " " . }

【if 命令と#タグ】

if命令の書式は以下のような形式になります。

if { 条件式1 #タグ1 ; 条件式2 #タグ2 ; ... ; #最後のタグ }

条件式nがtrueの場合#タグnで指定された命令文が実行され、その他のタグの付いた文は実行されません。
条件式がすべてfalseの場合、最後のタグの付いた命令文が実行されます。

【if文の例 : うるう年の判定】

ini var { year 2000 = }
if { year 4 % 0 (==) #u1 ; #h }
#u1 if
{
year 100 % 0 (==) year 400 % 0 (!=) (&&) #h ; #u
}
#h output { year "年は平年です。\n" . }
#u output { year "年は閏年です。\n" . }
do { year 1 += }

【Canvas】

&beginPath (引数: なし)
&moveTo (引数: x座標 , y座標)
&lineTo (引数: x座標 , y座標)
&closePath (引数: なし)
&stroke (引数: なし)
&fill (引数: なし)
&setStrokeStyle (引数: 色)
&setLineWidth (引数: 数値)
&setfillStyle (引数: 色)
&clearCanvas (引数: 色)
&setSize (引数: 幅 , 高さ)
&getWidth (引数:なし , 戻り値: Canvasの幅)
&getHeight (引数:なし , 戻り値: Canvasの高さ)
&getPixelData (引数: x , y , 0-4 , 戻り値: 0-255)
&setPixelData (引数: x , y , 0-4 , 0-255 )

【Canvas描画の例】

ini var { ur 90 &rad = }
ini var { offsetx &getWidth 3 / = }
ini var { offsety &getHeight 3 / = }
ini var { r ur 2 / = l 100 = i 0 = }
ini do { "#66a" &setFillStyle }
ini do { "#0aa" &setStrokeStyle }
ini do { 16 &setLineWidth }
ini var { x r &cos l * = y r &sin l * = }
ini do { &beginPath x offsetx + y offsety + &moveTo }
do { x r &cos l * = y r &sin l * = }
do { x offsetx + y offsety + &lineTo &stroke }
do { r r ur + = i i 1 + = }
if { i 4 (>) ; #1 ; }
#1 do { &closePath &fill }
#1 exit { }

【更新履歴】

1.1.7 サンプル計算式の内蔵 (2018/03/11)
1.1.6 可変引数対応など (2018/03/09)
1.1.5 CanvasのAPIと微妙に違っていたのを同じような動作にしました。 (2018/03/07)
1.1.4 evalをdoに変えました。引数を渡す順番が逆になる不具合を修正。ファイルを読み込めない問題を修正。 (2018/03/04)
1.1.1 exitが正しく動作するように修正 (2018/03/04)
1.1 =演算子の仕様変更 名前空間、Canvasの追加 (2018/03/04)
1.0.7 演算子、関数の追加 (2018/03/03)
1.0.6 関数の追加、BigNumberを正しく扱っていない問題を修正 (2018/03/02)
1.0.5 関数定義機能の追加 (2018/03/01)
1.0.3 if命令などを追加、バグ修正 (2018/02/27)
1.0 (2018/02/26)