HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0616
harutogames指定範囲の乱数5未解決


harutogames

リンク

2017/6/16(Fri) 21:00:16|NO.80249

乱数を作成するのにrndコマンドを使う
pre ex.)rnd=a(10) /pre
のは知っているのですが、その場合乱数がどうしても0からになってしまいます。
例えば10〜20の範囲で乱数を作る、ということはできませんか?



この記事に返信する


スペース

リンク

2017/6/16(Fri) 21:54:46|NO.80250

+10するのが一般的かと。



リンク

2017/6/17(Sat) 12:42:46|NO.80258

 こんにちは。
 ほしかったので作ってみました。
 なお、3時間半ほどで作ったので、バグとかがあるかもしれません。
 その点を了承のうえ、お使いください。

----------

#module random // 命令一覧 // rndInit p1, p2, p3 // 整数の乱数作成用の初期化処理 // p1:開始値 // p2:終了値 // p3:増減値 // 整数の乱数を取得するための準備をします。 // rndGet p1 // 乱数を取得 // p1:乱数生成のモードを指定 // 整数の乱数を取得します。 // p1を0にすると、作成されたすべての数字が対象となります。 // p1を1にすると、重複しないように乱数を作成します。 // rndInitD p1, p2, p3 // 小数の乱数の初期化処理 // パラメータはrndInitと同じ // 小数の乱数を取得するための準備をします。 // rndGet p1 // 乱数を取得 // パラメータはrndGetと同じ // 小数の乱数を取得します。 #deffunc rndInit int prm_1, int prm_2, int prm_3 if (prm_1>prm_2){ return -1 } if (prm_3 = "" | prm_3 = 0){ return -2 } notesel list nowNum=prm_1 repeat if (nowNum<=prm_2){ noteadd ""+nowNum nowNum+prm_3 }else{ break } loop max=notemax noteunsel return 0 #deffunc rndGet int prm_1 if (list = ""){ return "end" }else{ notesel list if (prm_1 = 0){ num=rnd(max) noteget ret, num ret=int(ret) noteunsel return ret }else{ num=rnd(max) noteget ret, num ret=int(ret) notedel num max = max-1 noteunsel return ret } } #deffunc rndInitD double prm_1, double prm_2, double prm_3 if (prm_1>prm_2){ return -1 } if (prm_3 = "" | prm_3 = 0){ return -2 } notesel listD nowNum=prm_1 repeat if (nowNum<=prm_2){ noteadd ""+nowNum nowNum+prm_3 }else{ break } loop max=notemax noteunsel return 0 #deffunc rndGetD int prm_1, int prm_2 if (listD = ""){ return "end" }else{ notesel listD if (prm_1 = 0){ num=rnd(max) noteget ret, num ret=double(ret) noteunsel return ret }else{ num=rnd(max) noteget ret, num ret=double(ret) notedel num max = max-1 noteunsel return ret } } #global // サンプル randomize // サンプルその1:整数の乱数を取得して表示する rndInit 1, 100, 1 if (stat = -1){ dialog "開始地が終了値よりも大きな値になっています。\n開始地を終了値より小さい値にして実行してください。", 1, "エラー" }else : if (stat = -2){ dialog "増減値を指定してください。", 1, "エラー" }else{ repeat 10 rndGet 0 if (refstr="end"){ dialog "範囲内の数字をすべて使い切りました。", 0, "終了" }else{ dialog stat } loop } // サンプルその2:負の数を含む整数の乱数を取得して表示する、重複なしで乱数を取得 rndInit -50, 50, 1 if (stat = -1){ dialog "開始地が終了値よりも大きな値になっています。\n開始地を終了値より小さい値にして実行してください。", 1, "エラー" }else : if (stat = -2){ dialog "増減値を指定してください。", 1, "エラー" }else{ repeat 10 rndGet 1 if (refstr="end"){ dialog "範囲内の数字をすべて使い切りました。", 0, "終了" }else{ dialog stat } loop } // サンプルその3:小数の乱数を取得して表示する、重複なしで乱数を取得 rndInitD 0.1, 2, 0.1 if (stat = -1){ dialog "開始地が終了値よりも大きな値になっています。\n開始地を終了値より小さい値にして実行してください。", 1, "エラー" }else : if (stat = -2){ dialog "増減値を指定してください。", 1, "エラー" }else{ repeat 10 rndGetD 1 if (refstr="end"){ dialog "範囲内の数字をすべて使い切りました。", 0, "終了" }else{ dialog refdval } loop } end

----------

 とりあえず、こんな感じでどうでしょうか。
 参考になれば幸いです。



一夕ヒ

リンク

2017/6/17(Sat) 12:46:00|NO.80259

どうぞ。

#module #defcfunc Rndint int _Rnds, int _Rnde Rnds=_Rnds Rnde=_Rnde if Rnds>Rnde { sw=Rnds Rnds=Rnde Rnde=sw } return rnd(Rnde+1-Rnds)+Rnds #global randomize mes Rndint(1,100)



科学太郎

リンク

2017/6/17(Sat) 13:07:48|NO.80260

> +10するのが一般的かと。
+10と「0〜10」をrnd関数で発生させれば良いでしょう。

n=rnd(11)+10



科学太郎

リンク

2017/6/17(Sat) 13:10:05|NO.80261

追記。

#define ctype RAND(%1,%2) (rnd((%2)-(%1)+1)+(%1))

%1〜%2までの乱数を発生するマクロ関数です。
どうぞ。



ONION software Copyright 1997-2023(c) All rights reserved.