- 締切済み
ベーシック、循環小数プログラミング
0 !q/pを少数点表示する 1 LET X=10 2 DIM a(1 TO 100),b(0 TO 100) 3 INPUT q,p 4 LET b(0)=q 5 LET k=1 6 DO 7 LET a(k)=INT(b(k-1)*X/p) 8 LET b(k)=MOD(b(k-1)*X,p) 9 LET j=0 10 DO UNTIL j=k-1 OR b(j)=b(k) 11 LET j=j+1 12 LOOP 13 IF b(j)=b(k) THEN EXIT DO 14 LET k=k+1 15 LOOP 16 ! 結果の表示 17 PRINT "0."; 18 FOR i=1 TO j 19 PRINT a(i); 20 NEXT i 21 PRINT "{"; 22 FOR i=j+1 TO k 23 PRINT a(i); 24 NEXT i 25 PRINT "}" 26 END 上のプログラミングですが、 10~16、21~26がはっきりと理解できません。 6のdoは15のloopとつながるんですよね? q=3,p=7で考えてみたのですが、 8,9行目で a(1)=4 b(0)=3 b(1)=2 a(2)=2 b(2)=6 a(3)=8 b(3)=4 a(4)=5 b(4)=5 a(5)=7 b(5)=1 a(6)=1 b(6)=3 となり、b(0)=b(6)より、循環小数ということだと考えました。 このb(0)=b(6)の比較は10行目、13行目のどちらでしょうか? また、結果の表示で、17行~20行で、 0.a1a2a3・・と表示することはわかりましたが、循環小数のさいの{}の入れ方(21行~25行)が理解できていません。 私の理解や記入がわかりにくいかもしれませんが、 どなたか解説していただけないでしょうか。 よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- SAYKA
- ベストアンサー率34% (944/2776)
DO と IF について調べればどっちが何をやっているか理解できるんじゃない? 21~ は単に出力してるだけ 前述と同じくFORについて調べたら判る筈だよ。
お礼
返事が遅くなってしまって申し訳ありません。 b(0)=b(6)の比較は10行目、13行目は、b(0)=b(6)となったので、loopから抜けるということでよかったでしょうか。 21~は相変わらず理解できていません。 私の考えだと、 結果は、 0.428571{428571}になってしまいます。 しかし、実際にこのプログラムをすると、 0.{428571}になるのですが。 22行目 FOR i=j+1 は いわばa(7)のことではないのでしょうか? やはりあまりにも理解できていない状況でしょうか・・・