ICTメディア編集U 2025125

 

プログラミング練習4(乱数とif文を用いたおみくじプログラム)

 ここでは、プログラミングにおいてよく用いられる乱数(でたらめな数)を発生させる動作命令を用いて,さらにifの条件分岐も用いたプログラミング練習として,おみくじのプログラムの作成を行っていきます.


〔乱数:でたらめな数〕

コンピュータを用いて,無作為に事象のいくつかのうちの一つを選択させたい場合などに,「乱数」と呼ばれるでたらめな数値を発生させる命令をよく用います.今回は,この乱数と前回から行っているif文を用いたプログラムを作成します。

 

乱数を発生させるコード(動作命令)の関数について次に解説します。関数とは、入力と出力の関係が決まっているVisual Basicで使用可能な式などを指しています。

·   乱数を発生させる関数(ランダム関数)Rnd()

Rnd という関数は、0以上1未満の乱数(でたらめな数)を発生する関数です。ですから、0から0.99999までの適当な数が1つ発生することになります。

例1)ss = 10 * Rnd()

ss (変数)には、0以上10未満の小数点を含む乱数(でたらめな数)が代入されます.ですから、0から9.9999までの適当な数がssに入ります。

 

·   整数変換用関数:Int( )

Int( )というのは、整数に変換する関数で、カッコ内の数値を切捨てした整数(小数点以下切捨て)に置きかえします。

例)kk = Int(10 * Rnd() + 1)

そのため、kk には、1から10までの整数の乱数(でたらめな数)が代入されます。Rnd関数は、0以上1未満の乱数で、Int関数は、切り捨てであるため、1を加算することで、1から10までの数を出すことが可能となります。

 

さらに、いくつかの参考となるコードを説明しておきます。

·    「終了」の命令:End 

プログラムを終了させます。これは,前回,既に使っています.以下の命令は,ボタン2をクリックするとプログラムが終了するものです.

     例)    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

          End

 End Sub

 

·    コメント:

プログラムの説明などを記述するための文である。行の最初にアポストロフィ「’」を記述すると、その行はコメントとなり、プログラムの実行には何も関係がなくなる。

例)aa = bb * 100  'aa の値は、bb の値の100倍である。

(「'」以後の文はコメントでプログラムに関係ないため、記述しなくてもプログラムは動作する)

 

·    でたらめの数の出る順番(種)をランダム(無作為)にする命令Randomize() 

でたらめの数の出る順番がいつも同じでないようにする命令です.これは、乱数の関数を使う前に一度だけ実行すれば良い命令です。そのため、フォームがロード(呼び出し)された時にこの命令を実行するようにしましょう。

フォーム部分を選択してクリックします。表示されたコードに、以下のようにRandomize() という命令を加えます。完成したら、実行してみましょう。

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Randomize()

End Sub

 

 

 

 


演習課題(乱数:Rnd()と条件分岐:if文;おみくじ) 

 作成プログラム:おみくじプログラム

 

1)上記の乱数に関する説明を参考に,先に行った If 文を用いて、おみくじのプログラムを作成してください。

おみくじの分岐は3つ以上にしましょう。

例)

 

2)上記の例では,終了ボタンはありませんが,プログラムを終了させるためのボタンも作成してください。

 


演習課題の回答例:

1) 以下のようにフォームデザイナにツールボックス上のLabelButtonのツールを使って,プログラム説明,おみくじの表示部分,おみくじボタンを配置し,プロパティで表示文字の大きさや文字などをかえておく.なお,おみくじの表示のLabelプロパティにおいて,配置の中の「AutoSize」を「False」にし、さらに「Size」を「100, 30」などとして(文字枠の大きさ)、「TextAlign」を「MiddleCenter」にしておくと,1文字でも2文字でも枠の真ん中に表示されるようになります.

 

2) おみくじボタンをクリックして,コードエディタを表示させます.まず,おみくじのために使用する乱数の範囲を決め,その値を入れておく,変数名(uranai)を決めて変数宣言を行います.おみくじボタン(Button1という名前)には,乱数とif文を用いて以下に示すコード例のようなコード(動作命令)を入力していきます.

  おみくじの出る順番が同じでは,困りますので,「Randomize()」(でたらめの数の出る順番(種)をランダム(無作為)にする命令)」を,フォームをクリックして,ロードされたときには動作するようにしておきます.

 

コード(動作命令)の例:

        Dim uranai As Integer

 

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

          uranai = Int(Rnd() * 6 + 1)

 

          If (uranai = 1) Then

            Label2.Text = ""

          ElseIf (uranai = 2 Or uranai = 3) Then

            Label2.Text = ""

          Else

            Label2.Text = "大吉"

          End If

        End Sub

 

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          Randomize()

        End Sub

 

この例では,変数uranaiに乱数で1から6までのでたらめな数が作られるようにして,そのuranaiの値をif文の判定によって,1であったときは「凶」,2か3の時は「吉」,それ以外(4か5か6)であるときは「大吉」とLabel2.Textに表示させている.

また,フォームをクリックし,プログラムが実行されたときに,乱数の発生する順番(種)が同じにならないように,Randomize()の命令を実行するようにしている.

 

3) ここまで入力をおえたら,実行してみる.

おみくじボタンをおすことで,おみくじ結果が変われば,完成です.終了させ,再度占ったときに,同じ占いの繰り返しでないかを確認して下さい.

 

4) 演習課題の指示に従って,終了のコマンドボタンをフォームにButtonのツールで配置し,終了ボタンに対するコードを追加しておきましょう

 

5) 完成したら,すべてを保存しておきましょう.

 

6) また,おみくじの内容と出る確率について考えてみましょう。

乱数:1〜6  uranai = Int(Rnd() * 6 + 1)

 

凶:1(1/6: 16.6%)             If (uranai = 1) Then

                            Label2.Text = ""

 

     吉:2,3 2/6 = 1/3: 33.3%)   ElseIf (uranai = 2 Or uranai = 3) Then

                            Label2.Text = ""

 

     大吉:4,5,6 3/6 = 1/2: 50%) Else

                              Label2.Text = "大吉"

                            End If

 

a)   大吉の出る確率を33.3%にし、吉の出る確率を50%、凶はそのままにしてみましょう。

 

b)大吉の出る確率を16.6%にし、吉の出る確率を残り66.6%、凶はそのままにしてみましょう。

 

7) さらに条件分岐を増やして、中吉を入れることしてみましょう。確率は、上記、b)の吉の確立を減らして、33.3%ずつに振り分けてみましょう。

 

8) さらに,条件分岐の部分を工夫し,おみくじの内容と出る確率なども考えて,プログラムを改良してみましょう.

 

9) また,わかりやすいように、一度、おみくじを消すボタンを設けること、終了ボタンを設けることをして,プログラムを改良してみましょう.

 

以上.


加藤のページへ | ICTメディア編集U | 12月5日講義資料の先頭へ