実みつるのPreプログラミング

プログラミングの学習を考えている方へ

4-1 同じことを繰り返す

第四章 繰り返し

何かを繰り返し行うというのは大変なことだと思います。特に飽きっぽい性格の人は、途中でやめたくなるでしょう。しかしコンピューターは、愚直に何回でも繰り返す事が非常に得意なのです。100回でも1,000回でも10,000回でも繰り返します。

この特性を利用する為には、プログラムで正確に指示する必要が有ります。そこでこの章では「繰り返し」という作業を考えていきたいと思います。

 

(1)同じことを繰り返す

陸上の中距離走競技は、同じ所を何回も周ります。例えば、5,000メートル走は一周400メートルのトラックなら12周半周ります。言い換えると、「トラック1周走ることを12.5回繰り返す」です。

 

ところで、繰り返し作業を行うときに考えなくてはならない重要な要素が有ります。それは「何回繰り返すのか」という事です。今、仮に4,000メートル走という競技が存在したとします。これを一周400メートルのトラックで行うとすれば、選手は10周する事になります。さて出場した選手達は、どうやって「10周する」ことを認識しているのでしょうか。

 

私は実際にこの競技に参加したことが無いので判らないのですが、恐らく選手はスタート地点(ゴール地点にもなります)付近に掲示されている周回表示器を見る、あるいは最後の周回時に鳴らされる鐘の音などを参考にしているのではないでしょうか。選手によっては、頭の中で正確にカウントする人もいるでしょう。

 

もし、これが判らない状況で走っていたら大変なことになります。レースで有れば選手間の駆け引きもあるでしょうし、何より自分のペース配分に影響します。「あと何周でゴール」、すなわち「あと何回繰り返せば良い」という情報は重要です。

 

先ほど、コンピューターは繰り返す事が得意と述べましたが、あまりにも得意すぎるので制御しなくてはならないのです。もし制御に失敗すると暴走してしまい、永遠に繰り返してしまうのです。陸上競技の選手ならいつか疲れ果てて立ち止まるでしょうが、コンピューターは永遠に疲れないので、電気が供給される限り動いてしまいます。

 

そこでコンピューターにも陸上競技で利用している周回数を掲示した板の様な物を用意してあげれば良いのですが、ここでもう少し人間の話を続けます。陸上競技の走者は、仮に周回表示器を使う場合、この表示器が「5」を示していたら、ゴールラインを通過する時に「あと5周走るんだ」と認識します。「1」であれば「あと1周、つまりラストだ」とわかります。

 

コンピューターもこの仕組みを使って繰り返す数を制御できます。但し、人間と違うのは1」という数字を「あと1回」という意味に捉えられないのです。

 

言っている事が良く分からないかもしれません。要するにコンピューターに対しては「あと1回」とか「5回繰り返して」というダイレクトな指示ができないのです。1や5はあくまでも数字の一つで、回数であるという認識をしてくれません。これではせっかくコンピューターが得意としている「繰り返し」を上手くコントロールできません。

 

これを解消する為に、繰り返しを行う場合はコンピューターに「カウンター」を持たせます。よく通行量調査などで利用されるカウンターをイメージして下さい。もし10回繰り返したいと思ったら、まずこのカウンターを0にします。次に1回終わったらカウンターを1回押します。カウンターは1を示します。

 

ここで、先ほどの陸上競技で利用した表示器が出てくるのですが、コンピューターの場合、この表示器の値は固定されています。10回繰り返すのであれば「10」と表示されているだけです。とうてい周回表示器とは言えないのですが、イメージをつかむ為に、あえて周回表示器を利用します。

 

コンピューターはカウンターを1回押す度に、カウンターの値と表示器の値を比較します。もしカウンターの値の方が小さかったら繰り返しを続けます。2回、3回と繰り返す内に、カウンターの値が10になったとします。つまり10回繰り返しが行われた事になります。ここでカウンターの値と表示器の値を比べると、等しくなります。もし繰り返しの条件として、「カウンターの値が表示器の値より小さい間は繰り返す」と設定すれば、10回繰り返したあと無事に止まります。

 

何でそんな面倒な事をするのだと思いますか。しかしこの様にしないとコンピューターは繰り返しを制御できないのです。

 

思えば、陸上競技の選手も「1」という数字を見て「あと1周」と解釈しますが、それには次の様な思考が無意識になされているはずです。

 

(1)周回表示器に1と出ている。

(2)次に1周してくれば、この表示器は0と出すだろう。

(3)0ということは、それ以上走らなくて良いということだ。

(4)つまり、あと1周でゴールということだ。

 

人間の認識にある「0」つまりゴールという状況と、次の周回後に見られると思われる「0」が表示される状況を比べて、あと1周、あと1回繰り返せば良いと考えているのです(もちろん実際にはここまで細かく分析して走ってはいません)。

 

人間は「1」という数字を「1」「1個」「1回」と、場面に応じて色々意味を変えられます。しかしコンピューターにとっては「1」は「1」です。繰り返す回数と、持たせたカウンターにそれぞれ値を設定し、その両者を比較する事で、この数字が「回数」なのだと初めて認識されるのです。

 

最後は少し難しい事を書いてしまいましたが、何となくでも分かってもらえましたでしょうか。次回は繰り返しの途中で、別の事をするということを考えてみます。