勉強の得意な初心者が1次方程式の答えがわかるjavascriptの関数を作ってみた
~初心者がjavascriptの関数を作ってみた~
今回はjavascriptの初心者が数式に関する関数を作ってみてます。
学生のみなさんは数学の宿題が楽になるかもしれません。笑
目次を開く
レベル1 関数の作り方
関数を作るのは意外に簡単で
function 関数名(引数,引数,・・・・){ //処理内容 return 戻り値; }
で作れます。
私の実験によると関数名の初めは数字だとプログラムが動いてくれないので注意しましょう。
私はそれでつまりました。
レベル2 1次方程式の解はどうやって求まるか
では一次方程式の解を求める関数を作っていきます。
私は勉強が得意なので本領発揮です。笑
一次方程式 \(ax+b=0\) の解は \[ x = -\frac{b}{a} \] ですよね。
つまりaとbを引数に指定して答えを戻り値に設定すればいいわけです。
ただしプログラムにそのまま計算させてしまうと答えが小数点とかになっちゃうのでダメです。
NGな例
var ans=(a/b);
これだと例えばa=3 b=5だと0.6が戻り値として返ってきてしまいます。
かといって数値のまま表示すると約分がされてません。
つまり分子、分母共に2,3,4,5,6,7・・・と分子、分母のどちらか数の少ない方の数値まで割っていってどちらも余りが0であればその数で分子、分母を割ればいいわけです。
レベル3 +-の判定
約分計算する時にプラスマイナスが混在すると計算がしにくいので一度分母、分子ともに+にしておきます。
変数sina,sinbを関数の引数とします。
if(sina<0){ a=-sina; } if(sinb<0){ b=-sinb; }
レベル4 分子 分母の数の比較
分母がa 分子がbです。
if(b<=a){ if(b<=a){ var mincount=b; } else{ var mincount=a; }
やっていることは分子、分母の数を比較して小さい方を変数mincountに入れています。
レベル5 余りが0かどうかの判定をする
分子、分母共に2~mincountまで割っていって余りがどちらも0なら約分をし約分した結果を元に一回ずつmincountを再計算しています。余りがどちらも0になった場合のみcountも毎回1に戻して再ループしてます。
countを2ではなくて1に戻す理由はfor文のはじめに帰った時にcount2だとcount3からはじまってしまうからです。プログラムを実行してた時に気付きました。
for(var count=2; count<=mincount; count++){ if(a%count==0 && b%count==0){ a=a/count; b=b/count; if(b<=a){ mincount=b; } else{ mincount=a; } count=1; } }
レベル6 出てきた数値を戻り値とする
あとは+-を戻して結果をそのままのa/bの形で出力するだけです。
一次関数なので符号を調整してます。
if(sina<0 || sinb<0){ var ans=(a+ " /" +b); } else{ var ans=("-"+a+ " /" +b); } return ans;
レベル7 ここまでのプログラムをまとめて書く
function houtei(sina,sinb){ if(sina<0){ a=-sina; } if(sinb<0){ b=-sinb; } if(b<=a){ var mincount=b; } else{ var mincount=a; } for(var count=2; count<=mincount; count++){ if(a%count==0 && b%count==0){ a=a/count; b=b/count; if(b<=a){ mincount=b; } else{ mincount=a; } count=1; } } if(sina<0 || sinb<0){ var ans=(a+ " /" +b); } else{ var ans=("-"+a+ " /" +b); } return ans; }
レベル8 関数を呼び出す
関数を呼び出すのは意外と簡単です。
関数名(引数,引数,・・・・・);
で呼び出すことができます。
ここでは関数名はhouteiなので
alert(houtei(8,10));
などと記述すると答えが
4/5と出てきます。
疲れたので一度アップしますが、実際にみなさんが計算できるように改良してみます。
レベル9 〇/1になった場合の処理をする
よく考えたら計算結果が〇/1や-〇/1になった時そのまま答えになるとおかしいですよね。
ってことで次の記述を最後に追加しました。
ここでも一次関数なので符号には注意します。
if(b==1 && (sina>0 && sinb>0)){ ans=-a; } else if(b==1 &&(sina<0 && sinb<0)){ ans=-a; } else if(b==1 &&(sina<0 || sinb<0)){ ans=a; } }else{ if(sina<0 || sinb<0){ var ans=(a+ " /" +b); } else{ var ans=("-"+a+ " /" +b); } }
これで解決です。
レベル10 実際にみんなが計算できるようにする
入力する所を作って実行結果をクリックするボタンを作ります。
一次方程式 \(ax+b=0\) の解 \[ x = -\frac{b}{a} \]
を求める場合は以下の入力欄に入力し、答えを見るをクリックして下さい。aを入力してください<input type="text" id="a" size=20" name="a"> bを入力してください<input type="text" id="b" size=20" name="b"> <button onclick="myans()">答えを見る</button>
実際の見た目は次のようになります。
aを入力して下さい。bを入力して下さい。
実際にプログラムが動くので入力してみて下さい。
javascriptのコードは次のようになります。
function myans() { var aa=document.getElementById('a').value; var bb=document.getElementById('b').value; alert(houtei(aa,bb)); }