ループをもう少し直感的に考えてみる




■ループをもう少し直感的に考えてみる
皆さんこんにちは、プロクラスの野間です。
前回は論理的なループの考え方をマイクラ風に説明してみましたが、
今回はもう少し直感的な話をScratch風に説明してみたいと思います。

プロクラスではScratchの無料体験を行っていますが、今回はそこから「正方形を描く」を題材にして説明します。
本ブログの目的からは外れてしまいますのでScratchの基本的な使い方や線の引き方等の説明は割愛します。
もし気が向いたら是非無料体験にご参加ください。

■導入
Scratchで線を引くプログラムはこちらになります。

この部分は準備なので、見る時は飛ばしてください。

実際に線を引いているのはこの部分だけで線を引けますのでここからに注目してください。

※猫が「移動したところに線が引ける」ようになります
ここでは100歩移動しているので長さ100の線が引けています。

さて、いきなりですが、ここで重要なポイントがあります!!
線は「今猫がいるところから移動した分」だけ引かれる点です。
つまり、
ここからプログラムを実行したら・・・

こうなります

ここからプログラムを実行したら・・・

こうなります

では、ここからプログラムを実行したら・・・

どうなるかわかりますよね?

Scratchには向きの指定もあります。
つまり開始時に向いている方向に進みますので、
この向きからプログラムを実行したら・・・

こうなります

この向きからプログラムを実行したら・・・

こうなります

では、この向きからプログラムを実行したら・・・

以下略

※全てプログラムは同じものです。

特に意識しないと当たり前に感じますので重要な気はしないと思いますが、実はこの無意識がネックになりますので、今回はこの点に注目してください。

■実際にやってみよう
それではいきなりですが、次のように線を引きたい場合は何処から何処向きに開始したら良いでしょうか。

馬鹿にしていませんよ?
ちなみに答えは次の2つ(「右から左」と「左から右」)ありますが、両方わかっているでしょうか?

どちらでも良いのですが、説明の都合上、今回はこちらを使用します。

早速ですが最初に紹介したプログラムを実行する事で、まずは線が1つ引けました

正方形を描くためには次はこう描きたい所です。(上方向もあり得ますが、今回は下を選択します)

では次の質問です。
こう描くためには何処から何処向きに開始したら良いでしょうか。

ここも下向きに線を引く方法と、上向きに線を引く方法の2択になりますが、正方形を描くためには「前の手順」が存在します。
今回は既に横線を引いた後に縦線を引きますので・・・

ここから次の線を引くので楽なのはやはり、スタート位置がこのままで始めたい所です。

ではここで「横線を引いた後」と「縦線を引く前」の猫の違いを比べてみます。

何が違うでしょうか?

そう、向きが異なるだけです。
向きを変えるのはこのコマンド

気を付けないといけないのは「下を向く」のではなく、「横を向く」点です。
コマンドとしては次の2つの違いになります。

この先、何度も向きを変えますが「画面の右を向く」「画面の下を向く」「画面の左を向く」「画面の上を向く」・・・ではなく
「猫が横を向く」「猫が横を向く」「猫が横を向く」「猫が横を向く」・・・を使うと同じコマンドで済みます。
違いが判るでしょうか?
片方は今自分がどちらを向いているかに関係なく方向を強制します。
現実問題に照らし合わせると、「北を向く」になるでしょうか。
今どの方向に向いているかに関係なく、「北を向く」と必ず同じ方向になります。

これに対して「横を向く」だと今の方向から横に向くだけなので、「今」によって結果の方向が変わります。

さて、真横を向くのですから今回は90度横に向きます。
次のようになります。

(逆回りもありますが、今回はこちら)

線を引くプログラムと引っ付けると・・・

こうなるのですが、ここで大事な事は「日本語で考える」点が重要です。
つまり、プログラムは上のようになりますが、頭の中では次のように考えます。
①線を引く
②90度横を向く
です。

前回の説明に似てきましたね(笑
そして、次の線を引くわけですね。
①線を引く
②90度横を向く
③線を引く

さて、次は何をしたら良いかわかりますか?


次は横に線を引きたいですよね。

考える手順は先程と同じです。
・何処からどの方向に線を引くか
・直前の動きから楽な開始はどれか
・そのための猫の移動(違い)は何か

まぁ、難しく考えるのが苦手な方は直感的に何をすれば良いかを感じてみてください。
やってきたことを振り返って、次の手順は?です。
①線を引く
②90度横を向く
③線を引く
④●●これは何?●●

まぁ、線を引いたんだから横を向かないとですね。
①線を引く
②90度横を向く
③線を引く
④90度横を向く

そして、次の線を引くために開始位置と方向を調整したのだから次は線を引きたいですよね
①線を引く
②90度横を向く
③線を引く
④90度横を向く
⑤線を引く

さぁさぁさぁ、日本語を見たら何やら法則が見えてきませんか?
直感的に次は何をすれば良いか感じませんか?
同じ手順で考えないと次がわかりませんか?

考え方を変えましょう。
次のように書いてあった場合、続きの予想が付きませんか?

線を引く
90度横を向く
線を引く
90度横を向く


2回目をどこから始めるか。
線は続ける途中からどうするか・・・だけでなく、
単純に「独立した1回を何処から始めるか」を考えて、
1回目の後、2回目の開始にどうやって繋げるかと考える方法もあります。

図形を「正方形」と捉えると繰り返しは見えませんが、
「線」と「曲がり角」と捉えると、なんか「同じことしてるなぁ」と感じると思います。

それを感じたら「同じモノ探し」してみてください。
その際は、細かく考えるのではなく大雑把に同じものを探す事をお勧めします。
細かい事は後から更に分ければ良いのです。
まずは「分類」程度で考えて少しずつ異なる部分を見つけるのがコツです。

同じ事をしているのは・・・
・線を引く
・90度横を向く
これですね

プログラムでは

こうですね

これを繰り返しで囲みます。
今回では線を4回引くので繰り返すのは4回ですね。

では繋げます・・・が
こうではないですよ!

線を引く部分全部で繰り返し回数ですからね?
正方形を書いている途中から更に正方形を書いたら訳わからないでしょ?
(上の文章おかしいですよね?)

なので、正しくはこうなります。

完成ですね

考えるのがめんどい?
対応は見る必要がありますが、何がどう動いているのかは直感的にイメージして頂きたい所です。
こうしたら確かにこうなるよね・・・的な感じ方です。

プログラムは後からでOKなんです。
大事な事は頭の中で動きが出来上がっている事です。
この話は重要なので次回にしたいと思います。