プチコン3号 SmileBASIC コミュニティ投稿ヨッシー okkun20022015/07/27 13:11:43(前に色々とお騒がせしました) 配列の要素数を一気に0にするのは無理なのかな? 配列=配列はコピーじゃないらしいし、関数のなかじゃ使えない。 COPYは、要素数はコピーしないし...ウーン2そうだね 17返信プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿ちーたけ hello.world2562015/7/27 13:27DIM A[10] A=NULLY() DEF NULLY() DIM _[0] RETURN _ END1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿ヨッシー okkun20022015/7/27 13:49配列の=は コピーでなく 名前は違う同じ配になるらしいです。 また、関数ないで使用しても関数ないでは空になりますが関数の外に出ると戻るようです。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿ちーたけ hello.world2562015/7/27 14:40DIM命令で毎回「違う」要素数0の配列が作られるからこれでいーの。 動かしてみたら、ええやん?1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿ヨッシー okkun20022015/7/27 14:55関数のなかで使用しても動かないんです。 DEF NOARR()DIM _[0]RETURN _:END DEF A A[] A=NOARR() ?LEN(A) END DIM A[5] A A ?LEN(A)1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿ナツキ natukin19782015/7/27 15:12関数の引数で渡した配列に空の配列を=(イコール)で代入した場合、想定通りに動かないですね。私も以前、同じ事しました。 とりあえず、配列の要素数分POPなどの関数で削り取って対応しました。1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿あまさと しおん ShionAmasato2015/7/27 15:12POPしまくるしか思いつかない1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿ヨッシー okkun20022015/7/27 15:43やっぱループPOPか... 配列の要素数によってはループ時間が長くなるからな。30フレームとか。それを60000回ぐらいループしたら相当長くなる。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿oo2 meidoin200212015/7/27 16:42ちょっとあれなやり方だけど、定義する時点で要素数指定に変数(以下変数Aとする)を使い、要素を変えたいときに変数Aを変更してから何らかの方法で定義しなおすやり方もある。あまりおすすめはしないけど。 複数の配列の場合だと、変数Aをフラグとして扱い、 A=1 DIM SX[100*A],SY[100*A] としておけば、要素数を100か0もしくは100の倍数に切り替えられる。 …なんども言うけど、おすすめはしない。やりすぎるとエラーがでるようだし。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿ヨッシー okkun20022015/7/27 16:49ああーーーーーーーーさすが。なるほど。その手があったか。 だけど関数外で配列指定、関数内で変更はできない...orz0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿ナツキ natukin19782015/7/27 18:21いっそ引数で配列I/Oするのを止めて、引数でIn。戻り値でOutするとか。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿MIKI ifconfig2015/7/27 20:56現在のサイズを自分で管理すればいいだけでは? 1そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿ちーたけ hello.world2562015/7/27 22:49そゆことか。 ちょっと理解が追い付かなかったや。 ならさ、 DEF N():DIM _[0]:RETURN _:END DEF A ARR$ VAR(ARR$)=N() END DIM PJ[1000] A "PJ" とかでどう? これなら簡単じゃん。 14秒で思いついた。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿ヨッシー okkun20022015/7/27 23:19う、やってみます。(別に出来ても悔しくない!) でも誤動作しないかな?0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿ヨッシー okkun20022015/7/27 23:28DEF A A[]じゃなくてDEF A A$って事だけどそうしよう。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿ちーたけ hello.world2562015/7/28 0:24ごめんなさい関数内だからグローバル変数にしかうわああああ。 なので、 DEF N():DIM _[0]:RETURN _:END DEF MAIN DIM PJ[1000] PJ=N() END これで良いんじゃないでしょうか。0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿ちーたけ hello.world2562015/7/28 0:27変に関数を一個挟まないで、直接ぶっこんだほうが早いよ。 それに処理も簡単になる。 ごめんね、惑わせちゃって。 (;>_<;)0そうだね プレイ済み2017/11/03 19:29:24に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿ネタバレコータ[quota] W.D.WE2015/7/28 23:26もう解決しているようですが、原因はナツキさんが指摘している通りだと思います。関数NOARRは、OUT引数で返しているので呼び元Aの参照値Aに反映されます(実装が実体のコピーなのか参照値のコピーかは分かりません。)。しかし、命令Aの引数Aの参照値は、値渡しであり、呼び元のAとは別物になり、命令Aの中の参照値の変更は命令Aの中だけで、命令Aの呼び元の参照値Aには反映されません。(参照値Aが指している実体の変更は、反映されます。)したがって、OUT引数で返すことで、解決するはずです。例のようなグローバル変数ではなく、ローカルな配列変数の場合には、OUT引数で対応する必要があります。(通常は戻ったときに解放されるので必要性は低そうですが・・・)なお、ご存じかとは思いますが、INとOUTの仮引数を別名にして実引数を同名にすることで実装可能です。0そうだね プレイ済み2017/11/03 19:29:24に取得