初めまして、私は大学でBASIC初心者でN88互換BASICでのプログラミングを今年から勉強しています。↓のプログラムで収束過程の計算結果を実行画面に表示させたくてFOR~NEXT文でいろいろ試しているのですがエラーが出てしまいます。他の具体的な方法が浮かばないです。初歩的な質問でしたら申し訳ないのですが、BASIC経験者、もしくは現在やられている方でどなたか私にアドバイスをしていただけると助かります。


(x^2-a=0のaの根を求めるニュートン法のプログラムです)
120 REM*******ニュートン・ラフソン法*********
130 FOR I = 1 TO 6
132 READ X0
134 GOSUB 140
136 NEXT I
138 END
140 PRINT "試行値は";X0
145 N=1
150 ER=.00001
180 FX=X0*X0-333
190 DFX=2*X0
200 X1=X0-FX/DFX
220 IF ABS(X1-X0)<ER THEN 250
230 X0=X1 :N=N+1
240 GOTO 180
250 PRINT X1,N
280 RETURN
300 REM *************試行値*************
310 DATA 1,5,10,50,100,500

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/05/24 23:31:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rakka74 No.4

回答回数19ベストアンサー獲得回数1

ポイント50pt

230行と240行の間に


235 PRINT X1,N


を挿入すれば、収束過程の値も表示されると思います。

id:yuigadokusonn

できました。GOTOで戻る前にプリントすればいいですよね。言われてようやくわかりました。これにずっと悩んでました、自分の不勉強さが痛々しいです。迅速なご回答有難うございました。

2006/05/24 23:30:05

その他の回答3件)

id:rakka74 No.1

回答回数19ベストアンサー獲得回数1

ポイント20pt

http://kiso.dj.kit.ac.jp/~nakamori/class/Numerical/html/chap2/Ne...

「ニュートン・ラフソン法のアルゴリズム」の2の式からすると、


220 IF ABS(X1-X0)<ER THEN 250


は、


220 IF ABS(X1-X0)<ER*ABS(X1) THEN 250


とするのが正しいように思うのですがどうでしょうか?

id:yuigadokusonn

すいません、質問の内容に不備がありました。上に示したプログラムにエラーは出ません。「収束した計算結果」は表示されるのですが、「収束過程の計算」が表示されません。その点についてお聞きしたい次第です。

2006/05/24 22:24:12
id:Allashe No.2

回答回数59ベストアンサー獲得回数5

ポイント20pt

 お助けしたいのですが、ざっと見る限りプログラムに問題は無さそうです。

 なんと言うエラーが出るのでしょうか。メッセージを教えてください。

id:yuigadokusonn

すいません、質問の内容に不備がありました。上に示したプログラムにエラーは出ません。「収束した計算結果」は表示されるのですが、「収束過程の計算」が表示されません。その点についてお聞きしたい次第です。

2006/05/24 22:25:09
id:Kumappus No.3

回答回数3784ベストアンサー獲得回数185

ポイント20pt

手元にN88互換BASICがないので上記プログラムを他のBASICに入れてみましたが、結果は

試行値は1

18.248288 9

試行値は5

18.248288 6

試行値は10

18.248288 5

試行値は50

18.248288 6

試行値は100

18.248288 7

試行値は500

18.248288 9

となり、あっているように見えます。(√333 = 18.248287591...なので)

したがってプログラムのニュートンラプソン法の計算部分などは合っていますね。

どういうエラーが出ますか?N88に固有の問題かもしれません。

#個人的にはBASICよりも遥かに高機能でしかも扱いやすい言語がいろいろあるのでそういうもののほうがいいと思うのですが…

id:yuigadokusonn

すいません、質問の内容に不備がありました。上に示したプログラムにエラーは出ません。「収束した計算結果」は表示されるのですが、「収束過程の計算」が表示されません。その点についてお聞きしたい次第です。

2006/05/24 22:25:28
id:rakka74 No.4

回答回数19ベストアンサー獲得回数1ここでベストアンサー

ポイント50pt

230行と240行の間に


235 PRINT X1,N


を挿入すれば、収束過程の値も表示されると思います。

id:yuigadokusonn

できました。GOTOで戻る前にプリントすればいいですよね。言われてようやくわかりました。これにずっと悩んでました、自分の不勉強さが痛々しいです。迅速なご回答有難うございました。

2006/05/24 23:30:05
  • id:gong1971
    (完全にひやかしです。ゴメンなさい。)
    いまだに大学で、こんな言語を教えてるんですね。
    教授が新しい言語覚えられないからなのかなぁ?
    行番号にGOTO文かぁ...なんかもったいないなぁ...。


    # READ DATAはかなり懐かしかったです。
  • id:taknt
    なーんだ。どこでエラーが出るのか わからなんかったから回答しなかったけど・・・。

    エラーが出るとしたら、割り算するときに、0で割るという状態にならなければ エラーは出ないからそれぐらいかなぁって思ってたんだけど。

  • id:Kumappus
    同感ですね〜。

    まだVisual Basicなら同じBasicでも覚える意味がありそうだけど、こういう素?のBasicをやらせる意図がさっぱりわからない。フローチャートをテンプレで書かせた方がまだ指の刺激になっていいんじゃないかなと。

    質問者さんも全然本質じゃないところで(GOTOの前とか後とか、そういう構造がわかりにくいことが原因なのに)ひっかかっているわけで。
    さらにまともなエディタもついてないから、打ち間違えたら直すの大変だしね…。RENUMがあるってか?>N88(笑)

    コンパイルがいやならPerlでもRubyでもPythonでもいいからそういうのを勉強した方が100万倍まし。

    懐古趣味以外の何者でもないなあ…たぶん。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません