yoppa.org


immediate bitwave

人工言語入門 A 2010

変数と繰り返し

変数

変数とは?

  • 一時的に値(文字、文字列、数字など)を記憶しておく場所
  • データを入れておく「箱」のようなもの

データ型

  • 値の種類を「データ型」という

Processingでよく用いられるデータ型

  • int:整数 (-1, 0, 1, 2, 3….)
  • float:少数 (-0.01, 3.14, 21.314)
  • boolean:ブール値、「真」か「偽」か、(true, false)
  • char:1文字分のデータ(a, b, c, d…)
  • color:色の情報を保存

変数の使いかた

  • 宣言:使用する変数の名前の箱を準備する
int hoge;
  • 代入:変数の箱に値を入れる
hoge = 0;
  • 演算:変数の値を計算する
hoge = hoge + 1;

変数の使用例

//変数の宣言
int diameter, x, y;

//初期設定
colorMode(HSB,360,100,100,100);
size(300,300);
background(0);
fill(210,100,100,50);
noStroke();

//変数へ値の代入
diameter = 180; 
x = 60;
y = 150;

//円1
ellipse(x,y,diameter,diameter);

//右に移動
x = x+60;

//円2
ellipse(x,y,diameter,diameter); 

//右に移動
x = x+60;

//円3
ellipse(x,y,diameter,diameter); 

//右に移動
x = x+60;

//円4
ellipse(x,y,diameter,diameter);

変数の使用例:その2

//変数の宣言
int diameter,top,left;

//初期設定
size(300,300);
colorMode(HSB,360,100,100,100);
background(0,0,0,100);
noStroke();
fill(210,100,100,20);
diameter = 300;
top = 150;
left = 150;

//同心円を描いて行く
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;
ellipse(top,left,diameter,diameter);
diameter = diameter - 40;

繰り返し

  • さっきのプログラムに注目
  • 途中から同じ命令のくりかえしになっていないだろうか?
//同心円を描いて行く
ellipse(top,left,ellipse_size, ellipse_size);
ellipse_size = ellipse_size - 40;
ellipse(top,left,ellipse_size, ellipse_size);
ellipse_size = ellipse_size - 40;
ellipse(top,left,ellipse_size, ellipse_size);
ellipse_size = ellipse_size - 40;
....
  • 繰り返しの部分を何度も書かずに一気に指定したい
ellipse(top,left,ellipse_size, ellipse_size);
ellipse_size = ellipse_size - 40;
  • これを10回くりかえし

繰り返し – for文

  • 繰り返しをするには「for文」を使用する
  • for文の書きかた
for (初期化式; 継続条件式; 再初期化式) {
    文;
}
  • 初期化式:初期化の際の条件式
  • 継続条件式:繰り返しを継続する条件式
  • 再初期化式:繰り返されるたびに実行される式

for分を用いた、繰り返しの例 1

// 100回「+」の文字を出力する

int i;

for (i=0; i<100; i=i+1){
	print("+");
}

for分を用いた、繰り返しの例 2

  • 変数 i をfor分の中で使用してみる
/*
 0から99までの数を出力する
 for文の繰り返しの条件式の中の、変数iを利用する
 */

int i;

for (i=0; i<100; i=i+1){
    print(i + ", ");
}

同心円をくりかえしを用いて描画

//変数の宣言
int diameter,top,left,i;

//初期条件の設定
size(300,300);
colorMode(HSB,360,100,100,100);
background(0,0,0,100);
noStroke();
fill(210,100,100,10);

//円のパラメータを初期化
diameter = 300;
top = 150;
left = 150;

//同心円を描いていく
for(i=0; i<16; i++){
    ellipse(top,left,diameter,diameter);
    diameter = diameter - 20;
}

虹色のグラデーション

//変数の宣言
int i;

//初期設定
size(300,300);
colorMode(HSB, 360, 100, 100);
noStroke();

//色相を変化させながら四角を描いていく
for(i=0; i<30; i++){
    fill(i*10,80,100);
    rect(i*10,0,10,300);
}

乱数:ランダムな値を出力する

  • 例:0から100の乱数を生成
random(100);
  • 例:100から1000の乱数を生成
random(100, 1000);

ランダムに色を塗る

//ランダムに色を塗る

//変数の宣言
int i;

//初期設定
size(300,300);
colorMode(HSB, 360, 100, 100);
noStroke();

//ランダムに色を塗る
for(i=0; i<300; i++){
    fill(random(360),random(100),random(100));
    rect(i*1,0,1,300);
}

似たような色相で

//似たような色相で色を塗る

//変数の宣言
int i;

//初期設定
size(300,300);
colorMode(HSB, 360, 100, 100);
noStroke();

//似たような色相で色を塗る
for(i=0; i<300; i++){
    fill(random(200,220),random(100),random(100));
    rect(i*1,0,1,300);
}

似たような明度と彩度で

//似たような明度と彩度で色を塗る

//変数の宣言
int i;

//初期設定
size(300,300);
colorMode(HSB, 360, 100, 100);
noStroke();

//似たような明度と彩度で色を塗る
for(i=0; i<300; i++){
    fill(random(360),60,90);
    rect(i*1,0,1,300);
}

たくさん円を描く

//たくさん円を描く

//変数の宣言
int i;

//初期設定
size(300,300);
background(0);
colorMode(HSB, 360, 100, 100,100);
noStroke();

//たくさんの円を描く
for(i=0; i<100; i++){
    float diameter;
    fill(random(200,240),random(50,100),random(50,100), 50);
    diameter = random(20,80);
    ellipse(random(300),random(300),diameter,diameter);
}

たくさん四角形を描く

//たくさんの四角形を描く

//変数の宣言
int i;

//初期設定
size(300,300);
background(0);
colorMode(HSB, 360, 100, 100,100);
rectMode(CENTER);
noStroke();

//たくさんの四角形を描く
for(i=0; i<100; i++){
    fill(random(0,40),random(50,100),random(50,100), 50);
    rect(random(300),random(300),random(5,100),random(5,100));
}

次回までの課題

  • くりかえしを使用したスケッチの作成
  • 連休明けの授業で提出
  • 以下の場所にアップロードしておくこと
  • http://www.cuc.ac.jp/~[ログイン名]/proga/assignment2/