FreeBASIC マニュアルのトップに戻る

FreeBASIC Rnd

目次→ランタイム・ライブラリー参考→数学関連RND←オリジナル・サイト

RND 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい


 範囲 [0, 1) で無作為の DOUBLE (倍精度) 数を返します。
 注:記号「[」は、「以上」を、「)」は、「未満」を意味します。


構文:
declare function Rnd ( byval seed as SINGLE (短精度) = 1.0 ) as double

用法:
result = Rnd( seed )

パラメタ:
seed
Optional SINGLE (短精度) argument.
 seed(種)にゼロ (0.0) の値を設定すると、最後に発生した乱数が繰り返されます。ゼロ以外の場合は、新しい乱数が返されます。
 QB互換アルゴリズムで、負数は、新しい種で生成させます。
 未設定の場合は、新しい乱数を返します。

戻り値:
 生成された乱数が、戻ります。

説明:
 乱数の種子(Randomize を参考)にもとづく、[0, 1) の範囲(すなわち、0 ≦ Rnd < 1)の、double(倍精度) 形式の数が、戻ります。

 Rnd は、さまざまな異なったアルゴリズムを使用できます。
--デフォルトと選択可能なアルゴリズムの詳細については、関して Randomize を参考してください。

 プログラムが実行されるとき、Rnd は、いつも同じ数列を返します。
 ジェネレータの種子を変更することで、この系列を変えることができます。

例:
'' [最初, 最後)、または {最初 <= x < 最後} の範囲の乱数を発生させる関数
Function rnd_range (first As Double, last As Double) As Double
    Function = Rnd * (last - first) + first
End Function

'' 乱数発生器に種をまいて、毎回、同じ系列にならないようにします。
Randomize

'' 範囲 [0、1)、または {0 <= x < 1} の乱数を、表示します。
Print Rnd

'' 範囲 [0、10)、または {0 <= x < 10} の乱数を、表示します。
Print Rnd * 10

'' 範囲 [1、11)、または {1 <= x < 11} の、無作為の整数を表示します。
'' これは、整数で、[1、10] 、または {1 <= n <= 10} と等しくなります。
Print Int(Rnd * 10) + 1

'' 範囲 [69、421)、または {69 <= x < 421} の、無作為の整数を表示します。
'' これは、[69、420]、または {69 <= n <= 420} と同じです。
Print Int (rnd_range(69, 421))
Sleep



次の例は、さいころを 2つ使って、足し算の問題を自動生成することをイメージしたものです。
画像 BMP ファイルとプログラムをダウンロードできます。→ AdditionUsing2Dices.zip

注意:このソースは、Unicode(UTF16LE)で、表示・編集して下さい。
さいころ 2つで足し算の問題
'//------------------------------------//
'作成 2019/07/06
'プログラミングの考え方:さいころを 2つ使って足し算の問題を自動生成してみる
'注意: このソースは、ユニコードで、表示・編集して下さい。
'//------------------------------------//

#Include Once "xfont.bi"

Dim A As Integer
Dim B As Integer
Dim S As Integer
Dim Dice1 As Any Ptr
Dim Dice2 As Any Ptr
Dim FileName1 As String
Dim FileName2 As String
Dim KeyInput As Integer

Dim x As Integer
Dim y As Integer
Dim Japanese As WString * 20
Dim Shared As xfont.interface font
font.loadfont("MsGothic.xf", 1) 'FontIndex 1 に、登録します
font.fontindex = 1 'フォントを使います


Print "サイコロを使って、足し算の問題を自動生成します。"
Print "何かキー入力で回答を表示します。そして次の問題を生成してます。"
Print "問題生成のくり返えしは、[Esc]キーで抜けます。"
Print

Screen 18, 32

Dice1 = ImageCreate(170,170)  '画像のために、記憶装置を、割り当てて、初期化します。
Dice2 = ImageCreate(170,170)  '画像のために、記憶装置を、割り当てて、初期化します。

Randomize

Do
   Cls
   ScreenRes 640, 480, 32
   A = Rnd * 6 + 0.5
   B = Rnd * 6 + 0.5
   S = A+B
   
   FileName1 = "dice" & Str(A) & ".bmp"
   FileName2 = "dice" & Str(B) & ".bmp"
   BLoad FileName1, Dice1
   BLoad FileName2, Dice2
   
   Put (70,200),Dice1
   Put (360,200),Dice2
   
   Print
   Print
   Print
   Print
   Print Using "  ## + ## = "; A; B;
   Sleep
   
   Japanese =" " & Str(S) & "   [Esc]キーで抜ける"
   x = 150
   y = 100
   font.drawstring ( , Japanese , x, y,3,3) '文字の大きさ 3倍 size
   
   print
   KeyInput = GetKey
   Sleep(2000)

Loop Until KeyInput = 27 ' [27]=[Esc] キー入力するまで、繰返す

ImageDestroy(Dice1)     '画像のための記憶装置を破棄して、割り当てを解除します。
ImageDestroy(Dice2)


方言差:

 使用されるデフォルト・アルゴリズムは、使用中の現在の方言によります:


QBとの違い:


参照:
数学関連 に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2012-10-11 22:33:19
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承