• 締切済み

ベーシック、循環小数プログラミング

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行)が理解できていません。 私の理解や記入がわかりにくいかもしれませんが、 どなたか解説していただけないでしょうか。 よろしくお願いいたします。

みんなの回答

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

DO と IF について調べればどっちが何をやっているか理解できるんじゃない? 21~ は単に出力してるだけ 前述と同じくFORについて調べたら判る筈だよ。

nattin_111
質問者

お礼

返事が遅くなってしまって申し訳ありません。 b(0)=b(6)の比較は10行目、13行目は、b(0)=b(6)となったので、loopから抜けるということでよかったでしょうか。 21~は相変わらず理解できていません。 私の考えだと、 結果は、 0.428571{428571}になってしまいます。 しかし、実際にこのプログラムをすると、 0.{428571}になるのですが。 22行目 FOR i=j+1 は いわばa(7)のことではないのでしょうか? やはりあまりにも理解できていない状況でしょうか・・・

関連するQ&A