5. forループとif文(3)
近代オリンピック(夏季)の開催年と第何回開催(第Nオリンピアード)かを出力するプログラムを出力してください。
ただし、開催されなかった年は出力しないこと。
開催されなかった場合もオリンピアードの回数はカウントされるので、2020年(東京)は第32回となります。
条件)
第1回は1896年(アテネ)。
第6回(1916年:ベルリン)は第一次世界大戦により開催されなかった。
第12回(1940年:ヘルシンキ), 第13回(1944年:ロンドン)は第二次世界大戦により開催されなかった。
第1回(1896年)から第32回までから6,12,13の3つを除外する。
for (var i = 1; i <= 32; i++){
if ( (i == 6) || (i == 12) || (i == 13) ){
} else if (i >= 10){
document.writeln("第" + i + "回 " + (1892 + i * 4) + "年");
}else{
document.writeln("第 " + i + "回 " + (1892 + i * 4) + "年");
}
}
最初に考えたのがこの形だが if, else if で繋ぐ形と下の if を入れ子状にするのではどちらが良いのだろうか。
for (var i = 1; i <= 32; i++){
if ( (i != 6) || (i != 12) || (i != 13) ){
if (i >= 10){
document.writeln("第" + i + "回 " + (1892 + i * 4) + "年");
}else{
document.writeln("第 " + i + "回 " + (1892 + i * 4) + "年");
}
}
}
また、次のようにすれば無駄な分岐を減らすことができるが条件文はやや面倒な形になる。
更に10以上と10未満のどちらも記述しなければならない点が気になる。
for (var i = 1; i <= 32; i++){
if ( (i >= 10) && (i != 12) && (i != 13) ){
document.writeln("第" + i + "回 " + (1892 + i * 4) + "年");
} else if ( (i < 10) && (i != 6) ){
document.writeln("第 " + i + "回 " + (1892 + i * 4) + "年");
}
}