ウッズ及びビャ子から修正した回答が来たので、公開する.三者三様ではあるが、何ら問題は無い.GOODであり、マーベラスである.ついでに俺の回答例も、こそっと掲載しよう.ここまで出来ていれば、先に進んで問題は無さそうだ.最後にお題その2が有るので
回答を考えてみてくれ.
例題1:ウッズ回答例(修正版)
例題1:ビャ子回答例(修正版)
例題1:俺の回答例
我々の様な仕事では、それまでのプロセスは関係ない,どの様な手順を踏もうが、結果に辿り着けば評価されるのである.しかしながら、プログラマは、このプロセスを大事にしたい.そこで、今回提出された回答の中で、ポイントと思われる部分について、記述しておく.
- オブジェクトの値の指定
ビャ子の回答にて使用されている.
function disp(c){
document.MyForm.siki.value=document.MyForm.siki.value+c;
}
|
が示している様に、入力に使用しているテキストボックスは、
var X=document.MyForm.siki.value ;
と言った形で参照出来るのと同時に、
document.MyForm.siki.value="ABCD" ;
の様に、代入も可能である.代入されたものは、即座にページのフォーマット上に反映されるから、ビャ子のプログラムの様に、ボタンを押すと、テキストボックスの内容が追加される様に出来るのである.
- evalの使用
何度も言うが、この関数は、JavaScriptの中でも、強力な実装である.例えば、ビャ子の回答で、一番上のテキストボックスに、ボタンでなく、キー入力で、Math.cos(0),Math.log(10)などと入れて[=]で実行すれば、関数の計算も可能だ.これは即ち、eval("Math.cos(0)")を実行した事になるからだ.因みに、evalの使い方は間違っていないので心配しないように.
- セレクトボックス
ウッズの回答の中で、使われていた<INPUT>以外の入力方法である.場合によっては、コントロール関数が要らない点で、ラジオボタンよりも使い勝手が良い方法である.但し、その値は、<OPTION>で列挙された選択肢の上から順に0,1,2,3・・・となる.・・んだよな?
<FORM NAME="form1">
<SELECT name="how1">
<OPTION>+
<OPTION>−
<OPTION>×
<OPTION>÷
</SELECT></FORM>
|
JavaScriptでの参照は、document.form1.how1.selectedIndexで可能である.
- ラジオボタン
俺の回答の中で、セレクトボックスとは対照的に使用されているのが、ラジオボタンである.なぜ、ラジオボタンと呼ばれるかは、昔のラジオはチャンネルを回すと、丸い穴の中に点が移動して、次の穴に写るという図に似ていたからだと言う.これには、グローバル変数1個と、コントロール関数が必要になってくるが、動作は至って簡単である.同一FORMの中で、同じ名前NAME="RAD1"を付けたラジオボタンは、連動する(どれかがチェックされれば、今までのチェックが外れる仕組みだ).最初にチェックを入れておく部分にはCHECKEDを記述しておく.しかし、ラジオボタンは値(value)を持たないので、現在、何処がチェックされているかを、JavaScriptから参照する事が出来ないのである.そこで、グローバル変数(複数の関数で使用する変数)を宣言(functionの外に宣言すれば良い,その記述より下では、この変数はそのまま使える)して、ラジオボタンをチェックされる度に、その値を変えておく.こうする事によって、その後、計算を実行する段階で、そのグローバル変数を参照すれば、四則演算のどれを行うかが確定出来るのである.
var CVAL=0 ; // ←グローバル変数
function check(num){
CVAL=num ;
}
・・・・
<FORM NAME="form1">
<INPUT TYPE="radio" NAME="RAD1" CHECKED onClick="check(0)">+
<INPUT TYPE="radio" NAME="RAD1" onClick="check(1)">−
<INPUT TYPE="radio" NAME="RAD1" onClick="check(2)">×
<INPUT TYPE="radio" NAME="RAD1" onClick="check(3)">÷<BR>
</FORM>
|
- さて・・例題2である.
今回は、前回の課題の続きで考えてみた.
【課題その2】
前回の計算結果を、次回の計算の実数1に代入出来る様にして、連続して計算出来る様に改良する.
→前回の課題では、回答が出て、その値はそのまま消えてしまった.例えば、12×34−56を計算する時、12×34を実行して、結果を再度テキストボックスに書かなければいけないのは効率が悪い.結果をそのまま反映して、次の計算に進める様にしたい.
また、若干のバグとりを行う.
→俺の例,ウッズの例では、テキストボックスに何も記述されていない状態から計算を行うと、エラーになる.これを上手くクリアしたい.また、0で割った場合の処理を追加したい.
→ビャ子の例では、計算式を、12++34の様に入力すると計算出来ない.入力の段階で、これらを制御したい.
|