プロが教えるわが家の防犯対策術!

次のプログラムが出来ません。

二次方程式の係数a,b,cを順に実数で入力したとき、2次方程式の解を出力。虚数解はそれらしく表示。

単純に考えると解の公式に当てはめる、というものですが、きれいに表示しようとすると、かなりの手間になります。
なんとか効率よく表示まで行える方法はありませんか?
Cで簡単な関数のみで出来ると思います。

A 回答 (4件)

自ら「簡単な関数のみでできると思います」と言っているのならなぜ書かないんだろうと思いつつ.



#include <stdio.h>
#include <math.h>

int main()
{
double a, b, c;

scanf("%lf%lf%lf", &a, &b, &c);

b /= 2;

double d = b*b-a*c;
double x = -b/a;
double y = fabs(sqrt(fabs(d))/a);

if (d > 0) {
double x1 = (x > 0) ? x+y : x-y;
double x2 = c / (a*x1);
printf("Two real zeros: %lf and %lf\n", x1, x2);
} else if (d < 0) {
printf("Two complex zeros: %lf +/- i%lf\n", x, y);
} else {
printf("Double zero: %lf\n", x);
}
return 0;
}
    • good
    • 0
この回答へのお礼

有難う御座います。
途中までは考える事が出来たのですが、あまりに自分のプログラムの効率の悪さに、諦めてしまいました。
参考にして頑張ってみようと思います。

お礼日時:2004/07/15 22:04

#3さんのプログラムを参考にして、#2さんのような出力結果がでるようにしてみました。

もっときれいなプログラムになるとは思いますが、参考にしてみて下さい。

#include<stdio.h>
#include<math.h>

int main(){
int x,y,z;
int a,b,c;
scanf("%d%d%d",&x,&y,&z);
a=-1*y;
b=y*y-4*x*z;
c=2*x;
printf(" -%d",a);if(b==0){printf("\n");}else{printf("±");matome(b);}
printf(" --------\n");
printf(" %d \n",c);
}

matome(int k){
int i,j;
if(k<0){
k=-1*k;
for(i=(int)sqrt(k);i>=1;i--){
if(k%(i*i) == 0)break;
}
j=k/(i*i);
printf("%d√%d",i,j);printf("i\n");
}else{
for(i=(int)sqrt(k);i>=1;i--){
if(k%(i*i) == 0)break;
}
j=k/(i*i);
printf("%d√%d\n",i,j);
}
}

2次方程式の解を値として必要なプログラムならば#1さん
ようにしなけれいけないんだけど、解を表示するだけならこっちほうが見た目わかりやすと思います。
    • good
    • 0
この回答へのお礼

アドバイス有難う御座います。
参考プログラムまで作って頂いて本当に助かります。
ちゃんと自分で理解して、プログラムを作ってみようと思います。
それでは。失礼致します。

お礼日時:2004/07/16 17:16

> そこまで考えたんですけど、√の中身まで出せるでしょうか?



どうして出来ないと思われるんでしょ?
もしあなたが、√72 を 6√2 に変形出来ないのなら
しかたないですがね (^^;)
shiro0102 さんは、計算する時、ある一定の手順に従っていません?
その手順どおりにプログラムすればいいわけです。

√c = a√b
になるとすると
c = a * a * b
ということですので、これを満たす最大の a を見つければいいわけです。
下記のプログラムは逐一調べていくので非効率ですが・・・

int a, b, c;
c = 72;

for(a = (int)sqrt(c); a >= 1; a --){
 if(c % (a * a) == 0) break;
}
b = c / (a * a);
printf("√%d = %d√%d\n", c, a, b);

# あっ、あくまで整数の世界の話です
# 実数なら、分数(分母と分子)に分けて
# 計算しなくてはなりません
    • good
    • 0
この回答へのお礼

有難う御座います。
そうですね、そのようにすれば求めることができるのですね…
まだプログラミングを始めて日が浅いので、自分でプログラムを生かすことが上手く出来ません。
プログラムの世界は広いのですね…
それでは、有難う御座いました。課題提出まで、頑張ってみたいと思います。

お礼日時:2004/07/16 17:11

「そらしく表示」っていうのは


例えば
   
5±2√3i
─────
 7

と表示させるとかいうことでしょうか?

この回答への補足

そうですね。分数は/でも構わないと思います。
そこまで考えたんですけど、√の中身まで出せるでしょうか?私では考えられませんでした。

補足日時:2004/07/15 21:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!