タイトル | : Re^3: SOSU6 素数を表示、カウントするテスト6 |
投稿日 | : 2024/03/05(火) 14:12 |
投稿者 | : としき |
参照先 | : http://toshiki.la.coocan.jp/ | 番 号 | : 11138 11133 番 konno さんへのコメント コメント数 1 |
LOCATEなんていう、割と基本的なところからして違うものなのですね。> LOCATE 縦位置,横位置,カーソル表示スイッチ,カーソル開始位置,カーソル終了位置>> 私がN88系と違うと思ったのは、縦と横が逆なところです。> 他の構文は、横、縦なので、間違えやすいですね。MS系の歴史でしょうか。えと、LOCATEが縦、横の順というのは、Turbo Basic と TBasic の両方ですか? それともどちらかだけ? ちなみに、N88の場合は LOCATE 横位置,縦位置,カーソル表示スイッチ だけです。 カーソルの開始位置、終了位置ってなんだろう。 横長のカーソルを表示できるのかな。 それとも、その制限の範囲にカーソルがこない場合は表示されない、とか。> 移植するなら、他の素数プログラムが良いと思います。konnoさんの新しいのもリリースされたし、そっちを狙おうかな。 とりあえず、SOSU6の方を移植するとなると気になる部分がひとつ。 もしかしたら16ビットのBASICでは改善されているかもしれませんが。 loop2: ' 数値を確定した素数で割り切れれば合成数 for ii!=1 to co!-1 b!=int(i!/co1%(ii!)):if b!=i!/co1%(ii!) then noflg=1:goto lpend2 next ii! lpend2: 8ビット時代のBASICでは、こういうループの脱出方法をは推奨されなかった。 FORのループを完了させずに途中で脱出すると、スタックにデータが詰みあがった ままになってしまうのだそうで。 たしか、新しくRUNするとクリアされるのだったかなぁ。 もしかしたら、明示的にCLEARというコードを書かないとクリアされなかったかも しれない。 この辺は処理系によって違うかもしれないし、当時のBASICのリストを見ると、DEFINT と同様、ソースの先頭でおまじないのようにCLEARを入れているものが多かったので、 この辺で混同している部分もあるかもしれない。 で、結局どうするのがよいかというと *LOOP2 FOR II!=1 TO CO!-1 IF INT(I!/CO1%(II!))=I!/CO1%(II!) THEN NOFLG=1:II!=CO!-1 NEXT こんな感じで無理やり強制的にループの制御変数の値を書き換えてしまう、という ワザが使われていました。
- No.11138 一括表示へ - コメント元:11133 一括表示へ - [ 返信 ] [引用無し] pre