• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BASIC言語の問題(初心者))

BASIC言語の問題(初心者)

このQ&Aのポイント
  • BASIC言語の仕組みは読めても、組み立てが出来ない問題について
  • 二分法とニュートン・ラプソン法による2の平方根の計算方法について紹介
  • パソコンの知識がない文系学生がBASIC言語の問題に困っている

質問者が選んだベストアンサー

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.4

こんにちは  *1* のプログラム a の値が根に収束していくことに間違いないですが、うまく動かないとは「どんなこと」が?  なお、146行の最後の PRINT 文の末尾にある「;」は、余計ですね(^^;

beru415
質問者

補足

あああ(>_<) ホント質問の仕方が下手すぎてごめんなさいm(_ _)m(涙) 先程画像を質問に添付したのですが、プログラムの実行画面において、同じものが表示されるようにしなくちゃいけないんです(>_<) ただ、先程自分が書いたプログラムだと、PRINT文は表示されるものの、数値の値は全く表示されませんorz 何が間違いなのか自分でもわからず、徹夜で考えても出来ず、もうお手上げ状態です(ToT)

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.6

こんにちは #5の補足です。  ISO で規格化された Full BASIC言語の解説が参考URLにあります。  その中に「演算結果の正確さ」という項があって一節を引用します。 >Full BASICには数値演算の実行結果の正確さに関する規定があります。この規定は四則演算ばかりでなく,べき乗演算やSQR関数などの組込み関数にも適用されます。その規定のおかげで,べき乗演算やSQR関数の予期せぬ誤差を心配する必要がなくなります。 >次のプログラムは100以下のピタゴラス数をすべて求めるものですが,Full BASICでは正しいプログラムです。しかし,規格外のBASICでは正しい結果が得られることを保証することができません。実際,昔のN88-BASICでは正しくない結果が得られます。

参考URL:
http://hp.vector.co.jp/authors/VA008683/MS2Full.htm
すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.5

こんにちは >先程画像を質問に添付したのですが、プログラムの実行画面において、同じものが表示されるようにしなくちゃいけないんです(>_<)  一つ確認です。 添付された印刷物は、オリジナルのNEC PC-9800シリーズに組み込まれたN88-BASICかN88-BASIC(86)での実行結果ですか?  N88互換BASIC for Windowsは、N88-BASIC命令互換であって、浮動小数点計算精度まで踏み込んだシステム互換の保証は無いと思いますよ。 それは、N88互換BASIC for Windowsがマイクロソフト社製の Visual BASIC 5.0で開発されていることから判ります。  下記の(1)~(3)は、すべてマイクロソフト社の製品ですが、(1)はバグもあり(有名なところではPRINT文のバグ)(2)~(3)で改善されていったはずです。 (1)N88-BASICやF-BASICなどの8ビットPC時代 (2)Quick BASIC 16~32ビットPCのMS-DOS時代 (3)Visual BASIC Windows時代  つまり、印刷物の記載よりもN88互換BASIC for Windowsの方が正しい結果を出している可能性が高いということです。  電卓使って筆算で検証してみては?(^^;

すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.3

こんにちは  #2です。  #2の訂正と例文を追加します。 ■変数 (1)事前に宣言しなければ、単精度。 (2)スコープ(有効範囲)は、広域変数として扱う。 (3)数字が前に英字が後にある場合は、変数名ではなく式(乗算)とする   【例】 2y は、2*y と解釈する。 (4)定数は大文字、変数は小文字で定義する(但し大文字と小文字は区別されない)。 ■← (1)右辺の式を左辺の変数に代入。   【例】LET DELTA = 0.0001' 定数 δ   【例】LET a = 0 : b = 0 : c = 0' 変数の初期化   【例】LET c = (a + b) / 2 ■while [条件] do~done (1)条件が真の間~に書かれた命令をループ(繰り返す)する ステートメント。   【例】WHILE (b - a) < DELTA        [処理]      WEND ■if [条件式] then [処理1] else [処理2] endif (1)条件式が真ならば[処理1]を実行し、偽ならば[処理2]を実行する   【例】IF (c * c) > x THEN LET b = c ELSE LET a = c ■return [変数] (1)変数の値を表示してプログラムを終了する。   【例】PRINT y      END ■|[式]| (1)式の値の絶対値を取る   【例】ABS(x - y * y) ■* / (1)四則演算のうちかけ算、わり算を表わす乗法演算子。 ■+ - (1)四則演算のうち足し算、引き算を表わす加法演算子。 ■> < (1)大なり、小なりの比較を表わす関係演算子。

beru415
質問者

補足

丁寧なご回答、ほんと感謝です!!! ありがとうございます!!!!(>_<)(>_<)(>_<) おかげさまで、*2*の問題は 100 REM NEWTON 110 INPUT X 120 Y=X 123 KAISU=0 125 DELTA=0.000001 126 PRINT" 回数   Y    Y^2  │X-Y^2│" 127 PRINT"--------------------------------------" 130 WHILE (ABS(X-(Y^2)))/(2*Y) > DELTA 131 PRINT USING "####";KAISU; 132 PRINT USING " #.######";Y; 133 PRINT USING " #.######";(Y^2); 134 PRINT USING " #.######";(ABS(X-(Y^2))) 140 Y=((Y^2)+X)/(2*Y) 145 KAISU=KAISU+1 150 WEND 160 PRINT"--------------------------------------" 170 END というプログラムに「2」を代入させて、成功しました!!! ただ、*1*は同様にして以下のようにつくったのですが、 100 REM 二分法 110 INPUT X 120 A=0 123 B=X 124 C=0 125 DELTA=0.0001 127 KAISU=0 130 PRINT "回数  A    B   区間の幅    C   C^2" 131 PRINT "---------------------------------------------------" 140 WHILE (B-A) > DELTA 141 PRINT USING"####";KAISU; 142 PRINT USING" #.######";A; 143 PRINT USING" #.######";B; 144 PRINT USING" #.######";(B-A); 145 PRINT USING" #.######";C; 146 PRINT USING" #.######";(C^2); 150 C=(A+B)/2 160 IF (C^2)>X THEN LET B=C ELSE LET A=C 165 KAISU=KAISU+1 170 WEND 180 PRINT"----------------------------------------------------" 190 END 上手く実行画面に出てくれませんorz 学校でも先生は詳しい説明をせず、同クラスに出ている方々も理解できずに苦労してる感じです。。

すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.2

こんにちは  #1です。 補足します。 >ちなみにソフトはN88互換BASIC for Windowsを使っています(>_<)  「N88互換」!  今時、厳しいローカルBASIC言語を使われるんですね(--;  この言語だと使った変数のすべてを何処で使うべきか、間違いなく使ったかという管理とか、IF文が書きにくい、繰り返し制御に使えるステートメントが少ないとか、自由に自前の手続きや関数が書きにくいとか制約が多いです。  該当ソフトのヘルプには、質問者のおっしゃる「組み立て」に関わる体系的な情報が全くないので、学校で教えて貰ってないですか?  それと課題のヒントの意味的ルールがよくわかりませんので、ここで仮定します。 これで大丈夫ですか? ■変数 (1)事前に宣言しなければ、単精度。 (2)スコープ(有効範囲)は、大域変数として扱う。 (3)数字が前に英字が後にある場合は、変数名ではなく式(乗算)である ■← (1)右辺の式を左辺の変数に代入。 ■while [条件] do~done (1)条件が真の間~に書かれた命令をループ(繰り返す)する ステートメント。 ■return [変数] (1)変数の値を表示してプログラムを終了する。 ■|[式]| (1)式の値の絶対値を取る ■+ - * / (1)四則演算を表わす単項演算子。 ■>< (1)大なり、小なりを表わす単項演算子。  それと、ここのルールでは作業の代わりや宿題などの課題の回答を直接教えてはならないというルールがあるようです。 回答者はそれを守って回答しなくてはならないの(^^;  だから回答しやすいように「疑問」をぶつけてください。

すると、全ての回答が全文表示されます。
  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.1

こんにちは  質問者さんのBASICの処理系は具体的に何ですか?  また、解法手順がそこまで判っているなら、現在の言語はステートメントの構文にそんなに違いはないのでとりあえずチャレンジして見ましょうよ。  課題は、整数の平方根を関数形式で求めるプログラム作ってメインプログラムから呼び出すのですね?  こんな雰囲気でしょうか.. *1* 2の平方根を出力しなさい(二分法による平方根の計算) ただしδ=0.0001とする FUNCTION RootDiv(x as integer) as double REM *1*(xの平方根を精度δで求める)  const SIGMA = 0.0001  dim a as double  dim b as double  dim c as double  a←0  b←x  while b-a < δ do   c←(a+b)/2   if C*C > x then b←c else a←c endif  done  REM return a  let RootDiv = a END FUNCTION *2* 2の平方根を出力しなさい(ニュートン・ラプソン法による平方根の計算) ただしδ=0.0001とする FUNCTION RootNtRpsn(x as integer) as double REM*2*(xの平方根を精度δで求める)  const SIGMA = 0.0001  dim y as double  y←x  while │x-y*y│ < 2yδ do   y←(y*y+x)/2y  done  REM return y  let RootNtRpsn = y END FUNCTION

beru415
質問者

補足

回答ありがとうございます(>_<") そして、学校で使ってる言語はBASICで、 100 REM~ 110 PRINT~ みたいな形でした(>_<) 説明不足でごめんなさい!!(*ノ-;*) ちなみにソフトはN88互換BASIC for Windowsを使っています(>_<)

すると、全ての回答が全文表示されます。

関連するQ&A