第3回 関数(メソッド)
 
 
 演習
 
<演習1>

 以下のソースは変数 sum の数値を加算して表示するプログラムである。
 数値の加算は関数を呼び出すことで行うものとし、関数 add5()+5、関数 add10()+10 とする。
 実行結果が sum = 25 となるように/*空欄(複数行)*/ を埋めて、プログラムを完成させなさい。
 ※関数の接頭語「void」を忘れないようにすること

 <ソース>
int sum;

void setup()
{
  sum = 0;
  add5(); // sumに5を加算
  add10(); // sumに10を加算
  add10(); // sumに10を加算
 
  println("sum = " + sum);
}

/*空欄(複数行)*/

 
 <実行結果>
    
  
 
 
<演習2>

 3個の数値を引数として受け取り、それらの中から最小値を返す関数を作成する。
 /*空欄(複数行)*/ を埋めて、プログラムを完成させなさい。

 <ソース>
void setup()
{
  int a1 = 152, a2 = 213, a3 = 137;
  //int a1 = 96, a2 = 85, a3 = 92;

  int ans = min3( a1, a2, a3 ); 
  println("最小値 = " + ans);
}

/*空欄(複数行)*/

 
 <実行結果>
    
 
 
 
<演習3>

 下のソースは三色だんごを3本描画するプログラムである。まずはソースをコピペして実行してみなさい。
 (※PDFからコピペすると、目に見えない文字が入りエラーが表示される可能性がある、そのときは手入力で修正する
 このソースを
  (1)三色だんご1本を描画する関数 drawDango(int x) を作成する
  (2)drawDango(int x)3回呼び出して3本描画する
 のように変更しなさい。
 なお、drawDango(int x)int x は三色だんごの横の位置座標を指定する引数とする。

 <ソース>
// 色のデータ(colorはProcessingで利用可、Javaは使えない)
color c0 = color(250, 180, 35); // ベージュ
color c1 = color(252, 196, 243); // ピンク色
color c2 = color(255, 240, 222); // アイボリー
color c3 = color(146, 237, 108); // 緑色

void setup()
{
  int sx; // 串の描画位置(横方向)
  size( 400, 400 );
  background( 255 );
  noStroke();

  // 左側
  sx = 100;
  fill( c0 ); rect( sx, 100, 8, 200 ); // 串の描画
  fill( c1 ); ellipse( sx+4, 135, 50, 50 );
  fill( c2 ); ellipse( sx+4, 185, 50, 50 );
  fill( c3 ); ellipse( sx+4, 235, 50, 50 ); 

  // 真ん中
  sx = 200;
  fill( c0 ); rect( sx, 100, 8, 200 );
  fill( c1 ); ellipse( sx+4, 135, 50, 50 );
  fill( c2 ); ellipse( sx+4, 185, 50, 50 );
  fill( c3 ); ellipse( sx+4, 235, 50, 50 ); 

  // 右側
  sx = 300;
  fill( c0 ); rect( sx, 100, 8, 200 );
  fill( c1 ); ellipse( sx+4, 135, 50, 50 );
  fill( c2 ); ellipse( sx+4, 185, 50, 50 );
  fill( c3 ); ellipse( sx+4, 235, 50, 50 ); 
}

 
 <実行結果>
    
 
 
 
<演習4>
 
 下のソースでサイコロを描画する関数 drawDice(int n);  を作成しなさい。
 引数 int n はサイコロの目の数とし、1~6を指定できるものとする。
 /*空欄(複数行)*/を埋めて完成させなさい。
 なお、サイコロのサイズは 50x50 とする。〇のサイズは、見た目がそれっぽいものにすること。

 <ソース>
void setup()
{
  size( 400, 400 );
  background( 255 );

  drawDice(1); // 1~6を指定して呼び出す
}
// サイコロを描画する関数
void drawDice(int n)
{
 
/*空欄(複数行)*/
}
 
 <実行結果>
   左から: n=1,2,3,4,5,6 で実行した描画例
    
 
 
 
<演習5>
 
 下のソースは〇が左から右に移動するプログラムである。
 これをマウスボタンをクリックすると、左右の移動方向が逆になるようにプログラムを修正しなさい。
  右移動 --クリック--> 左移動 --クリック--> 右移動 --クリック--> ・・・・ のようになる。
 ※ヒント 変数 x の移動量を表す変数 int dx を追加して、 x = x + dx; のようにしてみれば・・・
  
 <ソース>
int x;

void setup()
{
  size( 400, 400 );
  x = 0; 
}
void draw()
{
  background( 255 );
  ellipse( x, 200, 20,20 );
  x = x + 1;
}

 
 
 
<演習6>
 
 画面を4分割して、マウスボタンを押している間、マウスポインタのある領域の色を緑色にする。
 下記のソースの/*空欄(複数行)*/を埋めて完成させなさい。
 ※ヒント Processingの変数 mouseX,mouseY,mousePressed を使う

 <ソース>
void setup()
{
  size( 400, 400 );
}
void draw()
{
  background( 255 );
  line(200,0,200,400); // +を描画
  line(0,200,400,200);

 
/*空欄(複数行)*/

}

 
 <実行例>
   左下の領域にマウスポインタがあり、ボタンを押している状態
    
 
 
 
 
演習問題の提出について
演習1演習6のプログラムソースの内容をTextファイルに記述して、Cerezoから提出しなさい。
わからない問題は、飛ばしてもよい。
上記の内容をすべて1個のTextファイルにまとめ、ファイル名は

   [自分の学籍番号]+"_演習03.txt"  
  (例:"5412016_演習03.txt"、"5412003_演習03.txt" など


のように保存してから提出すること。
提出物には学籍番号と氏名を必ず記載しておくこと。
 
 
<提出ファイルの作成例>
第3回演習問題の回答  5412099 福山太郎

- 演習1 -----------------------------------------
size( 400, 400 );
background(255);
 
ellipse( 200, 200, 100, 100 );


- 演習2 -----------------------------------------
size( 320, 120 );
background( 255 );
fill(255); // 白色で内部を塗りつぶす
rect( 20, 10, 140, 100 ); // 長方形
noFill(); // 内部を塗りつぶさない
rect( 170, 10, 140, 100 ); // 長方形
     :
     :