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

締切り済みの質問

二次方程式のプログラム

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 {


この先の最後の一文教えてください。抜けてて書いてないんです。

投稿日時 - 2009-11-30 00:28:03

QNo.5486386

すぐに回答ほしいです

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

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

回答(7)

ANo.7

> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n';
> 虚数は消えますからこうですか?

判別式が正のとき、これだとsqrt()の引数が負になってしまうので予期しない結果になるでしょう。問題はそれだけではありませんが。

そもそも質問にあるプログラムだと、虚数解のとき、たとえばa=1, b=0, c=1のときの出力が
-0i1
となります。これは期待されている結果と多分違うと思うのですが、それは気にならないのでしょうか?

投稿日時 - 2009-12-01 20:32:56

補足

cout << (-b/2/a) << 'i' << sqrt(4*a*c+b*b)/2/a << '\n';
これでダメなんですか…

投稿日時 - 2009-12-01 21:29:05

ANo.6

> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n';
> 虚数は消えますからこうですか?

a,b,cを与えて実行すればわかることでしょうに。

投稿日時 - 2009-12-01 05:11:37

ANo.5

> cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n';
> じゃダメなんですか…

判別式が0以上で 'i' が付くわけがない。
プログラミング以前に数学勉強しようよ。

投稿日時 - 2009-11-30 23:47:09

補足

cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n';
虚数は消えますからこうですか?

投稿日時 - 2009-12-01 00:50:19

ANo.4

> 授業中のノート書いたんですが
そんじゃお友達にノート見せてもらえば?

投稿日時 - 2009-11-30 21:47:21

ANo.3

二次方程式の解の公式を「本当に」理解されていますか?
判別式の値が0以上のとき、(重解の場合を含めて)2個の解があることは
おわかりですよね?
その2個の解は、どういう式で書けますか?

投稿日時 - 2009-11-30 21:39:10

補足

cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n';
じゃダメなんですか…

投稿日時 - 2009-11-30 22:28:02

ANo.2

教えてください。
http://oshiete1.goo.ne.jp/qa5472503.html
上記の時の質問と何が違うの。。。

投稿日時 - 2009-11-30 00:41:34

ANo.1

>この先の最後の一文教えてください。抜けてて書いてないんです。

質問の意図がサッパリわかりません。else までは自分で書いたの?

投稿日時 - 2009-11-30 00:35:44

補足

授業中のノート書いたんですが

投稿日時 - 2009-11-30 21:23:10