03-06 繰り返し(while文1)

🗓️学習日

2026年5月27日〜6月22日

名前

河西結吾

■作った物のコードと画像

✅ 練習問題3-6-1

📚️問題内容

先の while 文のサンプルコードについて、キャンバスのサイズを 400 x 400 に変更しても正しく動作するか確認する

✏️コード

function setup() {
  createCanvas(400, 400);
  background(220);
  strokeWeight(3);

  let y = 0;
  while (y < height) {
    line(0, y, width, y);
    y += 10;
  }
}

📷 実行結果

正しく動作した!

↑キャンバスのサイズが(300, 300)の場合(サンプルコードのサイズ)
↑キャンバスのサイズが(400, 400)の場合

✅ 練習問題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

📚️問題内容

for文のプログラムをwhile文に書き換える②

✏️コード

function setup() {
  let i = 0;
  while (i < 5) {
    i++;
    print("こんにちは!");
  }
}

📷 実行結果

✅ 練習問題3-6-5

📚️問題内容

前の練習問題3-4-4では、for文で「ガチャを100回引いて★5の排出数を表示する」プログラムを作りました。while文を使って、「★5が3個出るまでガチャを引き続ける」プログラムを作る。

条件:・何回引いたか表示すること。

   ・nを使う:ガチャを引いた回数

   ・countを使う:★5の個数

✏️コード

function setup() {
  let n = 0;
  let count = 0;
  while (count < 3 ) {
    let r = random();
    if (r < 0.03) {
      print(n + "回目: ★★★★★");
      count++;
    } else if (r < 0.07) {
      print(n + "回目: ★★★★");
    } else if (r < 0.15) {
      print(n + "回目: ★★★");
    } else if (r < 0.3) {
      print(n + "回目: ★★");
    } else {
      print(n + "回目: ★");
    }
    n++;
  }
  print("★5が" + count + "回でました!" + n + "回引きました");
}

📷 実行結果

神引き✨️(16回から星1が続きすぎwww)

✅ 練習問題3-6-6

📚️問題内容

チケットが無くなるか、★5が2個出るまでガチャを引き続けるプログラムを作る。

✏️コード

function setup() {
  let tickets = 50;
  let n = 0;
  let count = 0;
  while (tickets > 0 && count < 2) {
    let r = random();
    if (r < 0.03) {
      count++;
      print(n + "回目: ★★★★★");
    } else if (r < 0.07) {
      print(n + "回目: ★★★★");
    } else if (r < 0.15) {
      print(n + "回目: ★★★");
    } else if (r < 0.3) {
      print(n + "回目: ★★");
    } else {
      print(n + "回目: ★");
    }
    n++;
    tickets--;
  }
  print("★5が" + count + "回でました!" + n + "回引きました");
}

📷 実行結果

10回引いただけで★5が2回出た✨️

✅ 練習問題3-6-7

📚️問題内容

次のプログラムには無限ループの危険があります。どこが問題か説明する。

function setup() {
  let x = 0;
  while (x < 100) {
    print(x);
    x += 10;
    if (x > 50) {
      x = 0;
    }
  }
}

💡 説明

while文でxが100より小さいと繰り返され、xに10プラスされます。if文ではxが50より大きいとxが0になるのでそれがずっとループするので無限ループしてしまう。

✅ 練習問題3-6-8

📚️問題内容

キャンバスの左端から右端に向かって、ランダムな長さの点線を描きます。
線の長さは0〜20pxの間で変化し、右端に達するまで線を描き続けます。

条件

  • 変数xを作り 線の開始位置として使う
  • 変数lenを作り ランダムな長さを代入する
  • 線と線との間隔は10pxとする

✏️コード

function setup() {
  createCanvas(400, 400);
  background(220);
  strokeWeight(3);
  let x = 0;
  let len = 0;
  while (x < 400) {
    let r = random() * 20;
    line(x , 200, x + r , 200);
    x = x + r + 10
  }
}

📷 実行結果

✅ 練習問題3-6-9

📚️問題内容

練習問題3-6-8の点線を、while文を入れ子にして(ネストして)10ピクセル間隔で上から下まで繰り返して書く。

✏️コード

function setup() {
  createCanvas(400, 400);
  background(220);
  strokeWeight(3);
  let x = 0;
  let y = 0;
  let len = 0;
  while (y < 400) {
    while (x < 400) {
      let r = random() * 20;
      line(x, y, x + r, y);
      x = x + r + 10;
    }
    y = y + 10;
    x = 0
  }
}

📷 実行結果

まとめ・感想

while文を使った問題をするときに慣れなくて少し時間がかかってしまったりしたので慣れていきたいと思いました。

練習問題3-6-9で、ランダムな長さの線を書いて上から下まで繰り返すときに変数yを下にするときに変数xをリセットしないでそのままにしていたり変数yの数を増やすときの文の位置が違ったりしたので冷静に考えて作りたいと思いました。

コメントする