- 締切済み
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以下の時)で出題されてるんですが…
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
蛇足ですが, 電気の方では -3+j2 とか書いたりすることがあります>#5. だから, -3+i2 があっても不思議ではないとは思います. それが「要求された形式」であるかどうかは知りません.
- salsberry
- ベストアンサー率69% (495/711)
複素数の表示には普通、a+biという形式(たとえば-3+2iとか4-i)を使うと思います。 虚数単位を表すのにiの代わりにjを使う分野があることは知っていますが、No.1への補足のように-3+i2のような書き方が使われる場合もあるのでしょうか。
- asuncion
- ベストアンサー率33% (2127/6289)
>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)
どのように表示したいのでしょうか? 例えば、 a=1 b=-3 c=2 の場合には、どのように表示されて欲しいのでしょうか。
- redfox63
- ベストアンサー率71% (1325/1856)
判別式 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) になると思いますよ
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
判別式 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 # コードを起こすのはあなたの仕事。
補足
一応この問題にはあと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; }