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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1209
ZOCmif桁数を増やしていくループ4未解決


ZOCmif

リンク

2007/12/9(Sun) 02:00:06|NO.12728

桁数を増やして、それを乱数にしたく、下のでやってみたのですが、上手くいきません。
なにが間違っているか、そして正しいスクリプトを教えて下さい。


     randomize val=1 repeat a=rnd(val) val=""+val+"0" wait 1 mes a loop stop



この記事に返信する


f

リンク

2007/12/9(Sun) 03:38:48|NO.12730

何のエラーが何処で出ているか位書いとけ。

とりあえず、rndにカーソル合わせてf1押して、書いてある事とvalの変数の中身
がどうなっているか確認してみれば良いんでね。

俺としては「10倍すれば桁が上がる」位の事をスクリプトつけてまで解説したくは無いぞ。



矢野

リンク

2007/12/9(Sun) 10:38:54|NO.12738

fさんが指摘されたように、aを、文字ではなく、数字として考えて下さい。
たとえば、5桁まで増やすとすると、次のようになります。

randomize val=10 repeat 5 a=rnd(val) val=val*10 wait 1 mes a loop
これで解決にしてもいいのですが・・・

rnd 関数は、上の例で言うと0からvalまでの数字で返します。
たとえば、2巡目に2桁の数字ではなく、1桁の数字が返されると
そこの数字は2桁ではなく、1桁になってしまいます。

そのことは、上のスクリプトを何度か実行すると、再現されると思います。
そこで、桁数をそろえるために、strf 関数を使用してみました。

randomize val=10 repeat 5 a=rnd(val) val=val*10 wait 10 if cnt=0 : mes a if (cnt=1)&(a<10) : b=strf("%02d",a) : mes b if (cnt=1)&(a>10) : mes a if (cnt=2)&(a<100) : b=strf("%03d",a) : mes b if (cnt=2)&(a>100) : mes a if (cnt=3)&(a<1000) : b=strf("%04d",a) : mes b if (cnt=3)&(a>1000) : mes a if (cnt=4)&(a<10000) : b=strf("%05d",a) : mes b if (cnt=4)&(a>10000) : mes a loop
5桁ならこれでできるのですが、それ以上の大きな桁まで表示するときには
膨大な行数になってしまいます。
もっとうまい書き方があるかも知れませんが思いつきませんでした。

その点、最初のスクリプトは、ループの回数を増やすだけで
簡単に表示できます。

ZOCmifさんのやりたいのはどちらなのか分からなかったので、
両方の方法を、考えてみました。



osakana

リンク

2007/12/13(Thu) 08:42:31|NO.12787

> 膨大な行数になってしまいます。

簡単にやるならこんな感じでしょうか。

randomize val=10 repeat 5,1 a=rnd(val) val*=10 mes strf("%0"+cnt+"d",a) loop



矢野

リンク

2007/12/13(Thu) 21:58:04|NO.12791

なるほど!

mes strf("%0"+cnt+"d",a)
こんな書き方ができたのですね。



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