ゼロからはじめるプログラミング講座の第二十五回です。今回はfor文を使ったカウント処理を解説していきます。
カウントアップ処理をしてみよう。
カウントアップとは1→2→3と数字が増えていくような処理のことです。
何か数を数えるときに役に立つ処理です。今回は1~100までの数字で3で割り切れる偶数がいくつあるかを数えてみようと思います。
var cnt = 0
for(var i=1; i<=100; i++){
var a = i % 3
var b = i % 2
if(a == 0 && b == 0){
cnt++
}
}
console.log("3で割り切れる偶数は" + cnt + "個です。")
分かりやすいようにa%3とa%2としていますが3で割り切れる偶数は6の倍数になるのでもちろんa%6としても良いです。
重要なのはcnt++の部分です。if文の条件が真のときはforブロックの外にある変数をインクリメント++で+1してます。これで数を数えることができます。
簡単な処理ですが非常に便利な使い方なのでマスターしましょう。
カウントアップを使ってループを止めてみよう。
次はfor文の外の変数にアクセスしてループを止める処理を作ってみましょう。
先ほどのコードを少し変更して1-100までの数字で3で割り切れる偶数の5番目が何になるかを表示させてみましょう。
var cnt = 0
var out // 結果を入れる変数を宣言しておく
for(var i=1; i<=100; i++){
var a = i % 3
var b = i % 2
if(a == 0 && b == 0){
cnt++
if(cnt == 5){ // 5番目なら
out = i //
i = 101 // iを101にしてfor文を終了させます。
}
}
}
console.log("3で割り切れる偶数の5番目" + out + "です。")
forブロックの外の変数にアクセスできるだからもちろんカウントを確認することもできます。cntが5になったら予め作っておいた変数outに現在の数字(変数i)を代入します。
そしてiを書き換えて強制的にループを終了させています。ループを終了する方法は他にもあるのですがそれは次回説明しようと思います。
練習問題を解いてみよう。
- 1~nまで二乗して7で割り切れる偶数をカウントしていくつあるのかを表示する関数を作りなさい。
- 1問目で作った関数を使いnが100の場合と1000の場合を実行して表示しなさい。
正解するとこうなります。
71
解答例はこうです。(マウスオーバーで表示)
var cnt = 0
function check(num){
cnt = 0 // まずカウントを0に戻します。
for(var i=1; i<=num; i++){ // ループ上限を引数で受けるようにします。
var a = i * i
if(a%7 == 0 && a%2 == 0){
cnt++
}
}
console.log(cnt)
}
check(100)
check(1000)
全問正解しましたか?for文if文と関数も出てきました。今までの知識を組み合わせることで自分でこのような複雑な機能をもった命令を作ることができました。
お疲れ様でした。次回はforループ解説の最後、特殊なループの止め方を解説します。
次も頑張って記事を作るのでチャレンジしてください!
JavaScript #1/#2/#3/#4/#5/#6/#7/#8/#9/#10/#11/#12/#13/#14/#15/#16/#17/#18/#19/#20
質問させてください!
練習問題の解答例の1行目に「var cnt = 0」を入れる理由が知りたいです。
今回の場合、1行目の「var cnt = 0」を削除した状態でも、
1行目を削除し、3行目の「cnt」を「var cnt」とした場合でも同じ結果が出ました。
check(num)関数内でカウントを0に戻す必要があるのはわかったのですが、関数の外(1行目)でcntを宣言すると後々メリットがあったりするのでしょうか?
拙い質問で申し訳ないのですが、ご教授くださいますと幸いです。