プログラミングの基礎2~繰り返しと分岐

次に、繰り返しと分岐について説明します。
コンピュータプログラムは、「繰り返しと分岐によってデータを処理する」ものといっても過言ではありません。

繰り返し構文

次のプログラムは、団子のように丸を 3 つ並べて表示します。

size(300,300);

int i;
for(i=0; i<3; i++){
  ellipse(width/2, 100+50*i, 50, 50);
}

少し説明します。

  • for 文
    プログラムの基本は繰り返しと分岐です。for 文は代表的な繰り返し構文です。
    for(int i=0; i < 3; i++)
    のようにセミコロンで区切って3つの式を入れます。

    • 1つめ int i=0
      最初に実行される文です。
      int 型(整数型)のiという変数を定義し、0 を代入します。
      i の宣言はこのようにカッコの中で行っても、上の例のように for 文の前で行ってもOKです。
      カッコの中で宣言すると(←こちらの方が好ましい)、変数 i は for 文のブロック内でだけ有効です。
    • 2つめ i < 3
      条件文です。
      i が 3 未満のとき、for 文に続くブロック({}で囲われている)を繰り返します。
    • 3つめ i++
      1回の繰り返し終了時点で実行される文です。
      i++ はインクリメントと呼ばれ、i に 1 を加えます。
      i = i+1 と同じ働きをします。
この例では、for ループは i が0, 1, 2 とカウントアップしながら 3 回実行されることになります。
  • width, height
    ウインドウの幅と高さを示す予約語です。
    数値を使う代わりに width/2 とすることで、size の値を変えても画面の中心に円をかきます。

練習問題

  • 時計の文字盤のように、丸を 12 個、円形に並べて表示してください。

分岐と比較演算子

次の例は、色を 2 色に交互に塗り分けながら、6 個の丸を書いています。

size(300,300);
background(0);
smooth();

int i;
for(i=0; i<6; i++){
  if(i%2==0){
    fill(255,0,0,125);
  }
  else{
    fill(0,0,255,125);
  }
  ellipse(50+40*i, 50+40*i, 80, 80);
}
  • if 文
    プログラムの基本構造のもう一つ、分岐構造です。
    if に続くカッコ () の中が真のときのみ、if 文に続くブロック({}で囲われている)が実行されます。
    == (イコール2つ)は両辺が等しいかどうかを調べる比較演算子です。
    代入文(= イコール1つ)とは異なりますので注意してください。

比較に関係する演算子には次のようなものがあります。

== 等しい
> より大きい
>= 以上
!= 等しくない
< より小さい
<= 以下
&& かつ(AND)
if1)x>0)&&(y>0とすることで、xもyも0より大きい時にブロックが実行される。
|| または(OR)
if2)x>0)||(y>0とすることで、xかyのいずれかが0より大きい時にブロックが実行される。

if 文に引き続いてelse 文を使うことで、()の中が成り立たなかったときに実行する命令を書くことができます。
if(x>0){
(xが0より大きかった時に実行される部分)
}
else{
(xが0以下だった時に実行される部分)
}

  • % 剰余演算子
    7 行目で使っている % は整数型(int型)限定の演算子で、割り算の「あまり」を出す演算子です。例えば
    a = 8%2;
    では a に 0 が、(8を2で割った余り 0)
    a = 8%3;
    では a に 2 が代入されます。 (8を3で割った余り 2)
    これを使って
    i を 2 で割って、余りが 0 のとき(偶数)とそれ以外の時(奇数)で
    色を変えています。
比較演算子は、左辺が計算式になっていても OK です。((x+1)==(3+1)など)
(代入演算子の場合は、左辺が単独の変数になっている必要がある。x=3+1など)

 

例題

  • 前の問題で作った例題で、3 時、6 時、9 時、12 時方向の丸だけ色を変えてください。

脚注

1 x>0)&&(y>0
2 x>0)||(y>0