for~next多段ネストを使わない試行 ede2002 2003/06/06 11:29:12 └最終的にはn×mの配列で作業したいので、 ede2002 2003/06/06 12:16:04 └やりたいことは, 白石和夫 2003/06/06 16:34:37 └テストルーチンを外部副プログラムにするの... 白石和夫 2003/06/06 16:55:28 └やはり2進数的に計算するしかありませんか。... ede2002 2003/06/06 17:14:36 └2進数を使うしかないということはないと思い... 白石和夫 2003/06/06 20:38:22 └1次元配列で書けば, 白石和夫 2003/06/07 08:56:31 └2次元でやるとこうですか? ede2002 2003/06/08 16:27:36 └どうやらスピードはこちらのほうが格段に速... ede2002 2003/06/08 16:35:49 └残念ですが,FullBASICの利用者定義関数で結... 白石和夫 2003/06/08 17:05:56 └結果として配列値がほしいときは,副プログ... 白石和夫 2003/06/08 17:15:01 └ありがとうございました。 ede2002 2003/06/08 17:34:54
for~next多段ネストを使わない試行 ede2002 2003/06/06 11:29:12 ツリーへ
for~next多段ネストを使わない試行 |
返事を書く |
ede2002 2003/06/06 11:29:12 | |
5×5の配列の各要素に0か1が入るとして、全通りをスーパーネスト(造語です)を使わずに試す方法ってありますか? 今のところfor~nextを25回入れ子にするか、配列を書き出したものが2進数になることを利用するといった程度しか思いつかきません。 for j=1 to 5 for k=1 to 5 for l=0 to 1 A(j,k)=l ~ next l next k next j では全通りにならないと思うのですが勘違いでしょうか。 |
└最終的にはn×mの配列で作業したいので、 ede2002 2003/06/06 12:16:04 ツリーへ
Re: for~next多段ネストを使わない試行 |
返事を書く |
ede2002 2003/06/06 12:16:04 | |
最終的にはn×mの配列で作業したいので、 入れ子にするという方法では対応ができないというのが理由です。 ネストを書くのがめんどくさい、デバッグが大変ということもありますが。 |
└やりたいことは, 白石和夫 2003/06/06 16:34:37 ツリーへ
Re: 最終的にはn×mの配列で作業したいので、 |
返事を書く |
白石和夫 2003/06/06 16:34:37 | |
やりたいことは, 100 LET m=4 110 LET n=3 120 DIM x(m,n) 130 FOR a=0 TO 2^(m*n)-1 140 FOR i=1 TO m 150 FOR j=1 TO n 160 LET k=n*(i-1)+(j-1) 170 LET x(i,j)= MOD(INT(a/2^k),2) 180 NEXT j 190 NEXT i 200 CALL test 210 NEXT a 220 SUB test 230 MAT PRINT x; 240 END SUB 250 END ということでしょうか? |
└テストルーチンを外部副プログラムにするの... 白石和夫 2003/06/06 16:55:28 ツリーへ
Re: やりたいことは, |
返事を書く |
白石和夫 2003/06/06 16:55:28 | |
テストルーチンを外部副プログラムにするのであれば, 100 DECLARE EXTERNAL SUB test 110 LET m=4 120 LET n=3 130 DIM x(m,n) 140 FOR a=0 TO 2^(m*n)-1 150 FOR i=1 TO m 160 FOR j=1 TO n 170 LET k=n*(i-1)+(j-1) 180 LET x(i,j)= MOD(INT(a/2^k),2) 190 NEXT j 200 NEXT i 210 CALL test(x) 220 NEXT a 230 END 240 EXTERNAL SUB test(x(,)) 250 MAT PRINT x; 260 END SUB みたいな感じになります。250行に実際のテストを書いてください。 なお,上記をそのまま実行するとかなりの時間がかかりますが,時間がかかるのはMAT PRINT文です。画面表示を止めれば速くなります。 |
└やはり2進数的に計算するしかありませんか。... ede2002 2003/06/06 17:14:36 ツリーへ
Re: テストルーチンを外部副プログラムにするの... |
返事を書く |
ede2002 2003/06/06 17:14:36 | |
やはり2進数的に計算するしかありませんか。 副プログラムに配列をわたせるとは思いませんでした。勉強になります。 |
└2進数を使うしかないということはないと思い... 白石和夫 2003/06/06 20:38:22 ツリーへ
Re: やはり2進数的に計算するしかありませんか。... |
返事を書く |
白石和夫 2003/06/06 20:38:22 | |
2進数を使うしかないということはないと思います。 |
└1次元配列で書けば, 白石和夫 2003/06/07 08:56:31 ツリーへ
Re: 2進数を使うしかないということはないと思い... |
返事を書く |
白石和夫 2003/06/07 08:56:31 | |
1次元配列で書けば, 100 LET m=6 110 DIM a(m) 120 CALL try(1) 130 SUB try(k) 140 IF k>m THEN 150 MAT PRINT a; 160 ELSE 170 LET a(k)=0 180 CALL try(k+1) 190 LET a(k)=1 200 CALL try(k+1) 210 END IF 220 END SUB 230 END |
└2次元でやるとこうですか? ede2002 2003/06/08 16:27:36 ツリーへ
Re: 1次元配列で書けば, |
返事を書く |
ede2002 2003/06/08 16:27:36 | |
2次元でやるとこうですか? なるほど、鮮やかなものですね。精進せねば... let m=3 let n=2 dim a(m,n) mat a=zer call try(1,1) sub try(j,k) if k>n then call test else if j>m then call try(1,k+1) else LET a(j,k)=0 call try(j+1,k) LET a(j,k)=1 call try(j+1,k) end if end if end sub sub test mat print a end sub end |
└どうやらスピードはこちらのほうが格段に速... ede2002 2003/06/08 16:35:49 ツリーへ
Re: 2次元でやるとこうですか? |
返事を書く |
ede2002 2003/06/08 16:35:49 | |
どうやらスピードはこちらのほうが格段に速いようです。 ふと思ったのですが、関数に配列を渡せるなら、配列を返す関数というものは作成可能でしょうか? |
└残念ですが,FullBASICの利用者定義関数で結... 白石和夫 2003/06/08 17:05:56 ツリーへ
Re: どうやらスピードはこちらのほうが格段に速... |
返事を書く |
白石和夫 2003/06/08 17:05:56 | |
残念ですが,Full BASICの利用者定義関数で結果を配列にすることはできません。 |
└結果として配列値がほしいときは,副プログ... 白石和夫 2003/06/08 17:15:01 ツリーへ
Re: 残念ですが,FullBASICの利用者定義関数で結... |
返事を書く |
白石和夫 2003/06/08 17:15:01 | |
結果として配列値がほしいときは,副プログラムの引数として結果を入れたい配列を渡し,その配列を書き換えることで代用します。 (Full BASICでは,副プログラムと絵定義の配列引数は参照渡しです) |
└ありがとうございました。 ede2002 2003/06/08 17:34:54 ツリーへ
Re: 結果として配列値がほしいときは,副プログ... |
返事を書く |
ede2002 2003/06/08 17:34:54 | |
ありがとうございました。 こうやって丁寧に答えてくれるというのはとてもありがたいです。 まだまだだなぁ、俺は。 |