3.繰り返し1(for文)

 前回のプログラム(下図)で同じ命令が何回か出てきています。

コンピュータに行わせる処理ではこうした同じ命令を値を変えて繰り返すことが多いのです。今回はこの処理を行わせるfor文とwhile文を学びましょう。

(1) for文
 繰り返しを実現する方法の一つがfor文です。for文の形式は次のようになっています。
for (初期処理; 繰り返し条件; 繰り返し時の処理){
  繰り返す命令群
}

初期処理は最初だけ行う処理。繰り返し条件はこの条件を満足しなくなったら終了、繰り返し時の処理は繰り返す命令群が一度処理が終わるたびに行われる処理です。例えば、

for(i=0;i<10;i++){ 繰り返す命令群 }

であれば、iは0から9まで変化して{ }内の命令を繰り返します。iは最初だけ実行する命令i=0; で0になり、条件を満足するので繰り返す命令を実行、繰り返し時の処理であるi++でiは1増えて1になり、繰り返し条件を満足するので命令を実行・・・と続き、i=9の時に繰り返す命令を実行し、i++でi=10になるとそこで繰り返し条件を満足しなくなるので終了となる。

 さて、先のプログラムでは、ellipse(x,y,l,l); やx+=step; などの命令が4回出てきます。これをfor文に書き換えてみましょう。次のようになります。

 このプログラムの動作は、4-7行目で、変数step, l, x, yの4つに50が代入されます。 ちなみにあまり使われないようですが同じ値を代入する場合には、
step=l=x=y=50;
 と書いても同じ動作になります。そして、9行目がfor文です。繰り返す範囲は{ }の中ですから10, 11行目を繰り返します。i++はiを1つ増やすという意味で、i=i+1;と同じでした。

iが0の時、ellipse(50, 50, 50, 50); で円を描き、 x+=step; でxは100になり、y、lも100に。

iが1の時、ellipse(100, 100, 100, 100); で円を描き、 x、y、lは150に。

iが2の時、ellipse(150, 150, 150, 150); で円を描き、 x、y、lは200に。

iが3の時、ellipse(200, 200, 200, 200); で円を描き、 x、y、lは250に。

iが4になったら、条件式、i<4を満足しなくなるので終了。

○ プログラム例2 前回は沢山命令を書くのが大変だったので4つだけでしたが今度は沢山描くのも簡単です。40個の円を描くプログラムを作ってみましょう。以下にプログラム例と実行結果を示します。やってみてください。

○ プログラム例3 数学の関数sinを使ってみましょう。今度は小数点以下の値も出てくるのでyはfloatで宣言しています。このプログラムを実行してみるとともに、sinのところをcosやtan, noiseに変えて実行してみてください。

演習1 20本の直線で次の図を作るプログラムを作成せよ。最初の線は(50, 200)と(250, 200)を結ぶ線で、次はその線を9度回転させた線を考える。

(2) 2重ループ

 繰り返しのブロックの中にさらに繰り返しがある事を2重ループと言います。次の例を見てみましょう。

 この例では、iのfor文とjのfor文があります。これまでiの宣言は最初にやりましたが上のように初期処理で行うこともできます。但し、この場合はfor文の中でだけiは通用します。11行目以降にiを使いたければ再度宣言する必要があります。次の3行を読んで実行結果がなぜそうなるか考えてみてください。

 iのfor文は6行目から9行目を繰り返します。jのfor文は8行目を繰り返します。

 iの繰り返しがi=0から始まって、i=9まで実行するので10回。

 i=0の時にjのfor文をj=0~9で8行目を10回実行する。i=1でも同じ。つまり8行目は100回実行!

実行結果

演習2 次のプログラムを実行した結果から、iが0~9の時に8行目がそれぞれ何回実行されているか考えよ。全体でいくつの円が描かれるか?

演習3 演習2のプログラムを参考に次の図を出力するプログラムを作成せよ。

演習4 図の様な出力をするプログラムを作成せよ。

 ウィンドウのサイズは、400×400、円の直径は5、円の中心の間隔は20とする。


東京電機大学AD科向けコンプロI用サイト

このサイトは東京電機大学東京千住キャンパスのAD科の1年次生向けコンピュータプログラミングIの授業内容やお知らせをするページです。プログラムの初歩の初歩を学ぶ人のためのページです。この資料を授業等で共有したいという方もどうぞお使いください。一緒に学習向けコンテンツを作ってくださる方、学習者向けのサンプルプログラムの提案など歓迎いたします。

0コメント

  • 1000 / 1000