RANDOM

タグ:

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

構文
  1. 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
  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

関連記事

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関数を使います。