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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0403
??????????????????????????????自作関数を作ってみた6解決


??????????????????????????????

リンク

2017/4/3(Mon) 23:51:36|NO.78868


#module #defcfunc IntAdd var varname, int varint varname = int(varname) varname = varname + varint return varname #defcfunc IntSubtraction var varname, int varint varname = int(varname) varname = varname - varint return varname #defcfunc DoubleAdd var varname, double vardouble varname = double(varname) varname = varname + vardouble return varname #defcfunc DoubleSubtraction var varname, double vardouble varname = double(varname) varname = varname - vardouble return varname #defcfunc CheakEvenOdd int number if number \ 2 = 0 : ans = 0 : else : ans = 1 return ans #defcfunc Rndint int Rnds, int Rnde repeat -1 randomize if Rnds < 0 : ans = -1 : break if Rnds > Rnde : ans = -1 : break ans = rnd(Rnde)+1 if ans >= Rnds : break loop return ans #global
自作関数を作ってみました。
どうでしょうか?アドバイスなどを教えて下さい!!



この記事に返信する


沢渡

リンク

2017/4/4(Tue) 02:37:44|NO.78871

まず、最初の4つの関数。これを実行すると第一引数に指定した変数の中身が
変わってしまうので、ちょっと不味いです。
(実行結果は返値という形で返すので、変数をいじる必要はない)
また、引数にvarを使っているので、変数以外を引数にすることができなくなってしまっています。

次に6番目、「第一引数以上、第二引数以下の数値をランダムで返す」という関数だと思いますが、
「計算結果が第一引数以上になるまでループを繰り返す」という形になっているため、
引数の取り方次第では時間がかかってしまいます。
また、rndomizeは一回実行すればいいので、関数内で呼ぶ必要はありません。

以上を踏まえた上で修正してみます。

#module #defcfunc IntAdd int int1, int int2 return int1+int2 #defcfunc IntSub int int1, int int2 return int1-int2 #defcfunc DblAdd double dbl1, double dbl2 return dbl1+dbl2 #defcfunc DblSub double dbl1, double dbl2 return dbl1-dbl2 #defcfunc CheckEvenOdd int number return number \ 2 #defcfunc Rndint int Rnds, int Rnde if (Rnds<0)|(Rnds>Rnde) : return -1 return rnd(Rnde+1-Rnds)+Rnds #global //以下、実行テスト mes IntAdd(1,1) mes IntAdd(1.23,1.99) mes mes IntSub(2,1) mes IntSub(2.34,0.65) mes mes DblAdd(1.23,2.34) mes DblAdd(1,2) mes mes DblSub(2.34,1.23) mes DblSub(2,1) mes mes CheckEvenOdd(3) mes CheckEvenOdd(4) mes randomize repeat 5 mes Rndint(7,10) loop

このような形でよろしいでしょうか?



??????????????????????????????

リンク

2017/4/4(Tue) 12:07:21|NO.78884

おー!!
ありがとうございます!!



沢渡

リンク

2017/4/4(Tue) 13:39:09|NO.78891

追記です。最後のRndintを改良し、第一引数>第二引数であっても、また引数に負の値をとっていても、
問題なく動作できるようにしました。

#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 //常にRnde>=Rndsになっているので、たとえいずれかの数値が負の値でも、rnd内は常に1以上の正の値になる。



                              

リンク

2017/4/4(Tue) 13:58:35|NO.78892

お!!
こちらも参考にします!!



Mitumitu2016

リンク

2017/6/18(Sun) 22:47:39|NO.80301

名前ながいw

見づらいから短くしてくれたらうれしいですw



No Name

リンク

2017/6/18(Sun) 23:34:04|NO.80303

>NO.80301

>名前ながいw

>見づらいから短くしてくれたらうれしいですw


何がしたいのでしょうか?確かに名前は長く見にくいですが、
この件が云々はともかく、対策はしっかりされ、名前に入力できる文字数の制限がされてますよね?
要するに「見づらいから短くしてくれたらうれしいですw」と言う要望は出す必要ないのです。
さらに文の最後に「w」とありますが、何が面白いのでしょうか?個人的には全く面白くありません。
そして要望は管理人に問い合わせをするか新しくスレッドを立てたらどうでしょうか?
一度投稿したら名前や本文の修正は出来ませんし、ここの内容に関係ある話題も含まれて
最後にそういった要望が入るのはともかく、ここのスレッドの感想・意見等ありませんよね?
最後に投稿されてから2か月以上も経過して一覧の1ページ目には現れなかったのに
わざわざそれを上げてまで記載する必要性は全くないと思います。
先にも記載しましたけど、「w」が最後にあることから意図的にわざと分かっててやったのではないかと思いますが・・・。

何方にしても迷惑なのでやめてください。



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