色々な繰り返しを作る前に、繰り返しの中で重要な3つの要素について説明します。
前回のプログラムを見ながら進めていきましょう。
<sample program 030-01>
#include <stdio.h> int main(void) { int counter; counter = 0; /* @ */ while (counter < 10) { /* A */ printf("%d\n", counter); counter = counter + 1; /* B */ } return 0; } |
前回のプログラムのポイントに番号をつけてみました。
繰り返しのプログラムの中で、非常に重要なポイントは上の@〜Bの部分です。
特に「カウンタ」という名前で紹介した部分ですが、それぞれの名称は、
@ 初期値
A 繰り返し条件
B 増分
といいます。
@ 初期値
これは、「カウンタをどの数値から数え始めるか」という部分です。
例えば、次のプログラムを見てください。
<sample program 031-01>
#include <stdio.h> int main(void) { int counter; counter = 1; while (counter < 10) { printf("%d\n", counter); counter = counter + 1; } return 0; } |
<実行結果>
1 2 3 4 5 6 7 8 9 続行するには何かキーを押してください・・・
カウンタ用変数counterが1から始まっています。
結果を見ると、<sample program 030-01>と違い、1〜9までの数値が表示されています。
繰り返しの回数も9回ですよね?(しっかり確認してみてください)
初期値が異なれば、繰り返し回数も異なり、表示される数値も変わります。
詳しく書くと、「カウンタ」は1から始まって10より小さい間1ずつ増えるという形になっています。
次はAの「繰り返し条件」を変えてみます。
<sample program 031-02>
#include <stdio.h> int main(void) { int counter; counter = 0; while (counter < 9) { printf("%d\n", counter); counter = counter + 1; } return 0; } |
<実行結果>
0 1 2 3 4 5 6 7 8 続行するには何かキーを押してください・・・
初期値は0ですが、「繰り返し条件」が ( counter < 9 ) となっています。
結果は、0〜8まで表示されていますよね。
当然、「カウンタ」は0から始まって9より小さい間1ずつ増えるのですから、このような結果になります。
次は「増分」を変えてみます。
<sample program 031-03>
#include <stdio.h> int main(void) { int counter; counter = 0; while (counter < 10) { printf("%d\n", counter); counter = counter + 2; } return 0; } |
<実行結果>
0 2 4 6 8 続行するには何かキーを押してください・・・
随分変わりましたね。
「カウンタ」は0から始まって10より小さい間2ずつ増えるという形に変えました。
数を数える場合、1ずつ数える場合もあれば、2ずつ数える場合もあるということです。
このように「カウンタ」には@初期値、A繰り返し条件、B増分という3つの重要なポイントがあります。
この3つの要素は繰り返しを作る上で忘れてはならない重要な要素です。
皆さんが色々なプログラムを作ろうとした時に、繰り返しを避けては通れません。
極端な話、プログラムを作るということは、コンピュータに繰り返し作業させる手順を教えるということです。
人間が面倒だと思う作業をコンピュータに行ってもらう場合を考えてみると、人間が面倒だと思うことは単調な繰り返し作業がほとんどです。
以前にも書きましたが、コンピュータは単純な繰り返し作業が得意です。
手順さえ教えてあげれば、延々と作業を繰り返します。
その手順を教えるのがプログラムであり、手順を教える仕事がプログラマなのです。
ですから、どこをどう変えれば、どのように動作するのかといったプログラムの基礎をしっかりと身に付けてください。
もう少し色々なバリエーションを見てみましょう。
例えば、Bの「増分」ですが、「増」という言葉だけで、「増える」というイメージを持つと思いますが、もう少し柔軟に考えてみると「増やす」という言葉にはもっと違った考え方もあります。
「足す」というと「増える」というイメージを持ってしまいがちですが、「−1」ずつ増やすというイメージが持てますか?
計算式で例を書いてみます。
5 + ( −1 )
これは「足して」いますよね?
ただし、結果は「4」ですから「引かれて」もいます。
書き方を変えると、
5 − 1
と同じですね。
「柔軟に」というのは、このようなことを言います。
「増分」とは必ずしも「増やす」ことではないのです。
これを踏まえて、次のプログラムの結果を考えてみてください。
#include <stdio.h> int main(void) { int counter; counter = 10; while (counter > 0) { printf("%d\n", counter); counter = counter - 1; } return 0; } |
<実行結果>
10 9 8 7 6 5 4 3 2 1 続行するには何かキーを押してください・・・
難しかったかも知れませんが、「カウンタ」は10から始まり、0より大きい間1ずつ減るということです。
基本的な考え方は変わっていません。
要は基本をしっかりと身につけていれば問題ない訳です。
逆に基本が分からないまま続けて行っても、少し形が変わっただけで理解できなくなります。
「見た目」だけでなく「仕組み」を理解してください。
では少し練習してみましょう。
プログラムは「結果」が重要ですから、問題を出す時には「このような結果が表示されるプログラムを作る」という形で出します。
では、「10〜30まで表示する」プログラムを作ってみてください。
解答例です。
<sample program 031-05>
#include <stdio.h> int main(void) { int counter; counter = 10; while (counter < 31) { printf("%d\n", counter); counter = counter + 1; } return 0; } |
<実行結果>
10 11 12 13 14 15 16 ・ ・ (省略しています) ・ 28 29 30 続行するには何かキーを押してください・・・
では、「−10から+10まで表示する」プログラムはどうでしょうか?
解答例です。
<sample program 031-06>
#include <stdio.h> int main(void) { int counter; counter = -10; while (counter < 11) { printf("%d\n", counter); counter = counter + 1; } return 0; } |
<実行結果>
-10 -9 -8 -7 ・ ・ (省略しています) ・ 8 9 10 続行するには何かキーを押してください・・・
では、最後に「10から0まで表示する」プログラムを作ってください。
解答例です。
<sample program 031-07>
#include <stdio.h> int main(void) { int counter; counter = 10; while (counter > -1) { printf("%d\n", counter); counter = counter - 1; } return 0; } |
<実行結果>
10 9 8 7 6 5 4 3 2 1 0 続行するには何かキーを押してください・・・
大事なことは「雰囲気で作らない」ということです。
きっちりと考えて、絶対こうなる!という確信を持って作ることが重要です。
「多分こうなるんじゃないかな?」とか「きっとこうなるよ」で作らず、初期値はこう!繰り返し条件はこう!増分はこう!と考えながら作ってください。
雰囲気で作っていると、後々ひどい目に会いますよ(笑)
次回は、繰り返しの手順について書きます。