練習問題3-6-1

動作は正常に行われました
この問題を見たときに切りのいい数字ならうまくいくと考えましたが、切を悪くしたらどうなるのだろうかと思い、キリの悪い数字にしてみましたが、少し見切れる程度だったので、汎用性が高いのだと感じました。
練習問題3-6-2
次のfor文のプログラムをwhile文に書き換えなさい。
function setup() {
createCanvas(300, 300);
background(220);
strokeWeight(3);
let y=0
while(y<height){
line(0, y, width, y)
y+=30
}
}
練習問題3-6-3
function setup() {
let i=0;
while(i<5){
print("こんにちは!");
i++
}
}
変えた意味もあまり感じませんでした。
練習問題3-6-5
練習問題3-4-4では、for文で「ガチャを100回引いて★5の排出数を表示する」プログラムを作りました。while文を使って、「★5が3個出るまでガチャを引き続ける」プログラムを作りなさい。何回引いたかも表示すること。
function setup() {
let n = 0; // 引いた回数
let count = 0;
while (count<3) {
n++;
r = random();
if (r < 0.03) {
count=count+1
print(n + "回目: ★★★★★");
} else if (r < 0.03 + 0.07) {
print(n + "回目: ★★★★");
} else if (r < 0.03 + 0.07 + 0.15) {
print(n + "回目: ★★★");
} else if (r < 0.03 + 0.07 + 0.15 + 0.30) {
print(n + "回目: ★★");
} else {
print(n + "回目: ★");
}
}
print(n+"回で星五が"+count+"個でた")
}
不等号の向きを間違えたり、問題文をわすれて出力例からかけ離れたプログラムができてしまい、いろいろ追加してりして、なかなか大変でした。
練習問題3-6-6
チケットが無くなるか、★5が2個出るまでガチャを引き続けるプログラムを作りなさい。
function setup() {
let tickets = 100;
let n = 0;
let count=0
while (tickets > 0&&count<2) {
n++;
r = random();
if (r < 0.03) {
count = count+1
print(n + "回目: ★★★★★");
} else if (r < 0.03 + 0.07) {
print(n + "回目: ★★★★");
} else if (r < 0.03 + 0.07 + 0.15) {
print(n + "回目: ★★★");
} else if (r < 0.03 + 0.07 + 0.15 + 0.30) {
print(n + "回目: ★★");
} else {
print(n + "回目: ★");
}
tickets--;
}
if(count==2){
print("星五が二回出ましたのでガチャを終了します。")
}else{
print("チケットがなくなったのでガチャを終了します。");
}
}
チケットの枚数には困りました。指定がなかったので、なので一度はランダムにしようかと思いましたが、面倒くさくなってしまい100にしておきました。
練習問題3-6-7
次のプログラムには無限ループの危険があります。どこが問題か先生に説明しなさい。
function setup() {
let x = 0;
while (x < 100) {
print(x);
x += 10;
if (x > 50) {
x = 0;
}
}
}今は教室にいないので、ここに書きます。
ifの中に変数xを0にするプログラムがあるので、いつまでたってもxは上がらないため、無限ループが起きると思います。
練習問題3-6-8
キャンバスの左端から右端に向かって、ランダムな長さの点線を描きなさい。
線の長さは0〜20pxの間で変化し、右端に達するまで線を描き続けます。
次の条件を満たすように、while文を使って完成させてください。
- 変数xを作り 線の開始位置として使う
- 変数lenを作り ランダムな長さを代入する
- 線と線との間隔は10pxとする
function setup() {
createCanvas(400, 400);
strokeWeight(5);
let x = 0;
let len = 0
while(x<width){
len=random(0,20)
line(x, height/2, x+len, height/2)
x=x+10+len
}
}
function setup() {
createCanvas(400, 400);
background(200, 240, 255);
strokeWeight(5);
stroke(150, 200, 230)
let x = 0;
let len = 0
while(x<width){
len=random(0,20)
line(x, height/2, x+len, height/2)
x=x+10+len
}
}
練習問題3-6-9
前の問題の点線を、10ピクセル間隔で上から下まで繰り返します。
while文を入れ子にして(ネストして)書いてください。
function setup() {
createCanvas(400, 400);
background(200, 240, 255);
strokeWeight(5);
stroke(150, 200, 230)
let x = 0;
let y = 0
let len = 0;
while(y<height){
while(x<width){
len=random(0,20)
line(x,y , x+len, y)
x=x+10+len
}
x=0
y+=10
}
}
それとキャンバスの大きさが指定されていなかったので、最初から設定されている400×400で作ったら、キモイ模様になってしまいました。