Contents
0以上Range未満の範囲にある乱数(整数)を返します。引数を省略した場合は、0以上1未満の乱数(有効数字15桁)を返します。
- 構文
- return = RANDOM( [Range] )
- 引数
- Range
- 数値
- 戻り値
- 0
例
0以上10のN乗未満の整数を返す
PRINT RANDOM(POWER(10, N))
PRINT INT(RANDOM() * POWER(10, N))
M以上N未満の整数を返す
PRINT M + RANDOM(N – M)
M以上N以下の整数を返す
PRINT M + RANDOM(N – M + 1)
ランダムな小数
ランダムな小数を取得したい場合は、整数を取得してから全体を1/10, 1/100などのようにして小数点の位置をずらします。
以下の例は、15以上23以下で取得してから1/10して1.5以上2.3以下を取得する例。
PRINT (15 + RANDOM(23 – 15 + 1)) / 10
N桁の整数を返す
M以上N未満の整数の応用です。
PRINT POWER(10, N – 1) + RANDOM(POWER(10, N) – POWER(10, N – 1))
3桁
100以上1000未満の範囲。
PRINT 100 + RANDOM(1000 – 100)
4桁
1000以上10000未満の範囲。
PRINT 1000 + RANDOM(10000 – 1000)
5桁
10000以上100000未満の範囲。
PRINT 10000 + RANDOM(100000 – 10000)
取得したランダム値の範囲を確認
以下は「RANDOM(10)」が取りうる範囲を調べるプログラムです。
RANDOM関数で取得したランダム値を100回取得しすべて配列に格納して、その最小値と最大値を取得しています。RANDOM(10)は0〜9と範囲が狭いのでとりあえず100回にしてますが、ランダム値の取る範囲に応じて回数を増減させる必要があります。
これを実行して想定していない範囲外の値が出るようであれば、間違っているということがわかります。
DIM array[-1]
FOR i = 1 TO 100
arrayPush(array, RANDOM(10))
NEXT
PRINT “最小値:” + CALCARRAY(array, CALC_MIN)
PRINT “最大値:” + CALCARRAY(array, CALC_MAX)
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- 結果
最小値:0 最大値:9
プログラム実行例
パスワードを生成
パスワードを10個生成します。
結果は実行する度に変わります。
REPEAT
res = INPUT("何桁のパスワード?")
IF res = EMPTY THEN EXIT
UNTIL CHKNUM(res)
FOR num = 0 TO 10
DIM password = ""
FOR n = 0 TO res
SELECT RANDOM(3)
CASE 0
password = password + CHR(RANDOM(10) + 48)
CASE 1
password = password + CHR(RANDOM(26) + 65)
CASE 2
password = password + CHR(RANDOM(26) + 97)
SELEND
NEXT
PRINT password
NEXT
- 結果
D659nv9Z6Q1t1MXjXfPUMMe35r012a639 XsQg7139wsUWF2q764f9AiopT451aULBC A8a2t7Iq0Tl7Ij3W4p5RmQ97ElwvkWeG4 u8RTBF1aDt365Y436XC09Uo5X9kWHc4dS AeCg2uNoUrCR9FsjYHtdhHg2bB6S92NhY 3eR4l89x7WGf1SZTlpDcIbBc25IbEgk4a nuT94OR530poRBt9s0wF1b275qAfGDOHa KTRa7wmEHjab2MopiT8u3aPwI6ntWmMt5 Bz626hGf9GS6yeZQyHrIAbEk1N0fs1ZL5 6Nze7rld3Rmd0tU0Y6kgP1AUwab0bjQlR 11C0x8862eOP1AVjVlXz7rEl4nKkR91Hf
アルファベットの大文字(A〜Z)でランダムに1文字取得
文字コードを65〜90(A〜Z)の範囲でランダムに取得し、それを文字に変換する。
PRINT CHR(65 + RANDOM(90 - 65 + 1))
ランダムな数値を返す
0以上10未満のランダムな数値を返す。
PRINT RANDOM(10)
- 結果
5
0以上1未満の乱数を返す
PRINT RANDOM()
- 結果
0.146521859802306
マウスカーソルをランダムな位置に移動
DIM x = G_SCREEN_W
DIM y = G_SCREEN_H
MMV(RANDOM(x), RANDOM(y))
関連記事
- ABS (スクリプト関数)
- 引数の絶対値を求めます。
- ARCCOS (スクリプト関数)
- 引数の逆余弦を求めます。
- ARCSIN (スクリプト関数)
- 引数の逆正弦を求めます。
- ARCTAN (スクリプト関数)
- 引数の逆正接を求めます。
- CEIL (スクリプト関数)
- 正の方向へ切り上げた数値を返します。
- EXP (スクリプト関数)
- 自然指数関数を求めます。
- LN (スクリプト関数)
- 自然対数を求めます。
- LOGN (スクリプト関数)
- 常用対数を求めます。
- ZCUT (スクリプト関数)
- マイナス値を0にして返します。プラス値はそのままの値を返します。
- INT (スクリプト関数)
- 小数点以下を切り捨てた値を返します。負の値の場合、正の値のようにより小さい値にではなく0に近い側に切り捨てされます。
- POWER (スクリプト関数)
- 数値のべき乗を求めます。
- ROUND (スクリプト関数)
- 指定した位置で偶数丸めした値を返します。四捨五入する場合は、roundOff関数を使います。
- SQRT (スクリプト関数)
- 引数の平方根を求めます。累乗根はPOWER関数を使います。
- fact
- 引数に指定した自然数の階乗を求めます。再帰関数。二重階乗を求めるにはfactDouble関数を使います。
- isEven
- 引数に指定した数値が偶数かどうかを調べます。偶数ならばTrue、それ以外の数値はFalse、文字列はエラー値を返します。
- isOdd
- 引数に指定した数値が奇数かどうかを調べます。奇数ならばTrue、それ以外の数値はFalse、文字列はエラー値を返します。
- radToDeg
- 弧度法(Radian)を度数法(Degree)に変換します。度数法を弧度法に変換するにはDegToRad関数を使います。
- degToRad
- 度数法(Degree)を弧度法(Radian)に変換します。弧度法を度数法に変換するにはRadToDeg関数を使います。
- factDouble
- 引数に指定した自然数の二重階乗を求めます。戻値の型はDouble型です。再帰関数。階乗を求めるにはfact関数を使います。
- GCD
- GCD関数は、引数に指定した配列の最大公約数(Greatest Common Measure)を求める関数です。最小公倍数を求めるには、LCM関数を使います。
- LCM
- LCM関数は、引数に指定した配列の最小公倍数(Least Common Multiple)を求める関数です。最大公約数を求めるには、GMD関数を使います。
- hexToDec
- 16進数を10進数に変換します。10進数を16進数に変換するにはdecToHex関数を使います。
- decToHex
- 10進数を16進数に変換します。16進数を10進数に変換するにはhexToDec関数を使います。
- binToDec
- 2進数を10進数に変換します。10進数を2進数に変換するにはdecToBin関数を使います。
- binToHex
- 2進数を16進数に変換します。16進数を2進数に変換するにはhexToBin関数を使います。
- hexToBin
- 16進数を2進数に変換します。2進数を16進数に変換するにはbinToHex関数を使います。
- decToBin
- 10進数を2進数に変換します。2進数を10進数に変換するにはbinToDec関数を使います。
- isPrime
- 引数に指定した数値が素数かどうかを調べます。素数の場合True、素数でない場合Falseを返します。
- ARABIC
- ARABIC関数は、ローマ数字をアラビア数字に変換する関数です。アラビア数字をローマ数字に変換するには、ROMAN関数を使います。
- normalizeAngle
- 度単位の角度を0~360度に正規化します。
- divisors
- 引数に指定した数値の約数をリストを配列で返します。
- digitSum
- 引数に指定した数字和(数値の各桁を足した結果)を返します。正の整数以外を指定した場合は、エラー値を返します。
- Collatz
- コラッツ数列を求め結果を配列で返します。
- Kaprekar
- カプレカ数を求め結果を配列で返します。
- ROMAN
- ROMAN関数は、アラビア数字をローマ数字に変換する関数です。ローマ数字をアラビア数字に変換するには、ARABIC関数を使います。