- 締切済み
二次方程式のプログラム
C++で二次方程式の解を求めるんですが、虚数解の場合、a=0の場合、実数解の場合で求めるようにしているんですが、 #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { この先の最後の一文教えてください。抜けてて書いてないんです。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n'; > 虚数は消えますからこうですか? 判別式が正のとき、これだとsqrt()の引数が負になってしまうので予期しない結果になるでしょう。問題はそれだけではありませんが。 そもそも質問にあるプログラムだと、虚数解のとき、たとえばa=1, b=0, c=1のときの出力が -0i1 となります。これは期待されている結果と多分違うと思うのですが、それは気にならないのでしょうか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n'; > 虚数は消えますからこうですか? a,b,cを与えて実行すればわかることでしょうに。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; > じゃダメなんですか… 判別式が0以上で 'i' が付くわけがない。 プログラミング以前に数学勉強しようよ。
補足
cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n'; 虚数は消えますからこうですか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 授業中のノート書いたんですが そんじゃお友達にノート見せてもらえば?
- asuncion
- ベストアンサー率33% (2127/6289)
二次方程式の解の公式を「本当に」理解されていますか? 判別式の値が0以上のとき、(重解の場合を含めて)2個の解があることは おわかりですよね? その2個の解は、どういう式で書けますか?
補足
cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; じゃダメなんですか…
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
教えてください。 http://oshiete1.goo.ne.jp/qa5472503.html 上記の時の質問と何が違うの。。。
- koko_u_u
- ベストアンサー率18% (216/1139)
>この先の最後の一文教えてください。抜けてて書いてないんです。 質問の意図がサッパリわかりません。else までは自分で書いたの?
補足
授業中のノート書いたんですが
補足
cout << (-b/2/a) << 'i' << sqrt(4*a*c+b*b)/2/a << '\n'; これでダメなんですか…