反復構造とは「繰り返す」という意味です。
コンピュータは自分で考えることは出来ないということは以前に書きましたが、「繰り返す」という作業はコンピュータの得意とする分野です。
人間であれば、飽きてしまうようなこともコンピュータは文句も言わず、ずっと続けて行ってくれます。
例えば、「1から1億まで1ずつ数えなさい」と言われたらどうしますか?
正直言って、やりたくないですね・・・
しかし、コンピュータは文句も言わずやるのです。(しかも素早く!)
逆に言うと「単調な繰り返し」は、人間が苦手とする分野なのです。
苦手としているため、「繰り返し行う」という指示をすることも難しいのです。
はっきり言うと「C言語を理解する上での壁」があるとすれば、最初の壁は間違いなく「反復構造」でしょう。
ですから、この項目をしっかりと理解することは「最初の壁を越える」ことになります。
「壁を越えれば」さらに広い世界が広がってくると思いますので、しっかりと理解してください。
まずはプログラムでは無く、言葉で例をあげましょう。
特殊な例かも知れませんが「封筒に何かを封入する」という作業を考えて見ます。
人に指示を出す時には、このように伝えるかも知れません。
「この封入物を100個ほど封筒に入れて、あそこへ置いといて」
人に対して指示を出すとすると、これで十分だと思います。
しかし、コンピュータに指示を出すとなると、これだけでは不十分です。
コンピュータには「ニュアンス」は通じません。
例えば100個と言われても「数の数え方」や「100個という概念」を教えなければなりません。
ですから、コンピュータを人間に置き換えて指示を出すとなると(これでも大雑把ですが)以下のようになります。
1.封入物を手に取る 2.封筒を手に取る 3.封筒に封入物を入れる 4.封筒を閉じる 5.何個目か数える 6.100個できてなければ1に戻る、できたら所定の場所に置く |
人に対して、このような指示を出せば「クド」過ぎます。
「そんなことは言われなくても分かってる!」と思われますが、コンピュータにはこれでも大雑把なのです。
自分なりのやり方を持っている方もいるでしょう。
例えば、封入しながら数を数えたり、最初に100通の封筒を取っておき、無くなったら終わりといった具合にです。
それに対して、コンピュータ自身が工夫することはありません。
人間がコンピュータに細かく指示を出さない限り、コンピュータは動いてくれません。
上にも書きましたが、「数の数え方」から教えないといけないのです。
しかし、私達の日常生活で「数の数え方」を改めて考えることは無いでしょう。
考えることが無いため、指示することも難しいのです。
if文のところでも書きましたが、「奇数」と「偶数」の違いを誰かに伝えようとした場合どうしますか?
小さい頃に習ったことでも、それが考えなくても分かるようになれば、逆に説明しづらいと思います。
コンピュータは「方法」さえ教えてあげれば、人間よりも高速に処理が可能です。
要は「方法」を教えてあげる「方法」を考えれば良いのです。
それがプログラムなのです。
小難しい事を書きましたが、具体的なプログラムは次で説明します。