ページへ戻る

− Links

 印刷 

blike​/intro​/p0006 :: OSASK計画

osaskwiki:blike/intro/p0006

ページ内コンテンツ
  • (5) gotoで繰り返し
      • (1) rei0017.c~rei0019.c
      • (2) rei0020.c~rei0021.c waitで時間をかける
      • (3) rei0022.c
      • (4) rei0023.c
      • (5) まとめ

(5) gotoで繰り返し anchor.png[1]

  • (by K[2], 2011.02.17)
Page Top

(1) rei0017.c~rei0019.c anchor.png[3]

  • 次のプログラムは、画面に1から5までの数字をひとつずつ出すプログラムです。
    printf("1 2 3 4 5");
  • これを1から10までに改造しなさいといわれたらどうしますか?・・・そうですね、こうしますよね。
    printf("1 2 3 4 5 6 7 8 9 10");
  • でも1から100までといわれたらどうしますか?・・・まあ100までせっせと書いてもいいですが、書き間違えるかもしれません。それに1000になったりしたらさすがにもう書く気はおきません。
  • そんなときはこうします。新しい命令を使う必要なんてありません。もうここまでで十分に勉強できているのです。
    int a;
    a = 1;
    b:
    printf("%d ", a);
    if (a == 100) { goto c; }
    a = a + 1;
    goto b;
    c:
  • これで100まで出ます。やったね!
  • 新しい命令はないですが、 a = a + 1; について説明しておくほうがいいかもしれません。これは、aに覚えていた数字に1を加えてそれを覚えなおすということです。
  • 変数とifとgotoがあれば、本当にいろいろなことができるのです。
Page Top

(2) rei0020.c~rei0021.c waitで時間をかける anchor.png[4]

  • 前回の rei0016.c みたいなゲームを作っていると、文字をもっとゆっくり書きたいなと思うことがあります。たとえば「あなたは...しんでしまった!」とか。そういうときはwait命令を使ってこうします。
    printf("あなたは...");
    wait(1000);
    printf("しんでしまった!");
  • これで「あなたは...」のあと1秒待ってから「しんでしまった!」が表示されます。1000というのが1秒を表します。100なら0.1秒ですし、3000なら3秒です。
  • もっとじれったくするのなら、こんなのはどうでしょうか?
    printf("あなたは");
    wait(500);
    printf(".");
    wait(500);
    printf(".");
    wait(500);
    printf(".");
    wait(500);
    printf("しんでしまった!");
  • これだと全文が表示されるまで合計2秒かかることになります。・・・でも、やりすぎるとかえって嫌われるかもしれないので、演出はほどほどに(笑)。
Page Top

(3) rei0022.c anchor.png[5]

  • おふろにはいってゆっくり100まで数えます。
    int a;
    a = 1;
    b:
    printf("%d ", a);
    if (a == 100) { goto c; }
    a = a + 1;
    wait(1000);
    goto b;
    c:
Page Top

(4) rei0023.c anchor.png[6]

  • 逆に100から減らしていってカウントダウンです。
    int a;
    a = 100;
    b:
    printf("%d ", a);
    if (a == 0) { goto c; }
    a = a - 1;
    wait(1000);
    goto b;
    c:
Page Top

(5) まとめ anchor.png[7]

  • 今回は新しい命令の紹介としてwaitを、そして命令は新しくないもののこんなこともできるよという例としてifとgotoを使った繰り返し処理をやりました。
  • 奇数だけ数える、偶数だけ数える、二倍ずつになっていく、逆に半分ずつになっていく、などいろいろ改造できます。減らす早さも自由自在です。

Last-modified: 2011-02-23 (水) 00:00:00 (JST) (319d) by lina