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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1129
R乱数について12解決


R

リンク

2007/11/29(Thu) 14:06:23|NO.12631

乱数1〜10を指定回数発生させ、
そのうち一番発生した回数の多かったものを、
表示するようなスクリプトを考えているのですが、
何かいい方法はありませんか?



この記事に返信する


べなりあ

リンク

2007/11/29(Thu) 15:05:06|NO.12632

配列をカウンタとして使えば出来ます。


randomize repeat 100 k(rnd(10))++ loop max=0 repeat 10 mes ""+cnt+":"+k(cnt) if max<k(cnt) : max=k(cnt) : max2=cnt loop mes "\n最も発生した数値"+max2

0〜9で発生させていますが、少し変えれば1〜10にも出来ると思います。



R

リンク

2007/11/29(Thu) 16:42:38|NO.12634

レスありがとうございます

このスクリプトを少しいじってみたのですが、
ボタンなどで実行すると、
どんどんcntが累積してしまうのですが、
ボタンを押す度にリセットして実行し直すにはどうしたらいいんでしょう?



掘木

リンク

2007/11/29(Thu) 18:26:18|NO.12639

カウントが蓄積されるのは
カウントに使った変数がリセットされてないからですよ・・・たぶん

べなりあさんのソースを少々いじって

p1=100
*top
cls
mes "↓乱数発生数"
input p1
button "もう一度",*top
pos 0,80
randomize
dim k,10 //ここで一度、蓄積カウントを0に再定義
repeat p1
k(rnd(10))++
loop

max=0
repeat 10
mes ""+cnt+":"+k(cnt)
if max<k(cnt) : max=k(cnt) : max2=cnt
loop

mes "\n最も発生した数値"+max2
stop


こんな感じですかね?



R

リンク

2007/11/29(Thu) 20:52:16|NO.12640

レスありがとうございます

dim k,10 の10の部分は、
乱数を発生させる数に応じて増やした方がいいのでしょうか…?



掘木

リンク

2007/11/29(Thu) 22:07:49|NO.12642

あら・・・スクリプト囲むの忘れてた;;

乱数が1〜10の間10コ(このスクリプトでは0〜9の10コ)
なので配列定義数が10になってる。

乱数の幅を広げたり狭めたりしたら変える必要がありますね。



GENKI

リンク

2007/11/30(Fri) 00:52:38|NO.12644

ちなみにdimでリセットするという意味なら「dim k,0」としてかまいません。

p1=100 : p2 = 10 mes "↓乱数発生回数" input p1 mes "↓乱数の範囲" input p2 button "もう一度",*top *top redraw 0 : color 255,255,255 : boxf 0,130 : color : pos 0,150 randomize dim k,0 //ここで一度、蓄積カウントを0に再定義 ;dim k,p2 ;この場合はいっそこうしてしまったほうが簡単ではある。 maxr=0 repeat p1 r = rnd(p2) k(r)++ ;←配列が自動確保されます。 if maxr<r : maxr=r ;配列がいくつまで確保されたか確認。 loop max=0 repeat maxr+1 ;確保された配列の分だけチェックする。 mes ""+cnt+":"+k(cnt) if max<k(cnt) : max=k(cnt) : max2=cnt loop pos 0,130 : mes "最も発生した数値"+max2 redraw 1 stop
しかし、処理が面倒だった…。作るんじゃなかった。

とこのようになるので、素直に必要な個数分だけ宣言しておいたほうがいいです。


ほんとになんでこんなサンプル作ったんだろう…。orz



R

リンク

2007/11/30(Fri) 06:22:09|NO.12648

>>堀木さん
わかりました!
乱数に合わせて変えて置く事にします〜

>>GENKIさん
分かりやすいスクリプトで説明していただいて感謝です!
実行してみて気になった事があるのですが…
p2の数が多くなると、

mes ""+cnt+":"+k(cnt)
の行数がウィンドウに収まりきらなくなる現象を、
どうにかする手立てというのはあるのでしょうか?
今のところこの一文を外して結果のみを表示しようとしているのですが…



f

リンク

2007/11/30(Fri) 17:12:02|NO.12655

・・・・・・・・・・・。

とりあえずposとエディタで打って、それにカーソル合わせてf1押せば良いんでね?



mk2

リンク

2007/11/30(Fri) 17:27:49|NO.12656

>>GENKIさん
lengthで普通に取得できますよ。


・・・ //maxr=0 repeat p1 r = rnd(p2) k(r)++ ;←配列が自動確保されます。 //if maxr<r : maxr=r ;配列がいくつまで確保されたか確認。 loop max=0 //repeat maxr+1 ;確保された配列の分だけチェックする。 repeat length(k) ・・・



掘木

リンク

2007/11/30(Fri) 18:06:14|NO.12657

そうか・・・dimの配列定義数0ってできるのか・・・Hsp2ではエラーになったが・・・。
GENKIさんのスクリプトの

if max<k(cnt) : max=k(cnt) : max2=cnt loop
この2行の間に

if ginfo(23)>420 : pos ginfo(22)+ginfo(14)+20,150
とでも入れれば「縦方向」については解消できると思われ。

ぇ?横にはみ出す?そこまでいうならListboxでも使うといいよorz



R

リンク

2007/11/30(Fri) 18:54:16|NO.12658

>>堀木さん
私もいろいろやって見たものの、
上手く表示する事すら出来ませんでした;
これはもうはみ出す運命なんだと諦めて結果のみの表示にしようと思います。


レスをくれた皆様へ、
長々とお付き合いして頂いてありがとうございました〜
皆様への感謝とともに、
これで解決とさせて頂きます!
ありがとうございました〜



GENKI

リンク

2007/11/30(Fri) 21:59:49|NO.12662

>> mk2さん
> lengthで普通に取得できますよ。

その手がありましたね。すっかり忘れてました…。

行数多すぎて表示できなくなって困るならmesbox命令使うのもいいですね。



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