こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

二分法のC++プログラム

#include<iostream>
#include<cmath>
using namespace std;

int main(){
double x1, x2, c, a;
double x1, x2, c;

cout <<"x1:";
cin >> x1;
cout <<"x2:";
cin >> x2;

while(x2-x1 > 0.00001){
c=(x1+x2)/2;
c=(x1+x2)/2;
if(cos(x1/2)*cos(c/2)>=0) x1 = c;
else x2 = c;
}
cout << "x=" << x1 <<endl;

return 0;
}


x1 cos(x/2)って入れると
x2 -9.25596e+061
って出て

cos(pi/2)って入れても同じ風に出てしまうんですがこれも同じように出るんですが故障ですか?


x1に3と入れると
x2が出てきて、x2は4と入れると
xが3.14159と出て、3回xが出ますが、上の2つ(cos(pi/2)とcos(x/2))はx1とx2しか出ません

.

投稿日時 - 2009-10-25 23:20:25

QNo.5396700

すぐに回答ほしいです

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

cin >> x1;
で 変数x1が受け取ることを期待しているのは『数値』ですよ
『cos(pi/2)』などの文字列を与えてもx1は『数値』を受け取りません
cos(pi/2) で 『1』をx1が期待していると期待通りの結果は望めませんよ

以下のようにして 入力されたものがどのようになっているのか確認してみましょう

#include<iostream>
#include<cmath>
using namespace std;

int main(){
  double x1, x2, c;

  // 変数の初期化
  x1 = x2 = -9.8e-8;

  cout <<"x1:";
  cin >> x1;
  cout <<"x2:";
  cin >> x2;

  // 入力結果
  cout << "入力結果 ... x1:" << x1 << " x2:" << x2 << "\n";

  while(x2-x1 > 0.00001){
    c=(x1+x2)/2;
    if(cos(x1/2)*cos(c/2)>=0) x1 = c;
    else x2 = c;
  }
  cout << "x=" << x1 <<endl;

  return 0;
}
といった具合で ・・・

投稿日時 - 2009-10-26 15:37:52

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

Tacosanさんの指摘されていることに尽きると思います。

簡単なプログラムが自分の思った通りには実行されない場合、
まずデバッガでステップ実行し、関係する変数値、関数値、どのパスを通っているのかを確認する、
或いはプリント文を追加し各変数値、関数値、通っているパス等を確認する

以上をやることはプログラマとしての常識のはずです。

また関数としては何を考えているのですか、確認してください。

これまでの他の人のヒントも考慮すれば解決出来るはずです。
分かってしまえば簡単な事ですから、後は人に頼らず自分で解いてください。
そうしないといつまでも力が付かないと思います。

投稿日時 - 2009-10-26 20:58:20

ANo.2

いや, だから, なんで「x1, x2 の値が期待通りになっているかどうか確かめよう」と思わないのかがとっても不思議なんだけど.
あなたはその入力でどのような値になることを期待しているのですか? そして, その「期待した値」が入っていることは確認できているのですか?

投稿日時 - 2009-10-26 02:41:46

ANo.1

なんで「まず x1, x2 の値を確かめよう」と思わないのか.

投稿日時 - 2009-10-26 00:02:49

補足

#include<iostream>
#include<cmath>
using namespace std;

int main(){
double x1, x2, c;

cout <<"x1:";
cin >> x1;
cout <<"x2:";
cin >> x2;

while(x2-x1 > 0.00001){
c=(x1+x2)/2;
if(cos(x1/2)*cos(c/2)>=0) x1 = c;
else x2 = c;
}
cout << "x=" << x1 <<endl;

return 0;
}

少し間違えてましたが直しても同じでした

投稿日時 - 2009-10-26 01:47:51