5 コンピュータの得意な仕事(繰り返し)

5.1 学習目標

5.2 繰り返し

今回のテーマは同じ命令を何度も書かずに、コンピュータに繰り返しさせることです。

繰り返しプログラムを見ていく前に、何を繰り返すか考えていきましょう。

5.2.1 何を繰り返すのか

何回も出てきた、家のプログラムを見てみましょう。

ここをクリックすると、以下のプログラムをダウンロードできます。

リスト 5.2.1.1 家.dama
  1: ※プログラム名:家を描くプログラム
  2: ※作成者:岡田 健
  3: ※作成日:2009.11.11
  4: 
  5: ※授業に必要なライブラリを取り込む。
  6: TurtleLibraryを参照する。
  7: 
  8: ※環境を初期化する。
  9: ウィンドウを初期化する。
 10: 亀を新規作成して、亀太郎と名付ける。
 11: ウィンドウに亀太郎を追加する。
 12: 
 13: ※屋根を描く
 14: 亀太郎を30度右に回す。
 15: 亀太郎を50ドット進める。
 16: 亀太郎を120度右に回す。
 17: 亀太郎を50ドット進める。
 18: 亀太郎を120度右に回す。
 19: 亀太郎を50ドット進める。
 20: 
 21: ※本体を描く
 22: 亀太郎を左に90度回す。
 23: 亀太郎を50ドット進める。
 24: 亀太郎を左に90度回す。
 25: 亀太郎を50ドット進める。
 26: 亀太郎を左に90度回す。
 27: 亀太郎を50ドット進める。
 28: 亀太郎を左に90度回す。
 29: 亀太郎を50ドット進める。

このプログラム、何度も同じことを書いている個所が2箇所ありますね。どこが同じか考えてみましょう。

5.2.2 繰り返しを使ったプログラム

繰り返しを使って、すっきりとしたプログラムにしてみましょう。

ここをクリックすると、以下のプログラムをダウンロードできます。

リスト 5.2.2.1 家_繰り返し.dama
  1: ※プログラム名:家を書くプログラム(繰り返し)
  2: ※作成者:岡田 健
  3: ※作成日:2009.11.11
  4: 
  5: ※授業に必要なライブラリを取り込む。
  6: TurtleLibraryを参照する。
  7: 
  8: ※環境を初期化する。
  9: ウィンドウを初期化する。
 10: 亀を新規作成して、亀太郎と名付ける。
 11: ウィンドウに亀太郎を追加する。
 12: 
 13: ※ループ用変数
 14: 整数型を新規作成して、カウンタと名付ける。
 15: 
 16: ※屋根を描く
 17: 亀太郎を30度右に回す。
 18: カウンタに1を入れる。
 19: カウンタ≦3である限り{
 20: 	亀太郎を50ドット進める。
 21: 	亀太郎を120度右に回す。
 22: 	カウンタにカウンタ+1を入れる。
 23: }を繰り返す。
 24: 亀太郎を30度左に回す。※上向きに戻す
 25: 
 26: ※本体を描く
 27: カウンタに1を入れる。
 28: カウンタ≦4である限り{
 29: 	亀太郎を右に90度回す。
 30: 	亀太郎を50ドット進める。
 31: 	カウンタにカウンタ+1を入れる。
 32: }を繰り返す。

今回登場した"繰り返し"を使うと、プログラムを繰り返すことができます。

繰り返しの一般的な形は次のとおりです。

[条件式]である限り{
	処理
}を繰り返す。

条件式が成立(true)のした場合には、処理が実行されます。不成立(false)の場合は処理を飛ばします。

処理が実行し終わると、もう一度条件式を評価します。

これを、条件式が不成立(false)になるまで繰り返します。

これをフローチャートと呼ばれる図を用いて書くと、次のようになります。

5.2.2.1 プログラムのフローチャート

図 5.2.2.1.1 プログラムのフローチャート

5.2.2.2 繰り返しのフローチャート

図 5.2.2.2.1 繰り返しのフローチャート

条件式は前回の条件分岐によるプログラムで学習した書式と同じ書式が使えます。 繰り返しを止めるために、変数を使います。この変数には、「今何回繰り返したか」といった情報を格納しておきます。

5.2.3 繰り返しを使ったプログラムの実行過程

プログラムの実行過程と変数の値の変化を見ていきましょう。

5.2.3.1 変数の宣言

図 5.2.3.1.1 変数の宣言

5.2.3.2 変数を初期化する(1を代入)

図 5.2.3.2.1 変数を初期化する(1を代入)

5.2.3.3 変数を評価して条件を判定する

図 5.2.3.3.1 変数を評価して条件を判定する

5.2.3.4 変数に1を加える

図 5.2.3.4.1 変数に1を加える

変数が、5になったときに条件式が不成立(false)になるので、繰り返しが終ります。 これで4回繰り返されるのが分かるでしょうか?

5.3 応用:円を書くプログラム

繰り返しを使うと、円を簡単に書くことができます。次のプログラムを実行してみましょう。

5.3.1 円を書きつづけるプログラム

ここをクリックすると、以下のプログラムをダウンロードできます。

リスト 5.3.1.1 円.dama
  1: ※プログラム名:円を描くプログラム
  2: ※作成者:岡田 健
  3: ※作成日:2009.11.11
  4: 
  5: ※授業に必要なライブラリを取り込む。
  6: TurtleLibraryを参照する。
  7: 
  8: ※環境を初期化する。
  9: ウィンドウを初期化する。
 10: 亀を新規作成して、亀太郎と名付ける。
 11: ウィンドウに亀太郎を追加する。
 12: 
 13: ※円を描く
 14: 無条件で{
 15: 	亀太郎を1ドット進める。
 16: 	亀太郎を右に1度回す。
 17: }を繰り返す。

条件判定を行わないでずっと繰り返し続ける処理を書くために、以下のような特別な記述法があります。

無条件で{
	処理
}を繰り返す。

5.4 練習問題

5.4.1 問題1:円を描くプログラムを改良しよう

最後に出てきた円を描くプログラムは、条件が無い(常に成立(true))ので止まりません。 変数をつけ、適切な条件式を考えて、一周したらプログラムを止めるように改良して下さい。

5.4.2 問題2:円の描かれ方について考察しよう

一回の繰り返しで動く大きさ(fd(1))と、角度(rt(1))の数字を変更すと、円の大きさを変えることができます。 いろいろ数字を変えて、どのようにすると自分の思った円がかけるか、考察してください。

ヒント: 大きさと角度を入力できるようにすると、数字を変えるたびにコンパイルする必要がないので、いろいろ実験できますよ。 そのようなプログラムにしてから、実験することをお奨めします。

5.4.3 問題3:五角形や星を繰り返しを使って描こう

いままで作った五角形や星を描くプログラムを繰り返しを使って書き直してみましょう。