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

締切り済みの質問

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以下の時)で出題されてるんですが…

投稿日時 - 2009-12-01 22:30:08

QNo.5491037

すぐに回答ほしいです

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

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

回答(6)

ANo.6

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

投稿日時 - 2009-12-03 17:59:48

ANo.5

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

投稿日時 - 2009-12-02 20:46:19

ANo.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個の式にばらすかを考えてください。

投稿日時 - 2009-12-02 18:47:21

ANo.3

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

投稿日時 - 2009-12-02 10:27:21

ANo.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) になると思いますよ

投稿日時 - 2009-12-02 04:30:02

ANo.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

# コードを起こすのはあなたの仕事。

投稿日時 - 2009-12-01 23:13:50

補足

一応この問題にはあと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;
}

投稿日時 - 2009-12-01 23:26:51