welcome: please sign in
location: "プログラムの作り方"の差分
3と4のリビジョン間の差分
2010-02-19 06:28:31時点のリビジョン3
サイズ: 5795
編集者: masahiko
コメント:
2010-02-19 06:28:55時点のリビジョン4
サイズ: 5796
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 24: 行 24:
--- ----

プログラムの作り方

プログラムはどのような手順で作るのか、例をあげて説明します。


(1)どんなプログラムを作るか決める

おみくじプログラムを作ることにします。 実行されるごとに、いくつかの異なったメッセージがランダムに表示されるものです。


(2)そのプログラムの使い方を決める

  •  js> load('...')

を行ったら

  •  今日の運勢は○○です

などと表示されることにします。

ここでファイル名も決めておきます。


(3)プログラム全体の構成を決める

関数を使って書くことにします。 関数名は omikuji にしました。引数は必要ないので名前の後ろは括弧だけです。 printは関数の中で行う書き方を使うことにします。(値を返し、関数を呼び出す側でprintする方法もあります。) loadしたら実行されるように、関数定義のあとに関数呼び出しを書きます。

すると、全体の構成は次のようになります。

  •    1  /* コメント */
       2  function omikuji() {
       3      ...
       4      print(...);
       5      return;
       6  }
       7  
       8  omikuji();
    

テキストエディタを使ってここまで入力し、先に決めたファイル名で保存します。 この時点でコメントも書いておきます。


(4)手順を考える

関数内で行うことがらを、行う順に書き出してみます。

  • 1)乱数を発生させる
  • 2)乱数の値によって場合分けし、それぞれのおみくじの内容を決める
  • 3)表示する

以上3つのことを行うプログラムを書けばよいことがわかります。

3)はprint文で書けます。

2)はif文を使って場合分けする書き方を使えばよい。

1)は乱数を発生させる関数を使います。処理系で用意されています。

Math.random() はこの関数を呼び出すたびに0~1の範囲の数をランダムに返します。 この値を変数 ransu に覚えておき、ransuの値を使って場合分けすることにします。

2行追加し、このようになります。コメントは省略しています。

  •    1  function omikuji() {
       2      var ransu;
       3      ransu = Math.random();
       4      ...
       5      print(...);
       6      return;
       7  }
       8  
       9  omikuji();
    

... の部分が場合分けの処理になります。 場合分けごとに、おみくじの内容を変数の値として覚えさせることにします。

変数の値としては数値だけでなく、文字列も使えます。 例えば

  •  unsei = '大吉';

を行った後で

  •  print ( '今日の運勢は', unsei, 'です' );

を実行すると

  •  今日の運勢は大吉です

と表示されます。

さらに2行修正しました。

  •    1  function omikuji() {
       2      var ransu, unsei;
       3      ransu = Math.random();
       4      ...
       5      print ( '今日の運勢は', unsei, 'です' );
       6      return;
       7  }
       8  
       9  omikuji();
    


(5)プログラムの詳細部分を書く

いくつの場合に分けるか考えます。

  • さいこー
  • ぼちぼち
  • いまひとつ

の3つの場合に分けるときの書き方は次のようになります。

  •  if (...) {
         unsei = 'さいこー';
     }
     else if (...) {
         unsei = 'ぼちぼち';
     }
     else {
         unsei = 'いまひとつ';
     }

条件を書けば完成です。 ransu には0~1の範囲の値が入っているので、これを3つに分けて

  • 0~0.33 のとき さいこー
  • 0.33~0.66 のとき ぼちぼち
  • 0.66~1 のとき いまひとつ

にすることにします。 0.33と0.66は2箇所に現れていますが、0.33はぼちぼち、0.66はいまひとつの方に入れることにします。

ransuには0~1の範囲の値しか入っていないので、 さいこー の処理がされる条件としては ransu < 0.33 だけを書けばよいことがわかります。

  •  if ( ransu < 0.33 ) {
         unsei = 'さいこー';
     }

ぼちぼち が処理される条件は 0.33 <= ransu と ransu < 0.66 の2つですが、 最初に判定される条件 ransu < 0.33 が成り立たないときだけについて考えればよいので、0.33 <= ransu は不要で、ransu < 0.66 だけを書けばよいことが分ります。

いまひとつ が処理される条件は 0.66 <= ransu ですが、これは最初と2番目に判定される条件を2つとも満足しないときに対応するので else で良いことも分ります。

プログラムは次のようになります。

  •    1  function omikuji() {
       2      var ransu, unsei;
       3      ransu = Math.random();
       4      if ( ransu < 0.33 ) {
       5          unsei = 'さいこー';
       6      }
       7      else if ( ransu < 0.66 ) {
       8          unsei = 'ぼちぼち';
       9      }
      10      else {
      11          unsei = 'いまひとつ';
      12      }
      13      print ( '今日の運勢は', unsei, 'です' );
      14      return;
      15  }
      16  
      17  omikuji();
    

この形の場合分けは良く使われます。 場合分けにおける条件の書き方を、図とプログラムで対応させてみてください。

  • baaiwake.png


(6)動作するか確かめる

保存し何度か load を行って、そのたびに違った内容が表示されることを確かめます。 どの場合もちゃんと実行されるか、何度も実行してみましょう。

プログラムの作り方 (最終更新日時 2010-02-19 06:28:55 更新者 masahiko)