forked from spica-git/ReversePolishNotation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
demo.html
104 lines (89 loc) · 2.91 KB
/
demo.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>
<html>
<head>
<title>逆ポーランド記法計算機</title>
<script src="rpn.min.js"></script>
</head>
<script>
function SetExp(val){
document.getElementById("exp").value = val || "";
}
function GenRPN(val){
if(val){
val = rpn.Generate(val);
}
else{
val = rpn.Generate(document.getElementById("exp").value);
}
document.getElementById("rpn-exp").value = val;
}
function CalcRPN(){
var val = rpn(document.getElementById("rpn-exp").value);
document.getElementById("result").value = val;
}
//----------------------------------------
// 演算機能の追加
rpn
//円周率取得
.SetOperate("PI", 0, function(){ return Math.PI; })
//サイン取得(角度を引数として取る)
.SetOperate("sin", 1, function(arg1){ return Math.sin(arg1*(Math.PI/180)); })
//コサイン取得(角度を引数として取る)
.SetOperate("cos", 1, function(arg1){ return Math.cos(arg1*(Math.PI/180)); })
//文字列を数値化
.SetOperate("toNum", 1, function(arg1){
if(typeof arg1 === "number"){ return arg1; }
arg1 = arg1.toString();
if(isNaN(arg1)){ return arg1; }
return arg1.indexOf("0x") != -1 ? parseInt(arg1, 10) : parseFloat(arg1);
})
//数値を文字列化
.SetOperate("toStr", 1, function(arg1){ return arg1.toString(); })
//数値を文字列として結合してから再度数値化して返す(引数ふたつ)
.SetOperate("merge", 2,
function(arg1, arg2){
return parseInt(arg1.toString() + arg2.toString(), 10);
}
);
</script>
<body>
<div style="padding:32px;">
<p style="white-space: pre-wrap;">
逆ポーランド記法計算機です
(精度はJavascriptの動作に依存)
・使える演算子
( ) + - * / % << >> & ^ |
** (※べき乗)
~ (※ビット反転)
計算式のサンプル
ex) <button onClick="SetExp(this.innerText)">2 * (5 + 7)</button>
・サンプル定義済みコマンド
PI → 円周率
ex) <button onClick="SetExp(this.innerText)">PI</button>
cos → コサイン
ex) <button onClick="SetExp(this.innerText)">cos 60</button>
sin → サイン
ex) <button onClick="SetExp(this.innerText)">sin (45 + 45)</button>
toStr → 文字列変換
toNum → 数値変換
merge → 2つの数値を文字列結合してから数値化
ex) <button onClick="SetExp(this.innerText)">toNum(toStr(2 + 1) + 0) * merge(3,4)</button>
</p>
<p>
計算式(中置記法)<br>
<input id="exp" type="text" style="padding:4px; min-width:20rem; width:80%"></input><br>
<button onClick="GenRPN();">逆ポーランド記法の式を生成</button>
<p id="exp"></p>
</p>
<p>
逆ポーランド記法の式<br>
<input id="rpn-exp" type="text" style="padding:4px; min-width:20rem; width:80%"></input><br>
<button id="sa" onClick="CalcRPN();">演算実行</button>
</p>
<p>
計算結果<br>
<input id="result" type="text" style="padding:4px; min-width:20rem; width:80%"></input>
</p>
</div>
</body>