タイトル | : Re: オリジナルの prime.bas のソース |
投稿日 | : 2024/03/10(日) 18:50 |
投稿者 | : としき |
参照先 | : http://toshiki.la.coocan.jp/ | 番 号 | : 11156 11150 番 konno さんへのコメント コメント数 2 |
> オリジナルの prime.bas のソースはこれだけです。なるほど、MODって関数なんですね。 N88-BASICでは演算子なんですけどね。> INPUT n> IF MOD(n,2)=0 THEN> IF n=2 THEN PRINT "素数" ELSE PRINT "合成数"> ELSE> FOR i=3 TO SQR(n) STEP 2> IF MOD(n,i)=0 THEN EXIT FOR> NEXT i> IF i<=SQR(n) THEN PRINT "合成数" ELSE PRINT "素数"> END IF> ENDこれをそのままN88-BASICに移植すると、こんな感じかなぁ。 実行していないので、そのまま動くかどうかはわかりません。 100 INPUT N 110 IF N MOD 2=0 THEN 120 ELSE *ELSE1 120 IF N=2 THEN PRINT "素数" ELSE PRINT "合成数" 130 GOTO *ENDIF1 140 *ELSE1 150 I=3 160 WHILE (I<=SQR(N)) AND (N MOD I<>0) 170 I=I+2 180 WEND 190 IF I<=SQR(N) THEN PRINT "合成数" ELSE PRINT "素数" 200 *ENDIF1 210 END 解説すると ・MODは演算子に変更した。 ・110行目のTHENの行番号は省略できたかもしれない。 つまり、NULLの行番号が許容されるのなら、その場合は単に次の行に制御が移る。 ・ループの脱出条件が複数あるので、FORループからWHILEループに変更した。> TurboBasic で同じやり方はわからなかったので、自分なりに改造したのが以下TurboBasicって、MOD関数またはMOD演算子ってないんですか? あと、NEXTの後ろの変数って省略できないんですか? でもコンパイラ言語だからあんまり関係ないのか。 8ビットのBASICのころは、NEXTの後ろの変数を省略するとマイクロ秒の単位で速く なると信じられていて、だから私も省略するのが癖になっているのですよ。 高速化といえば、最初のFORの直下のIF文。 これはループの中に入れておくのはもったいない。 だって、1回しか比較する必要がないものを何回も比較することになるわけだから。> i=2:gosub PRINT i;:c=c+1 ' 2 素数> FOR i=3 TO nこんな感じで十分だと思う。
- No.11156 一括表示へ - コメント元:11150 一括表示へ - [ 返信 ] [引用無し] pre