解答が#IND00と出てしまいます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

解答が#IND00と出てしまいます。

#1

投稿記事 by カメロンパン » 7年前

因数分解を解かせるプログラムを作成しています。
計算方法は解の公式を使いました。
一応、ひと通り出来がって試しに入力してみたのですが、なぜか答えが「#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;
}

box
記事: 1746
登録日時: 9年前

Re: 解答が#IND00と出てしまいます。

#2

投稿記事 by box » 7年前

カメロンパン さんが書きました:

コード:

	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で割りたい」のではないでしょうか。
最後に編集したユーザー box on 2012年8月21日(火) 18:18 [ 編集 1 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

Re: 解答が#IND00と出てしまいます。

#3

投稿記事 by カメロンパン » 7年前

box さんが書きました:
カメロンパン さんが書きました:

コード:

	x[0]=-b+r/2*a;
	x[1]=-b-r/2*a;
ここのところで、rを2で割って、aを掛けていますよ。大丈夫ですか?
本当は、rを「2×a」で割りたいのではないでしょうか。

今気づきました…
()を付け直して再度試してみます。
ご指摘、ありがとうございます

box
記事: 1746
登録日時: 9年前

Re: 解答が#IND00と出てしまいます。

#4

投稿記事 by box » 7年前

投稿内容編集のタイミングが前後してしまったので、気づかれていないかもしれませんが、
scanf() に関する疑問点もありますので、あわせてご確認ください。

入力値を確認するために、scanf() の直後に printf() を書いて、
a, b, cの値をチェックなさってみてはどうでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

Re: 解答が#IND00と出てしまいます。

#5

投稿記事 by カメロンパン » 7年前

ソースを以下の様に訂正しましたところ、#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;
}

box
記事: 1746
登録日時: 9年前

Re: 解答が#IND00と出てしまいます。

#6

投稿記事 by box » 7年前

カメロンパン さんが書きました:

コード:

	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"だったり、
何だか変則的ですね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

Re: 解答が#IND00と出てしまいます。

#7

投稿記事 by カメロンパン » 7年前

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"だったり、
何だか変則的ですね。
この終わり方自体が使いまわしなので、かなり適当になってしまいました…
もう少し簡単に出来るように修正を加えてみます。

閉鎖

“C言語何でも質問掲示板” へ戻る