• 締切済み

二次方程式のプログラム

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 { この先の最後の一文教えてください。抜けてて書いてないんです。

noname#127615
noname#127615

みんなの回答

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

> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n'; > 虚数は消えますからこうですか? 判別式が正のとき、これだとsqrt()の引数が負になってしまうので予期しない結果になるでしょう。問題はそれだけではありませんが。 そもそも質問にあるプログラムだと、虚数解のとき、たとえばa=1, b=0, c=1のときの出力が -0i1 となります。これは期待されている結果と多分違うと思うのですが、それは気にならないのでしょうか?

noname#127615
質問者

補足

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

回答No.6

> cout << (-b/2/a) << sqrt(4*a*c-b*b)/2/a << '\n'; > 虚数は消えますからこうですか? a,b,cを与えて実行すればわかることでしょうに。

回答No.5

> cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; > じゃダメなんですか… 判別式が0以上で 'i' が付くわけがない。 プログラミング以前に数学勉強しようよ。

noname#127615
質問者

補足

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

回答No.4

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

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.3

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

noname#127615
質問者

補足

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

回答No.2

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

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

>この先の最後の一文教えてください。抜けてて書いてないんです。 質問の意図がサッパリわかりません。else までは自分で書いたの?

noname#127615
質問者

補足

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

関連するQ&A

  • 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 { 次にcout が来るのは分かってるんですが、数学でこういう書き方しなし、ここから先の書き方が分からないんですが、どうやって書けばいいですか? 多分return 0; } のぞいてあと2行か1行だと思うんですが

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

    大分前に二次方程式のプログラムを作るって問題が出ていました。 しかし、セットで作ったプログラムのフローチャートを書くんですがフローチャートが分かりません。 条件は 虚数解 a=0 実数解 の場合分けをして、解を出すってプログラムなんですが、多分、それ自体は合っていると思います。 しかし、そのフローチャートを書きなさいって問題があったんですが、それが未だに分からないんですが、これをフローチャートに書くとすると、どう書けばいいですか? #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c,d,x0,x1; cout << "aを入力してください\n"; cin >> a; cout << "bを入力してください\n"; cin >> b; cout << "cを入力してください\n"; cin >> c; d=b*b-4*a*c; x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); if(a==0) { cout << "解は1つで" << -c/b << "です\n"; } else if(d>0) { cout << "解は二つの実数解で,解は" << x0 << "," << x1 << "です\n"; } else { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+i" << sqrt(-d) / (2 * a) << " , " << (-b) / (2 * a) << "-i" << sqrt(-d) / (2 * a) << "です\n"; } return 0; }

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

  • 二分法のC++プログラム

    #include<iostream> #include<cmath> using namespace std; int main(){ double x1, x2, c; cout <<"x1:"; cin >> x1; cout <<"x2:"; cin >> x2; while(fabs(x2-x1) > 0.00001){ c=(x1+x2)/2; if(cos(x1/2.0)*cos(c/2)>=0) x1 = c; else x2 = c; } cout << "x=" << x1 <<endl; return 0; } cos(x/2)=0の解となるxを挟んでいないx1,x2を与えると、結果は保証できないですが、それは別にいいんですか?それはダメだとするとどこを訂正すればいいんですか

  • ''C++の条件分岐分からないんですが

    #include<iostream> using namespace std; int main(){ int a; cout << "数値を入力してください\n"; cin >> a; if( a > 30) cout <<"31以上ですね\n"; } else if(a<10){ cout <<"10未満ですね\n"; } else { cout <<"30以下で10以上ですね\n"; } return 0; } これが例文なんですが、 変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる 文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。 変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else { __c = a + b; }return 0; } #include<iostream> using namespace std; int main(){ int a; if(m == 'a') __cout("aが格納されています\n"); } else { __cout("\'a\'でない文字が格納されています\n"); } return 0; } #include<iostream> using namespace std; int main(){ int a; if(a < b) { __cout("aはbより小さいです\n"); } else if(a == b) { __cout("aとbは等しいです\n"); } else { __cout("aはbより大きいです\n"); } return 0; } これ合ってますか?あとプログラミング環境すらないので実行結果教えてもらっていいですか?

  • あるプログラミングでdoubleの箱が

    こんにちは、 とあるプログラミングでdoubleの箱が突然2つでてきて混乱しています。 //読み込んだ実数値は10で割りきれるか #include <cmath> #include <iostream> Using namespace std; Int main() { Double x; Cout <<"実数値: "; cin >> x; If (double m = fmod(x, 10)) { Cout<<"その値は10で割りきれません。\n"; Cout<<"剰余は"<< m << d"です。"\n"; } else{ Cout"その値は10で割りきれます" \n"; } } とあり、なぜ突然double mがでてきたのでしょうか? すみません m(__)m

  • VC++でプログラムの勉強をしています。

    プログラムは最近はじめたばかりです。While文とif文を使ってクイズを作ってみたところ、一個目のsinで入力を求めているところから無限ループになってしまいました。色々調べてcin.cler()とsin.ignore()を入れたりもしてみましたが上手くいきませんでした。どこを間違えているのでしょうか? //クイズ #include <iostream> using namespace std; int main()//cin.clear();cin.ignore();???? { int a; int b; while(1) { cout<<"ネコ型のロボットが出てくるアニメといえば?"<<endl; cout<<"A)ドラえもん B)ドラエもん C)ほりえもん D)サザエさん"<<endl; cin>>a; if(a=='A') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){break;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} if(b!='Y'||'N'){cout<<"正しく入力してね!"<<endl;} } if(a=='B'||'C'||'D') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){cout<<"残念!!"<<endl;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} } if(a!='A'||'B'||'C'||'D'){cout<<"正しく入力してね!"<<endl;} } cout<<"正解!!"<<endl; }

  • C++で二分法のプログラム

    C++で二分法のプログラムを作るんですが x1-x2が十分小さくなれば(10^-5)終了する 例 cos(x/2)の解を出す これどうやればいいんですか?whileを使うらしいですが。 文法というのは、 if系、while、switch、continue、for、break文くらいしかやってないんですが #include <iostream> #include <cmath> using namespace std; int main() { までは行きますが… 出力はcout 入力はcinでお願いできないでしょうか

  • 2次方程式の解

    ax^2+bx+c=0の方程式について abcを自分で入力して、「2次方程式として成り立つか」の判断をし、2次方程式であればその解を求めるプログラムです。 2次方程式の解き方をなんとなく忘れていたので、数IIの教科書やらで確認してみました。 以下のように作成したのですが、解が出るはずの値を入力しても強制的に終了してしまいます。どこがおかしいのでしょうか? 他に気になる点は、メイン関数にて「2次方程式として成り立った場合」にはサブへ移動ができているのでしょうか。 あと、仮に↑が合っていたとして、異なる2つの虚数解の計算方法は以下のやり方でも良いのかどうかもお聞きしたいです。 よろしくお願いします。 #include<stdio.h> #include<math.h> void niji(double a,double b,double c){ double x1,x2,x3,y1,y2,D; D=b*b-(4.0)*a*c; if(D>0){ printf("2つの異なる実数解\n"); x1=(-b+sqrt(D))/(2.0*a); x2=(-b-sqrt(D))/(2.0*a); printf("x= %f , %f \n",x1,x2); } else if(D==0){ printf("重解\n"); x3=(-b)/(2.0*a); printf("x= %f \n",x3); } else{ printf("2つの異なる虚数解\n"); x3=(-b)/(2.0*a); y1=sqrt(D)/(2.0*a); y2=-sqrt(D)/(2.0*a); printf("x= %f + i %f, %f - i %f\n",x3,y1,x3,y2); } return; } int main(void){ double a,b,c; printf("ax^2+bx+c=0の式のabcを入力せよ\n"); while(scanf("%f %f %f",&a,&b,&c)){ if(a==b==c==0){ break; } else if((a==b==0)&&(c!=0)){ printf("不能\n"); } else if((a==0)&&(b!=0)){ printf("1次方程式になる\n"); } else{// 入力されたabcが↑の3つに該当しなければ niji(a,b,c);//←サブ関数に示した2次方程式を解く } } return 0; }

  • 二次方程式の解き方

    初心者です。自力で解こうとしましたが、どうしてもわからないので質問させていただきます。 問題 2次方程式ax^2+bx+c=0 (ただし aは0でない)の解を求めよ。ただし、a,b,c(実数)はキーボードから入力し、判別式d=b*b-4*a*cが正か0か負かについて処理せよ。 虚数解についてですが、2+3iや4+2iのようなかんじで答えを出さなければいけないそうです。 次に、私が途中まで作ったプログラミングです。 #include<stdio.h> #include<math.h> int main(void) { double a,b,c,x1,x2,i; printf("ax^2+bx+c=0のa b cを入力してください >>>"); scanf("%lf %lf %lf", &a,&b,&c); if(a==0) { if(b==0.0) { printf("係数がおかしい。\n"); } else { x=-c/b; printf("解は、%gです。\n", x1); } } else { D=b*b-4*a*c; if(D>=0.0) { printf("解は重解となり%gです。\n", x1); } else { printf("解は%gと%gです。\n", x1,x2); } } else { ここまで出来ました。一応、実数解と重解の部分のプログラミングは正解しているようです。この次の部分、つまり、虚数解を求める部分のプログラミングが出来ません。よろしくお願いします。

専門家に質問してみよう