yoppa.org


人工言語入門 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:色の情報を保存

変数の使いかた

  • 宣言:使用する変数の名前の箱を準備する

[code language=”java”]
int hoge;
[/code]

  • 代入:変数の箱に値を入れる

[code language=”java”]
hoge = 0;
[/code]

  • 演算:変数の値を計算する

[code language=”java”]
hoge = hoge + 1;
[/code]

変数の使用例

[code language=”java”]
//変数の宣言
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);
[/code]

変数の使用例:その2

[code language=”java”]
//変数の宣言
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;
[/code]

繰り返し

  • さっきのプログラムに注目
  • 途中から同じ命令のくりかえしになっていないだろうか?

[code language=”java”]
//同心円を描いて行く
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;
….
[/code]

  • 繰り返しの部分を何度も書かずに一気に指定したい

[code language=”java”]
ellipse(top,left,ellipse_size, ellipse_size);
ellipse_size = ellipse_size – 40;
[/code]

  • これを10回くりかえし

繰り返し – for文

  • 繰り返しをするには「for文」を使用する
  • for文の書きかた

[code language=”java”]
for (初期化式; 継続条件式; 再初期化式) {
文;
}
[/code]

  • 初期化式:初期化の際の条件式
  • 継続条件式:繰り返しを継続する条件式
  • 再初期化式:繰り返されるたびに実行される式

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

[code language=”java”]
// 100回「+」の文字を出力する

int i;

for (i=0; i<100; i=i+1){
print("+");
}
[/code]

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

  • 変数 i をfor分の中で使用してみる

[code language=”java”]
/*
0から99までの数を出力する
for文の繰り返しの条件式の中の、変数iを利用する
*/

int i;

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

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

[code language=”java”]
//変数の宣言
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;
}
[/code]

虹色のグラデーション

[code language=”java”]
//変数の宣言
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);
}
[/code]

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

  • 例:0から100の乱数を生成

[code language=”java”]
random(100);
[/code]

  • 例:100から1000の乱数を生成

[code language=”java”]
random(100, 1000);
[/code]

ランダムに色を塗る

[code language=”java”]
//ランダムに色を塗る

//変数の宣言
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);
}
[/code]

似たような色相で

[code language=”java”]
//似たような色相で色を塗る

//変数の宣言
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);
}
[/code]

似たような明度と彩度で

[code language=”java”]
//似たような明度と彩度で色を塗る

//変数の宣言
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);
}
[/code]

たくさん円を描く

[code language=”java”]
//たくさん円を描く

//変数の宣言
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);
}
[/code]

たくさん四角形を描く

[code language=”java”]
//たくさんの四角形を描く

//変数の宣言
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));
}
[/code]

次回までの課題

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