• 締切済み

C++の二次方程式のプログラム

#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 { cout << (-b/2/a) << sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; } 最後のelseの下のcoutが本当に分からないんで教えてくださいお願いします。一応この条件(a=0の時、aが0以上の時、aが0以下の時)で出題されてるんですが…

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

蛇足ですが, 電気の方では -3+j2 とか書いたりすることがあります>#5. だから, -3+i2 があっても不思議ではないとは思います. それが「要求された形式」であるかどうかは知りません.

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.5

複素数の表示には普通、a+biという形式(たとえば-3+2iとか4-i)を使うと思います。 虚数単位を表すのにiの代わりにjを使う分野があることは知っていますが、No.1への補足のように-3+i2のような書き方が使われる場合もあるのでしょうか。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

>cout << (-b/2/a) << +sqrt(4*a*c+b*b)/2/a << '\n'; >cout << (-b/2/a) << +sqrt(4*a*c+b*b)/2/a << '\n'; 解の公式を紙に書いて、じっとながめてください。 そして、±の部分をどのように2個の式にばらすかを考えてください。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

どのように表示したいのでしょうか? 例えば、 a=1 b=-3 c=2 の場合には、どのように表示されて欲しいのでしょうか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

判別式 Dは b*b-4*a*cですよ 判別式は解の公式の 分子の平方根部分です sqrtに与えている式が このようになっているのかをちゃんとチェックしましょう > sqrt(4*a*c+b*b) これだと 4とaとcの積にbの2乗を加算しているので結果が異なって当然です bの2乗から4とaとcの積を減算しないといけません また +/-の符号は sqrt(つまり平方根)に掛かるのであって 平方根の中身自体ではないですよ 解の公式は 分子が -b+SQRT(b*b-4*a*c) または -b-SQRT(b*b-4*a*c) になると思いますよ

回答No.1

判別式 D = b*b - 4*a*c とすると、 D > 0 のとき 解: -b/2/a + sqrt(D)/2/a と -b/2/a - sqrt(D)/2/a D == 0 のとき 解: -b/2/a D < 0 のとき 解: -b/2/a + i sqrt(-D)/2/a と -b/2/a - i sqrt(-D)/2/a # コードを起こすのはあなたの仕事。

noname#127615
質問者

補足

一応この問題にはあと1つだけ(D>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'; cout << (-b/2/a) << '-i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { cout << (-b/2/a) << +sqrt(4*a*c+b*b)/2/a << '\n'; cout << (-b/2/a) << +sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; }