見出し画像

13日目。UFOの往復飛行、予想よりむずっ💦変数と分岐の増加でおこるむずっ💦

こんにちは。

残った「3.往復」飛行特徴のプログラムを作りましょう。

今日伝えたいこと

うまくいかないこともあるけれど、あきらめないでっ💦

まずは観察から

案1

だめだった。どこがいけない?

関数に渡ってくる情報としてはxひとつなので、たとえば3が渡ってきた場合、2->3と増えつつある3なのか、4->3と減りつつある3なのかの判断がつきません。
3は4より小さいので、必ず1を加えるブロックの方に進んでしまいます。4と3をひたすら往復するだけの動作となってしまいました。
失敗です。

案1修正版

増加している状態なのかどうかを判断できる変数「UFOx増加中」を追加します。
・増加中なら1を加えて、そうでなければ1を引く。
・増加して5になったら増加中ではないに変更し、
・引いて-1になったら増加中に戻す

ちゃんと動作したけれど長い… 分岐入り組んでいる…

論理値について

これまで変数には1,2,3のような数字、10進整数を使ってきましたが、
「増加している状態なのかどうか」を判断できれば良い変数には「論理値」を使います。

論理値の値は2つだけで、「」と「」です。「はい」と「いいえ」みたいなものです。ON/OFF, YES/NO, 上/下, 右/左のようなものを扱う時に使いましょう。今回は増加/減少の意図で使いました。

「フラグがたつ」という言葉を時々耳にしますが、この論理値用の変数に「真」がセットされた状態を指しています。

論理値用の変数のことをフラグと呼ぶのですね。
上のプログラムなら、「増加中フラグをたてる」のように使います。

案1修正版を改良

変数をひとつ追加しただけでこんなになってしまった案1修正版。
分岐と変数はバグの元と昨日書いた意味を感じてもらい、変数を追加するのはよく考えてからにしようと思ってくれたら嬉しいです。

吾輩は案1修正版を見て「長い」と感じたので、何とかしてみました。

・「UFOx増加中」変数を「UFOx一歩分」という変数に替えます
・「UFOx一歩分」には1か-1を入れます
 (一回で増減する量です。 フラグをやめて、数値にしました。)

2ブロック減りました

分岐判断専用だったフラグをやめて、分岐と増減の量を兼ねた変数に切り替えることで、プログラムを短くできました。

ほんの少しでしたが、こんな感じで地道な改良を重ねてください。


ちょっとしか改良できなかったので
今日はここまで。

次回予告

案2、アルゴリズムを見直したものを紹介したいと思います。
みなさんもいろいろな角度からアルゴリズムを見直して、もっと良い案を考えてプログラムしておいてください。

→ 14日目。シンプルイズベスト。分岐をなくしたらすっきりした。

この記事が気に入ったらサポートをしてみませんか?