RANDOM

0以上Range未満の範囲にある乱数(整数)を返します。引数を省略した場合は、0以上1未満の乱数(有効数字15桁)を返します。

構文
RANDOM( [Range] )
引数
Range
数値
戻値
0 <= X < Rangeの範囲にある乱数を返す

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
  1. INPUT
  2. CHKNUM
  3. RANDOM
  4. CHR
結果
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))
  1. CHR
  2. RANDOM

ランダムな数値を返す

0以上10未満のランダムな数値を返す。

PRINT RANDOM(10)
  1. random
結果
5

0以上1未満の乱数を返す

PRINT RANDOM()
  1. RANDOM
結果
0.146521859802306

マウスカーソルをランダムな位置に移動

DIM x = G_SCREEN_W
DIM y = G_SCREEN_H

MMV(RANDOM(x), RANDOM(y))
  1. MMV
  2. RANDOM