SSブログ

ループ(繰り返し)処理の教え方 [プログラム]

初心者にとって、繰り返しの制御構造を理解するのは、条件分岐よりも、ずっと難しいということを、最近書いたが、少し教え方、というか話の仕方を工夫してみた。

 その一。

 Java(でも、Cでもそうだが)のfor文による繰り返しについて。繰り返しの一般形式はwhile文だと思っていた。for文はその特殊な一形態だと思っていたが、実は繰り返しを理解するには、簡単な例題をいろいろと作れるfor文の方が適しているらしい。単に例題が作りやすいだけではなく、繰り返しに関わる条件が最初の条件節に集約されているので、説明もしやすい。K&RもCのfor文について言っていたことだが、今回、それを実感した。

 問題は、

  1. 0から9までの数字を一行に一つずつ表示する。
  2. 0から9までの数字を一行に一つずつ表示し、その各行の数字のあとにコロン、次にアステリスク20個を表示する。
  3. 0から9までの数字を一行に一つずつ表示し、その各行の数字のあとにコロン、次のアステリスクをその行の数字と同じ数だけ表示する。

という順番で徐々に処理内容を増やしていく。

 コンピュータは非常に単細胞だから、複雑なことは理解できない。その代わり、面倒くさい繰り返しは、何の苦労もなくやってのける。そこで、コンピュータへの作業手順の命令は、できる限り単純にしないといけない。

 for文は、一般的には「指折り数えること」のプログラム的表現だと考えられる。0から9まて順番に数字を打ち出すためには、毎回、いくつを打ち出すかを忘れないように、紛れないように、指折り数えていく必要がある。まず0は何も指を折らない。次に、一つで親指を折る。そこで1を打ち出す。次の人差し指を折り曲げて、次を数える。そして2を打ち出す。次に中指を折り曲げ、次の数字3を打ち出す。以下、最後に左手の薬指を折り曲げて9を数えるまで続ける。そして、一つ数える毎に、その数字をprintする。

 for文では、まず「いくつから、いくつまで」数えるかを指定する。数える場合、必ず数え始めと数え終わりを指定しなければならない。forの後の括弧の中の最初の部分に、「いくつから」を書き、セミコロンで区切って「いくつまで」を書く。今の場合だったら、for (int i = 0; i <= 9; ) となる。

 次に、一つの処理を終わる毎に、次の指を折る、という動作が必要である。指折り数えるためには、指を次、次、と折り曲げていかなければならない。というか、次の指を折り曲げる、ということが「数える」という行為なのである。それをJavaでは、for文の最後の部分にi++と書く。

 次の中括弧{が来て、次の行から中括弧閉じ}までの間に、繰り返し行われる処理を書く。最初は、数字iを表示すること。これは簡単だ。

 次は、その繰り返される処理の中で、数字以外に、20個アステリスクを表示する。この場合、人はどうやってアステリスクを20個書き出すだろうか。この場合も、いくつ打ち出したかを指折り数えながら、指を折る毎にアステリスクを一つ書き出すだろう。だから、これも指折り数える繰り返し、つまりfor文を使う。

 今度は、しかし、0から9までの数字を数えていた右手で数え始めてしまうと、さっき数えていた数が分からなくなってしまうので、左手で数えることにする。左手で、0から19まで数えると、これで20個になる。右手とは別の左手で数える、ということは、iではなく、別の数えるための変数jを用意する、ということだ。そこでfor文は、for (int j = 0; j <= 19; j++)になる。0から19まで、jで数えるのである。

 そのあとに書かれる繰り返し処理は、アステリスクを1個打ち出すことである。それを指折り20回数えながら、一度に1個ずつアステリスクを打ち出していく。

 以上のように、forの構文を指折り数えることになぞらえ、実際に指というか手を用意させ、指をおらせ、一回ごとにこれこれを表示する、ということを確認させてから、それをforの構文を書かせる。必ずしも、直ぐに納得するわけではないが、しかし、少なくとも、「説明」としては、うまく行ったのではないかと思う。

 長くなったので、もう一つの説明の仕方については、日を改めて述べよう。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。