ASP乱数RND()の使用方法

2731 ワード

ASP関数rnd()
関数rnd()は0から1までの乱数を返します。
使用方法は以下の通りです。
レスポンス.write rnd()'の可能な戻り値:0.357746
ある範囲の整数をrnd()関数で返したい場合、例えば0以上で、特定の整数uperboundに等しい数字より小さい場合、次のような方法があります。
レスポンス.write int(uperbound+1)*rnd)
例えば、以下の語句は0と5の間の整数を返します。0と5を含みます。
レスポンス.write int((5+1)*rnd)
ある範囲の乱数を求めたいなら、この範囲は0より大きい下界lowerboundがあり、次のような方法が使えます。
reponse.write int(uperbound-lowerbound+1)*rnd+lowerbound)
例えば、以下のスクリプトは50から75までの整数を生成し、50と75を含む。
レスポンス.write int((750-50+1)*rnd+50)
しかし、一つの乱数が発生した問題がありますが、毎回同じ乱数です。これは非常に理解できないかもしれません。この問題を解決するために特別な言葉があります。
randdomize文は、新しい乱数シーケンスを使用して、関数rndを強制的に使用します。randdomize文は、コンピュータのシステムタイマーによって、関数rndに新しいシード値を提供します。
関数RND()は非常に重要な関数である。ランダムな挨拶語を作成する場合、日付のランダムヒント、またはゲームのいずれかを使用します。
関数RND()は0から1までの乱数を返します。この関数の一例と可能な戻り値がここにあります。
<%=RND(%>
0.705643
典型的には、この関数である範囲の整数を返します。0以上の整数を返すには、次のような語句が使えます。
<%=INT((uperbound+1)*RND)>
あなたが生成したい最大の乱数を表式uperboundに置き換えます。例えば、以下のスクリプトは0と5の間の数を返します。0と5を含みます。
<%=INT(5+1)*RND]%
ある範囲の乱数を生成したいなら、その範囲は0より大きい下界があり、次のようなスクリプトが使えます。
<%=INT((uperbound C lowerbound+1)*RND+lowerbound]>
例えば、以下のスクリプトは、50から75までの乱数(50と75を含む)を生成する。
<%=INT((75-50+1)*RND+50%>
関数RND()はいつでも同じ順番で同じ乱数に戻ります。これは驚きかもしれません。次のような例を考えます。

<%
Pick_Greeting=INT((2+1)*RND)
SELECT CASE Pick_Greeting
CASE 0
Greeting=”Welcome!”
CASE 1
Greeting=”Hello!”
CASE 2
Greeting=”Happy to see you!”
END SELECT
%>
<%=Greeting%>
このスクリプトはランダムな挨拶文を作成して印刷します。しかし、あなたの思った通りに仕事をしないかもしれません。いつかこのシナリオを含むページをダウンロードした人がいても、同じランダム挨拶が印刷されます。このホームページに何度か戻ると、彼か彼女は同じような挨拶を受けることになります。一つの乱数が発生しましたが、毎回同じ乱数です。
この問題を解決するために特別な言葉があります。RAND DOMIZE文は、新しい乱数シーケンスを使用する強制関数RND()を使用します。RAND DOMIZE文は、コンピュータのシステムタイマーを介して、関数RND()に新しいシード値を提供します。以下の例は、上記の例をどのように修正し、正しく動作させるかを示しています。

<%
RANDOMIZE
Pick_Greeting=INT((2+1)*RND)
SELECT CASE Pick_Greeting
CASE 0
Greeting=”Welcome!”
CASE 1
Greeting=”Hello!”
CASE 2
Greeting=”Happy to see you!”
END SELECT
%>
<%=Greeting%>
このスクリプトは正しく動作します。このスクリプトを実行するたびに、新しいランダムメッセージが作成されます。RAND DOMIZE文強制関数RND()は、新しい乱数シーケンスを使用します。
最後に、関数RND()によって生成された数値の分布に興味があるなら、次のシナリオでそれを確定できます。

<%
CONST upperbound=9,iterations=100
REDIM DIST(upperbound)
RANDOMIZE
FOR i=1 to iterations
rnd_num=INT((upperbound+1)*RND)
DIST(rnd_num)=DIST(rnd_num)&”#”
NEXT
FOR i=0 to upperbound
%>
<%=i&” : “&DIST(i)%><BR>
<%
NEXT
%>
このスクリプトは0から9までの間に100個の乱数を生成します。その追跡は、各値に対していくつの乱数が発生しますか?最後に、結果を表す棒グラフを印刷します。