質問編集履歴
3
解、判別式の訂正と入力データ確認の部分の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,16 +16,8 @@
|
|
16
16
|
⇒D<0,D=0,D<0
|
17
17
|
|
18
18
|
##発生している問題・エラーメッセージ
|
19
|
+
虚数解の場合が表示されません。すべて解がb/aとして計算されてしまいます。
|
19
20
|
|
20
|
-
```
|
21
|
-
係数を入力せよ
|
22
|
-
(任意のa)
|
23
|
-
(任意のb)
|
24
|
-
(任意のc)
|
25
|
-
(任意のd)
|
26
|
-
解の公式の分母は0以外の数にしてください
|
27
|
-
```
|
28
|
-
全て0以外の数値を代入しているのですが、解の公式の分母である(a^2+c^2)が0として認識されます。
|
29
21
|
###該当のソースコード
|
30
22
|
|
31
23
|
```c
|
@@ -77,7 +69,7 @@
|
|
77
69
|
|
78
70
|
|
79
71
|
//入力データの確認
|
80
|
-
if (
|
72
|
+
if ((a*a+c*c)==0) {
|
81
73
|
printf("解の公式の分母は0以外の数にしてください¥n");
|
82
74
|
exit(EXIT_SUCCESS);
|
83
75
|
}
|
2
解や判別式の訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
⇒結果に至るまで、計算途中結果と反復回数を表示すること
|
8
8
|
⇒反復回数が1000回を超えないこと
|
9
9
|
|
10
|
-
・<math.h>をインクルードしないこと(sqrt等使用しない
|
10
|
+
・<math.h>をインクルードしないこと(sqrt等使用しない)
|
11
11
|
|
12
12
|
・a=0の場合には、メッセージを表示し、正常終了すること
|
13
13
|
⇒<stdlib.h>で定義される標準ライブラリ関数exitを使用すること
|
1
解や判別式の訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -19,34 +19,42 @@
|
|
19
19
|
|
20
20
|
```
|
21
21
|
係数を入力せよ
|
22
|
-
(任意の
|
22
|
+
(任意のa)
|
23
|
+
(任意のb)
|
24
|
+
(任意のc)
|
25
|
+
(任意のd)
|
23
|
-
|
26
|
+
解の公式の分母は0以外の数にしてください
|
24
27
|
```
|
25
|
-
|
28
|
+
全て0以外の数値を代入しているのですが、解の公式の分母である(a^2+c^2)が0として認識されます。
|
26
29
|
###該当のソースコード
|
27
30
|
|
28
31
|
```c
|
32
|
+
//修正済み
|
33
|
+
|
29
34
|
#include <stdio.h>
|
30
35
|
#include <stdlib.h>
|
31
36
|
|
32
37
|
|
33
|
-
//
|
38
|
+
//解の公式の√(判別式)の部分の処理を行う関数
|
34
39
|
|
35
40
|
double mysqrt(double y){
|
36
41
|
|
37
|
-
double a
|
42
|
+
double a,b,c,d;
|
43
|
+
|
38
44
|
int count=0; //反復回数
|
39
45
|
|
46
|
+
printf(" %21.16g(反復回数%d 回)¥n", y, count);
|
47
|
+
|
40
48
|
while(count < 1000) {
|
41
49
|
count++;
|
42
|
-
y =
|
50
|
+
y = -(a*d + b*c)*(a*d + b*c); //判別式
|
43
51
|
|
44
52
|
printf(" %21.16g(反復回数%d 回)¥n", y, count);
|
45
|
-
|
53
|
+
|
46
54
|
}
|
47
55
|
|
48
56
|
//値の更新
|
49
|
-
y =
|
57
|
+
y = -(a*d + b*c)*(a*d + b*c);
|
50
58
|
|
51
59
|
return y;
|
52
60
|
}
|
@@ -62,33 +70,27 @@
|
|
62
70
|
|
63
71
|
printf("係数を入力せよ\n");
|
64
72
|
|
65
|
-
scanf("%lf",a);
|
73
|
+
scanf("%lf",&a);
|
66
|
-
scanf("%lf",b);
|
74
|
+
scanf("%lf",&b);
|
67
|
-
scanf("%lf",c);
|
75
|
+
scanf("%lf",&c);
|
68
|
-
scanf("%lf",d);
|
76
|
+
scanf("%lf",&d);
|
69
77
|
|
70
78
|
|
71
79
|
//入力データの確認
|
72
|
-
if (!(a=0)
|
80
|
+
if (!(a*a+c*c)==0) {
|
73
|
-
printf("
|
81
|
+
printf("解の公式の分母は0以外の数にしてください¥n");
|
74
82
|
exit(EXIT_SUCCESS);
|
75
83
|
}
|
76
|
-
//判別式の場合分け
|
77
84
|
|
78
|
-
if(y>0){
|
79
|
-
num1 = ((a*b+c*d)+mysqrt(y))/(a*a+c*c);
|
80
|
-
num2 = ((a*b+c*d)-mysqrt(y))/(a*a+c*c);
|
81
85
|
|
82
|
-
printf("解: x=%.2f, %.2f\n",num1,num2);
|
83
|
-
|
84
|
-
|
86
|
+
if(y==0){
|
85
|
-
num1 = num2 =
|
87
|
+
num1 = num2 = b/a; //重解を持つ場合
|
86
88
|
|
87
89
|
printf("解: x=%.2f, %.2f\n",num1,num2);
|
88
90
|
|
89
|
-
}else{
|
91
|
+
}else{ //虚数解をもつ場合
|
90
92
|
real = (a*b+c*d)/(a*a+c*c);
|
91
|
-
image = mysqrt(
|
93
|
+
image = mysqrt(y)/(a*a+c*c);
|
92
94
|
|
93
95
|
printf("解: %.2f+%.2fi, %.2f-%.2fi\n",real,image);
|
94
96
|
}
|
@@ -100,6 +102,7 @@
|
|
100
102
|
|
101
103
|
・判別式Dをyとし、その中身をある程度整理した形にした
|
102
104
|
・全ての変数を初期化
|
105
|
+
・解を求めるif文の箇所を訂正
|
103
106
|
|
104
107
|
##### 補足情報(FW/ツールのバージョンなど)
|
105
108
|
|