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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0313
ZOCmif桁数を増やしていく方法16解決


ZOCmif

リンク

2010/3/13(Sat) 19:42:46|NO.31180

HSP初心者です。

数字の桁数を増やしていくには、どのようなスクリプトにすれば良いでしょうか。
具体的に言いますと、レベルが上がるごとに表示される桁を増やしていきたいのです。
たとえば、レベル1のときに1桁の数字、レベル2のときに2桁の数字のようにしたいのです。
私が試行錯誤して考えたスクリプトは、以下のとおりです。
まだ途中ですので、わけのわからないものになっていると思います。


revel=1 sa=1 suchi.revel=rnd(8)+1 mes suchi.revel *kensa if revel-sa=0 : goto *nyuryoku : else : suchi.revel-sa=rnd(8)+1 : mes suchi.revel-sa : sa++ : goto *kensa もっと良い方法はあるのでしょうか?



この記事に返信する


窓口

リンク

2010/3/13(Sat) 20:36:14|NO.31182


mes strf("% 8d" , 120)

よくわかりませんが、こういうことでしょうか?



窓口

リンク

2010/3/13(Sat) 20:41:59|NO.31183


level = 1 num = 2 mes num*powf(10 , level-1)

あるいはこんな感じとか?



maa

リンク

2010/3/13(Sat) 20:49:33|NO.31184

レベル1のときは一桁の乱数を表示して、レベル2のときは二桁の乱数を表示するようにしたいのかも。



ZOCmif

リンク

2010/3/13(Sat) 21:03:18|NO.31185

maaさんのおっしゃる通りのことをしたいのですが、なかなかうまくいかないのです。



Ve

リンク

2010/3/13(Sat) 21:06:09|NO.31186

全然分からん。



hoogle

リンク

2010/3/13(Sat) 21:11:42|NO.31187


mes 1*10 mes 2*10 mes 3*10
算数を習い直したほうがいいんじゃないか?



Ve

リンク

2010/3/13(Sat) 21:18:47|NO.31188


randomize lv=3 tmp=0 suchi=0 keta=1 repeat lv suchi+=(rnd(8)+1)*keta keta*=10 loop mes suchi

わからん…



SYAM

リンク

2010/3/13(Sat) 21:26:48|NO.31189


randomize repeat 7 level = cnt + 1 valstr = "" repeat level : valstr += rnd(10) : loop value = int(valstr) mes "LEVEL" + level + " " + value loop

桁を増やしたいなら 10 をかければいいじゃない!

……とは思うんだけど、単純に 10 , 100 , 1000 … と作っちゃうと、
それを rnd() 関数に渡しても 5 桁から先の乱数が作れないので、
単純に 0 〜 9 の文字を level ぶんだけくっつけて int()関数で数値化しました。

何がしたいのかはまだ理解してませんが、maaさんの仰ったものならこれでできますね。
ただし、「レベル n のときは必ず n 桁」…というような条件だとこれでも不足です。
連結する文字列の最初の一つだけ、 1 〜 9 から選ばないといけません。


valstr = ""+(rnd(9)+1) repeat level-1 : valstr += rnd(10) : loop



晩御飯

リンク

2010/3/13(Sat) 21:44:06|NO.31190


randomize // 乱数初期化 level = rnd( 4 )+1 // レベル5まで。レベル0はエラーになるので+1で回避 mes strf( "Level: %d", level ) // 頭と本体を別々に乱数で出す num = ( rnd( 9 )+1 ) * powf( 10, level-1 ) + rnd( powf( 10, level-1 ) ) mes strf( "Random: %d", num )

さっぱり分からないけどmaaさんの解釈を元に。
推理力の試されるインターネットですね。



晩御飯

リンク

2010/3/13(Sat) 21:46:52|NO.31191

ソースの2行目は level = rnd( 5 )+1 か。
そもそも他の人と被ってるわ。



u

リンク

2010/3/14(Sun) 01:23:38|NO.31196

乱数を文字列として結合させれば早いです。


randomize ;level=1 level=2 a="" repeat level;レベル分の桁でループ a+=str(rnd(10)) loop mes int(a)



ZOCmif

リンク

2010/3/14(Sun) 14:05:12|NO.31217

皆さんを困らせて本当に申し訳ありません。
uさんのものが私の理想に近いです。
しかし、10桁を超えると正常にはなりませんでした。(マイナスなど)
わがままばかりですみません。
でも、このスクリプトをもう少し変えていけば、私の理想になりそうです。



maa

リンク

2010/3/14(Sun) 14:24:56|NO.31220

mes int(a)をmes aに変えればいいような。



u

リンク

2010/3/14(Sun) 17:08:13|NO.31227

沢山の桁になることを考慮していませんでした。

そうですね、無理に数値型にする必要がなければmes aで十分です。

ですが文字列型のままだと1+1だと11とかになっちゃいますので演算はできなくなります。



M

リンク

2010/3/15(Mon) 00:15:39|NO.31240

こうすれば、LEVEL1のときは0〜9、LEVEL5のときは0〜99999、LEVEL-3のときは0〜999の乱数が得られるはず。
整数の限界があるので、LEVELは9までが限界。

randomize #const INT_MAX 2147483647 ; 整数の最大値 LEVEL=5 ; レベル(マイナスも可) s="0000000000"+str(rnd(INT_MAX)); 0〜INT_MAXまでの乱数をつくり、先頭を0で生めておく N=int(strmid(s,-1,abs(LEVEL))) ; 左端からLEVEL数だけの文字をとり、数値に変換。LEVELは絶対値を取っているのでマイナスでも良い。 mes str(N)

どういう値を入れたときに、どういう値がほしいのかを明確にしてくれると、的を得た回答が得られやすいと思う。



ZOCmif

リンク

2010/3/15(Mon) 18:06:35|NO.31261

みなさん、私のワガママに付き合っていただき、ありがとうございました。
uさんとmaaさんの言う通りでした。このスクリプトを参考にしていきたいと思います。
その他のみなさんも本当にありがとうございました。



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