一回も披露したことのない豆知識

#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しか出ません

.

A 回答 (4件)

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;
}
といった具合で ・・・
    • good
    • 0

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



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

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

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

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

いや, だから, なんで「x1, x2 の値が期待通りになっているかどうか確かめよう」と思わないのかがとっても不思議なんだけど.


あなたはその入力でどのような値になることを期待しているのですか? そして, その「期待した値」が入っていることは確認できているのですか?
    • good
    • 0

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

この回答への補足

#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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!