数学、無料のオンライン学習塾

主に数学と数学に関するプログラミングを扱っています。小学生~大学入試までの算数と数学の問題と詳しい解説をしていきます。

javascriptで分数を約分する関数を作っておく

~約分の関数を作っておく~

平方根の足し算引き算プログラムを作っていたら気付きました。 同じ処理は一つの関数にまとめておいた方がいいなと。 っというわけで今回はjavascriptで分数を約分する関数を作っておきます。


目次を開く


レベル1 約分の仕組み

実は数学関係のプログラムを作るには一つ一つの数学の事象についての深い理解が必要なんです。笑

約分ですらあなどってはいけません!

なんせそれで機械を動かすので

プログラムを作ることによって数学も強くなると思っています。


約分とは分数の分母、分子を2~で順番で割っていって割り切れなくなったら終わり、ですよね。

例えば

分母が30 分子が20の場合

分母は

\[ 30÷2=15 \] \[ 15÷5=3 \]

分子は

\[ 20÷2=10 \] \[ 10÷5=2 \]

で約分はおわりですよね。

つまり数字を2から順番に割っていって同じ数字で割り切れた所で

またその数字を2から順番に割っていけばいいのです。


レベル2 カウント変数を用意する

カウント変数を用意してfor文でループさせる時にどの値までループするかを決めておきます。

小さい方の数字までループさせれば大丈夫ですね。

for(var count=2;~~;count++){
//処理内容
}

レベル3 分母、分子の絶対値のどちらが大きいかを判別

絶対値の関数Math.abs(数字)を使ってマイナスの場合も約分できる関数にしておきます。


今回は分母をa,分子をbにします。

まずa,bの絶対値のどちらが小さいかを判別しておきます。

それで小さい方を変数minに入れておきます。

if(Math.abs(b)
var min=Math.abs(b);
}
else if(Math.abs(a)<=Math.abs(b)){
var min=Math.abs(a);
}

レベル4 2~minまでループさせる

毎回a、bを2からminまで順番に割っていって両方が割り切れたらまたその数字をa,bに再代入してcountも2に戻します。

if文の後にcount=1を入れることでfor文ではcount2から始まります。

for(var count=2;count<=min;count++){
      
      if(a%count==0 && b%count==0){
         a=a/count;
         b=b/count;
        count=1;
      }
}

レベル5 関数の返り値を決める

分母の値a,分子の値bを返り値とします。

返り値は複数あるので配列に入れておきます。

  return [a,b];

レベル6 分母が1の時はbの値のみを返す

約分した結果分母が1の時は分子の値bのみを戻します。

if(a==1){
return b;
}
else{
return [a,b];
}

レベル7 -が入ってる場合の計算の処理

-が入ってる場合の計算の処理をします。

どっちも-なら+

どちらが一方が-なら-

-は分子bの方につけておきます

//片方が-なら
if((a>0 && b<0) || (a<0 && b>0)){
//一度どっちも+にしてから
a=Math.abs(a);
b=Math.abs(b);
//bだけ-にする
b=-b;
}
//両方が-なら
else if(a<0 &&b<0){
//どちらも+にする
a=Math.abs(a);
b=Math.abs(b);
}

レベル8 関数名と引数を決める

将来学校で使われることを想定して笑

お子さんでもわかりやすいものにしておきましょう

関数名は

bunsu_yakubun

引数は分母のa,分子のbにしておきます。

function bunsu_yakubun(a,b){
//関数内の処理
}

レベル9 ここまでをまとめて書く

ここまでをまとめて書くと次のようになります。


function bunsu_yakubun(a,b){

//片方が-なら
if((a>0 && b<0) || (a<0 && b>0)){
//一度どっちも+にしてから
a=Math.abs(a);
b=Math.abs(b);
//bだけ-にする
b=-b;
}
//両方が-なら
else if(a<0 &&b<0){
//どちらも+にする
a=Math.abs(a);
b=Math.abs(b);
}

if(Math.abs(b)< Math.abs(a)){
var min=Math.abs(b);
}
else if(Math.abs(a)<= Math.abs(b)){
var min=Math.abs(a);
}
    for(var count=2;count<= min;count++){
      
      if(a%count==0 && b%count==0){
         a=a/count;
         b=b/count;
        count=1;
        }
   }//ループ終わり


    if(a==1){
       return b;
     }
     else{
      return [a,b];
     }
}


レベル10 関数に関する説明文を書く

この関数は分数を約分できる関数です。
bunsu_yakubun(分母の値,分子の値);と入力することで
約分が完了した分母,分子の値が配列として戻ってきます。
ただし分母が1の場合は分子のみの値が戻ってきます。
またどちらかが-の場合分子の値に-がついて返ってきます。

レベル11 実際の使い方

var kekka=bunsu_yakubun(8,10);

などと入力することで

4,5

が変数kekkaに配列として入ってきます。

めちゃめちゃ便利ですね笑


レベル12 みんなが使えるようにしておきます。

分母aを入力して下さい。(マイナスOK)
分子bを入力して下さい。(マイナスOK)