ページ 1 / 1
解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:06
by カメロンパン
因数分解を解かせるプログラムを作成しています。
計算方法は解の公式を使いました。
一応、ひと通り出来がって試しに入力してみたのですが、なぜか答えが「#IND00」と出てしまいます。
どうすれば解決するのか分からないので質問させていただきました。
アドバイスを下さい。
コード:
#include<stdio.h>
#include<math.h>
#pragma warning(disable : 4996)
int main(void)
{
double x[2],a,b,c,p,r,end;
printf("「ax^2+ax+b」\n因数分解を自動解答します。\n(x^2から始まる場合はaには1を入れて下さい)\n");
printf("aの値を入力して下さい。\n");
scanf("%f",&a);
//aの値の入力
printf("次にbの値を入力して下さい。\n");
scanf("%f",&b);
//bの値の入力
printf("次にcの値を入力して下さい。\n");
scanf("%f",&c);
//cの値の入力
p=b*b-4*a*c;
r=sqrt(p);
//√b*b-4*a*cの計算
x[0]=-b+r/2*a;
x[1]=-b-r/2*a;
printf("x=%f,%f\n",x[0],x[1]);
for(end=1;end<1;end++);
printf("確認後、適当なキーを入力して下さい。処理を終了します。\n");
scanf("%d",&end);
return 0;
}
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:11
by box
カメロンパン さんが書きました:
コード:
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
double型の変数を入力する際の書式文字列って、"%f" でしたか?
カメロンパン さんが書きました:
コード:
x[0]=-b+r/2*a;
x[1]=-b-r/2*a;
ここのところで、rを2で割って、aを掛けていますよ。大丈夫ですか?
本当は、rを「2×aで割りたい」のではないでしょうか。
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:16
by カメロンパン
box さんが書きました:カメロンパン さんが書きました:
コード:
x[0]=-b+r/2*a;
x[1]=-b-r/2*a;
ここのところで、rを2で割って、aを掛けていますよ。大丈夫ですか?
本当は、rを「2×a」で割りたいのではないでしょうか。
今気づきました…
()を付け直して再度試してみます。
ご指摘、ありがとうございます
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:19
by box
投稿内容編集のタイミングが前後してしまったので、気づかれていないかもしれませんが、
scanf() に関する疑問点もありますので、あわせてご確認ください。
入力値を確認するために、scanf() の直後に printf() を書いて、
a, b, cの値をチェックなさってみてはどうでしょうか。
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:41
by カメロンパン
ソースを以下の様に訂正しましたところ、#IND00は出なくなりました。
ですが、計算がおかしいのであとは計算部分の訂正になると思います。
なので、一旦解決としますが、まだ何か指摘がありましたらおねがいします。
コード:
#include<stdio.h>
#include<math.h>
#pragma warning(disable : 4996)
int main(void)
{
double x[2],a,b,c,p,r,end;
printf("「ax^2+ax+b」\n因数分解を自動解答します。\n(x^2から始まる場合はaには1を入れて下さい)\n");
printf("aの値を入力して下さい。\n");
scanf("%lf",&a);
//aの値の入力
printf("次にbの値を入力して下さい。\n");
scanf("%lf",&b);
//bの値の入力
printf("次にcの値を入力して下さい。\n");
scanf("%lf",&c);
//cの値の入力
p=b*b-4*a*c;
r=sqrt(p);
//√b*b-4*a*cの計算
x[0]=-b+r/(2*a);
x[1]=-b-r/(2*a);
printf("x=%lf,%lf\n",x[0],x[1]);
for(end=1;end<1;end++);
printf("確認後、適当なキーを入力して下さい。処理を終了します。\n");
scanf("%d",&end);
return 0;
}
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 18:55
by box
カメロンパン さんが書きました:
コード:
x[0]=-b+r/(2*a);
x[1]=-b-r/(2*a);
そういえば、解の公式で、2aで割るのは判別式の平方根の部分だけで本当にいいんでしょうか。
カメロンパン さんが書きました:
コード:
printf("x=%lf,%lf\n",x[0],x[1]);
printf() の書式文字列について、修正した方がいいのでは?と書いた覚えはありません。
カメロンパン さんが書きました:
コード:
for(end=1;end<1;end++);
printf("確認後、適当なキーを入力して下さい。処理を終了します。\n");
scanf("%d",&end);
もっと簡単な終わり方を考えてみてはどうでしょうか。
そもそも、この終了処理は本当に必要なんでしょうか。
double型の変数をfor文の制御用に使ったり、
scanf() で double型の変数を入力するのに書式文字列が"%d"だったり、
何だか変則的ですね。
Re: 解答が#IND00と出てしまいます。
Posted: 2012年8月21日(火) 20:15
by カメロンパン
box さんが書きました:カメロンパン さんが書きました:
コード:
x[0]=-b+r/(2*a);
x[1]=-b-r/(2*a);
そういえば、解の公式で、2aで割るのは判別式の平方根の部分だけで本当にいいんでしょうか。
2aで割るのは分数で表した場合の「-b±√b^2-4ac」の部分ですよね?
box さんが書きました:カメロンパン さんが書きました:
コード:
printf("x=%lf,%lf\n",x[0],x[1]);
printf() の書式文字列について、修正した方がいいのでは?と書いた覚えはありません。
あ、そうでした。
すいません。訂正します
box さんが書きました:カメロンパン さんが書きました:
コード:
for(end=1;end<1;end++);
printf("確認後、適当なキーを入力して下さい。処理を終了します。\n");
scanf("%d",&end);
もっと簡単な終わり方を考えてみてはどうでしょうか。
そもそも、この終了処理は本当に必要なんでしょうか。
double型の変数をfor文の制御用に使ったり、
scanf() で double型の変数を入力するのに書式文字列が"%d"だったり、
何だか変則的ですね。
この終わり方自体が使いまわしなので、かなり適当になってしまいました…
もう少し簡単に出来るように修正を加えてみます。