03-07 繰り返し(while文1)05/28

こんにちはkotaron7です。
数学と歴史と公共で学年一位でしたが、数学と歴史は勉強していたのでまだしも、行きの電車で教科書に目を通しただけの公共も学年一位なのがなんでかわかりません。

定期試験も終わったし!遊ぶぞ!と思いましたが、期末試験があと1ヶ月後です。中間やる意味もはやないじゃん?

本題です。

練習問題3-7-1

400pxにしても大丈夫でした。

練習問題3-7-2

for文をwhile文に書き換えちゃいましょう。

function setup() {
  createCanvas(300, 300);
  background(220);
  strokeWeight(3);
  
  let i = 0;
  while(i* 30 < height) {
    line(0, i * 30, width, i * 30);
    i += 1;
  }
}

範囲指定の<>不等号を値の移り変わりを想像しながらやると間違えにくいです。一番忘れちゃいけないのが最後のi+=1;これがないと無限にやり続けてクラッシュしちゃいます。

練習問題3-7-3

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

数学の正の整数の考え方をすると値を一から数えてしまうので実行回数が一回多くなってしまいました。

0が入る分、実行回数は一度少なくなるのが分かりづらいですね。慣れるしかないですね。

練習問題3-7-5

星5が三回出るまでガチャを引かせます。

function setup() {
  let count = 0;
  let n = 0;
  while(count < 3)
  {
    n++;
    let r = random();
    let username = "tota";
    if (username == "tora")
      {
        r = r-0.5;
      }
    if (r < 0.03)
    {
      print("第"+n+"回目"+"★★★★★");
      count = count + 1;
    } 
    else if (r >= 0.03 && r < 0.1)
    {
      print("第"+n+"回目"+"★★★★");
    }
    else if (r >= 0.1 && r < 0.25)
    {
      print("第"+n+"回目"+"★★★");
    }
    else if (r >= 0.25 && r < 0.55)
    {
      print("第"+n+"回目"+"★★");
    }
    else 
    {
      print("第"+n+"回目"+"★");
    }
  }
  print("星5が"+count+"個でました!"+n+"回引きました!");
}

while文の面白いところですね。こういう繰り返しのときwhile文が一番役立ちますね。

練習問題3-7-6

チケットは180連分、180という数字に恨みがあります。ホヨバめ….。

function setup() {
  let count = 0;
  let ticket = 0;
  while(count < 2 && ticket < 180)
  {
    ticket++;
    let r = random();
    let username = "atyamo";
    if (username == "tora")
      {
        r = r-0.5;
      }
    if (username == "atyamo")
      {
        r = r+0.02;
      }
    if (r < 0.03)
    {
      print("第"+ticket+"回目"+"★★★★★");
      count = count + 1;
    } 
    else if (r >= 0.03 && r < 0.1)
    {
      print("第"+ticket+"回目"+"★★★★");
    }
    else if (r >= 0.1 && r < 0.25)
    {
      print("第"+ticket+"回目"+"★★★");
    }
    else if (r >= 0.25 && r < 0.55)
    {
      print("第"+ticket+"回目"+"★★");
    }
    else 
    {
      print("第"+ticket+"回目"+"★");
    }
  }
  print("星5が"+count+"個でました!"+"チケットを"+ticket+"枚使いました!");
}

“atyamo”さんだと星五が出にくくなって、”tora”さんだと星五がばんばんでるようになります。
条件式で||ではなく&&を使って片方の条件を満たしていないときに繰り返しがなくなるようにできました。||にすると、両方が達成されるまで繰り返してしまいます。気をつけましょう。

練習問題3-7-7

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

このif文に必ず引っかかってしまうので、また0に戻って、永遠に終わりません。

練習問題3-7-8

最後のx+= len + 10ですが、最初x += x + let + 10と書いていましたが、lineの最初をxとしているので二回足してることになってどんどん間が開いてしまっていました。

function setup() {
  createCanvas(300, 300);
  background(199, 235, 240);
  strokeWeight(3);
  stroke(48, 113, 122);

  
  let x = 0;
  while (x < height) {
    let len = random(20);
    line(x, height/2, x+len, height/2);
    x += len +10;
  }
}

練習問題3-7-9

先程の練習問題で使ったwhile文をネストにして、下までしっかり書かせます。

function setup() {
  createCanvas(300, 300);
  background(199, 235, 240);
  strokeWeight(3);
  stroke(48, 113, 122);

  
  let x = 0;
  let y = 0;
  while (y < height + 10){
    y += 10;
    x = 0;
    while (x < width) {
      let len = random(20);
      line(x, y-10, x+len, y-10);
      x += len +10;
    }
  }
}

できました。whileから抜けるのを防ぐため、一回xをゼロに戻してあげないといけません。

本日もお付き合いいただきありがとうございました。それではまた今度!😎

コメントする