ウェブ家の備忘録

ウェブデザイナーの備忘録

高専の問題 変数A、B、Cから最も数字の多い変数を出力

 元問題は回答にC++を要求してたけれどJavaScriptで回答します。要領は同じだと信じて。
 こういうコード考えてると止まらなくなりますよね。

■学習進度的に想定していると思われる答え
<script>
  //初期値
  var A=10,B=20,C=0;
  
  //処理
  if(A>B){
    //A>B
    if(A>C){
      //A>B,A>C
      document.write("一番数字が大きい変数はA : "+A);
    }else{
      //C>A>B
      document.write("一番数字が大きい変数はC : "+C);
    }
  }else{
    //B>A
    if(B>C){
      //B>A,B>C
      document.write("一番数字が大きい変数はB : "+B);      
    }else{
      //C>B>A
      document.write("一番数字が大きい変数はC : "+C);
    }
  }
</script>
可読性悪い
■配列に入れる
<script>
  //初期値
  var A=10,B=20,C=0;
  var most=["",0];
  
  //処理
  if(A>most[1]){most[0]="A"; most[1]=A;}
  if(B>most[1]){most[0]="B"; most[1]=B;}
  if(C>most[1]){most[0]="C"; most[1]=C;}
  
  document.write("一番数字が大きい変数は"+most[0]+" : "+most[1]);
</script>
■for文の中でABCをASCIIコードで
<script>
  // 初期値
  var A=10,B=20,C=0;
  var most=["",0];
  
  // 処理
  for(var i=65; i<=67; i++) { //ASCIIコード65〜67は'A'~'C'
    var alp=String.fromCharCode(i);
    var alpVal=eval(alp);
    
    if (alpVal>most[1]) {most[0]=alp,most[1]=alpVal;}
  }
  
  document.write("一番数字が大きい変数は"+most[0]+" : "+most[1]);
</script>
■if分の条件式にAND
<script>
  //初期値
  var A=10,B=20,C=0;
  
  //処理
  if(A>B && A>C)document.write("一番数字が大きい変数はA : "+A);
  if(B>A && B>C)document.write("一番数字が大きい変数はB : "+B);
  if(C>A && C>B)document.write("一番数字が大きい変数はC : "+C);
</script>

アルファベットの変数がより多くなる場合はfor文の中でASCIIコードを回すのが一番保守性と可読性高いですね。まあeval使っちゃってるけれども。

■JavaScript的回答
<script>
let variables={A:10, B:20, C:0};
let maxVar=Object.keys(variables).reduce((a, b) => variables[a] > variables[b] ? a : b);
console.log(`一番数字が大きい変数は${maxVar} : ${variables[maxVar]}`);
</script>