質問するログイン新規登録

質問編集履歴

3

解、判別式の訂正と入力データ確認の部分の修正

2020/05/13 06:04

投稿

退会済みユーザー
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 (!(a*a+c*c)==0) {
72
+ if ((a*a+c*c)==0) {
81
73
  printf("解の公式の分母は0以外の数にしてください¥n");
82
74
  exit(EXIT_SUCCESS);
83
75
  }

2

解や判別式の訂正

2020/05/13 06:04

投稿

退会済みユーザー
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

解や判別式の訂正

2020/05/13 05:37

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -19,34 +19,42 @@
19
19
 
20
20
  ```
21
21
  係数を入力せよ
22
- (任意の整数a)
22
+ (任意のa)
23
+ (任意のb)
24
+ (任意のc)
25
+ (任意のd)
23
- Segmentation fault
26
+ 解の公式の分母は0以外の数にしてください
24
27
  ```
25
- コンパイルは出来るのですが、一つ目係数を入力したところ"Segmentatio fault"表示されます。
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=0,b=0,c=0,d=0;
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 = 2*a*b*c*d - (a*a*d*d+c*c*d*d); //判別式の定義
50
+ y = -(a*d + b*c)*(a*d + b*c); //判別式
43
51
 
44
52
  printf(" %21.16g(反復回数%d 回)¥n", y, count);
45
- printf("%21.16g (反復回数%d回)\n",y,count);
53
+
46
54
  }
47
55
 
48
56
  //値の更新
49
- y = 2*a*b*c*d - (a*a*d*d+c*c*d*d);
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("aは0以外の数にしてください¥n");
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
- }else if(y==0){
86
+ if(y==0){
85
- num1 = num2 = (a*b+c*d)/(a*a+c*c);
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(-y)/(a*a+c*c);
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