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

質問編集履歴

2

気う悪違反であると知ったため元の質問に戻しました。

2021/01/30 03:57

投稿

asitahare111
asitahare111

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,1 +1,89 @@
1
+ ### 前提・実現したいこと
2
+ ガウスの消去法により連立方程式の解を求める。
3
+ c言語でガウスの消去法を実装しようと以下のようなコードを作成したのですが、すべての値をscanfで読み取ったあとにsegmentation faultが出てしまいうまくどうさしません。どこを直せば正常に機能するのか教えていただきたいです。
4
+ ### 該当のソースコード
5
+ #include <stdio.h>
6
+ #include <stdlib.h>
7
+ void PrintAb(double *A, double *b, int n)
8
+ {
9
+ int i, j;
10
+ double *ai;
11
+ printf("A,b=\n");
12
+ for(i = 0;i < n; i++)
13
+ {
14
+ for(j = 0;j < n; j++)
15
+ {
16
+ printf("%6.1f\t", *(ai+j));
17
+ }
18
+ printf("|%6.1f\t", b[i]);
19
+ ai += n;
20
+ }
1
- prjbcktidtxfseaasrdtvhvhjfyufyu
21
+ printf("\n");
22
+ }
23
+ int main(void)
24
+ {
25
+ int i, j, k, N;
26
+ double r;
27
+ double *ai, *ak;
28
+ double *A, *b;
29
+ printf("N=");
30
+ scanf("%d", &N);
31
+ A = (double *) malloc(N*N*sizeof(double));
32
+ if(A == NULL)
33
+ {
34
+ printf("Can't allocate memory.\n");
35
+ exit(1);
36
+ }
37
+ b = (double *) malloc(N*sizeof(double));
38
+ if(b == NULL)
39
+ {
40
+ printf("Can't allocate memory.\n");
41
+ exit(1);
42
+ }
43
+ ai = A;
44
+ for(i = 0;i < N; i++)
45
+ {
46
+ for(j = 0;j < N; j++)
47
+ {
48
+ printf("A[%d][%d] = ", i , j);
49
+ scanf("%lf", ai+j);
50
+ }
51
+ ai += N;
52
+ }
53
+ for(i = 0; i < N; i++)
54
+ {
55
+ printf("b[%d] = ", i );
56
+ scanf("%lf", b+i);
57
+ }
58
+ PrintAb(A, b, N);
59
+ ai = A;
60
+ ak = A;
61
+ for(k = 0;k < N-1;k++)
62
+ {
63
+ for(i = k+1; i < N; i++)
64
+ {
65
+ r = *(ai+i*N+k) / *(ak+k);
66
+ for(j = k;j < N; j++)
67
+ {
68
+ *(ai+i*N+j) -= *(ak+j) * r;
69
+ }
70
+ b[i] -= b[k] * r;
71
+ }
72
+ PrintAb(A, b, N);
73
+ ak += N;
74
+ }
75
+ ai = ak;
76
+ for(i = N-1;i >= 0; i--)
77
+ {
78
+ for(j = i+1;j < N; j++)
79
+ {
80
+ b[i] -= *(ai+j) * b[j];
81
+ }
82
+ b[i] /= *(ai+i);
83
+ PrintAb(A, b, N);
84
+ ai -= N;
85
+ }
86
+ return 0;
87
+ }
88
+ ### 補足情報(FW/ツールのバージョンなど)
89
+ ここにより詳細な情報を記載してください。

1

hjcgkcghkckcghjkcdtstx

2021/01/30 03:57

投稿

asitahare111
asitahare111

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- C言語を用いたガウスの消去法の実装
1
+ aajjhjvhct
body CHANGED
@@ -1,99 +1,1 @@
1
- ### 前提・実現したいこと
2
- ガウスの消去法により連立方程式の解を求める。
3
- c言語でガウスの消去法を実装しようと以下のようなコードを作成したのですが、すべての値をscanfで読み取ったあとにsegmentation faultが出てしまいうまくどうさしません。どこを直せば正常に機能するのか教えていただきたいです。
4
- ### 該当のソースコード
5
- #include <stdio.h>
6
- #include <stdlib.h>
7
-
8
- void PrintAb(double *A, double *b, int n)
9
- {
10
- int i, j;
11
- double *ai;
12
- printf("A,b=\n");
13
- for(i = 0;i < n; i++)
14
- {
15
- for(j = 0;j < n; j++)
16
- {
17
- printf("%6.1f\t", *(ai+j));
18
- }
19
- printf("|%6.1f\t", b[i]);
20
- ai += n;
21
- }
22
- printf("\n");
1
+ prjbcktidtxfseaasrdtvhvhjfyufyu
23
- }
24
-
25
- int main(void)
26
- {
27
- int i, j, k, N;
28
- double r;
29
- double *ai, *ak;
30
- double *A, *b;
31
-
32
- printf("N=");
33
- scanf("%d", &N);
34
-
35
- A = (double *) malloc(N*N*sizeof(double));
36
- if(A == NULL)
37
- {
38
- printf("Can't allocate memory.\n");
39
- exit(1);
40
- }
41
-
42
- b = (double *) malloc(N*sizeof(double));
43
- if(b == NULL)
44
- {
45
- printf("Can't allocate memory.\n");
46
- exit(1);
47
- }
48
-
49
- ai = A;
50
- for(i = 0;i < N; i++)
51
- {
52
- for(j = 0;j < N; j++)
53
- {
54
- printf("A[%d][%d] = ", i , j);
55
- scanf("%lf", ai+j);
56
- }
57
- ai += N;
58
- }
59
-
60
- for(i = 0; i < N; i++)
61
- {
62
- printf("b[%d] = ", i );
63
- scanf("%lf", b+i);
64
- }
65
- PrintAb(A, b, N);
66
-
67
- ai = A;
68
- ak = A;
69
- for(k = 0;k < N-1;k++)
70
- {
71
- for(i = k+1; i < N; i++)
72
- {
73
- r = *(ai+i*N+k) / *(ak+k);
74
- for(j = k;j < N; j++)
75
- {
76
- *(ai+i*N+j) -= *(ak+j) * r;
77
- }
78
- b[i] -= b[k] * r;
79
- }
80
- PrintAb(A, b, N);
81
- ak += N;
82
- }
83
-
84
- ai = ak;
85
- for(i = N-1;i >= 0; i--)
86
- {
87
- for(j = i+1;j < N; j++)
88
- {
89
- b[i] -= *(ai+j) * b[j];
90
- }
91
- b[i] /= *(ai+i);
92
- PrintAb(A, b, N);
93
- ai -= N;
94
- }
95
- return 0;
96
- }
97
- ### 補足情報(FW/ツールのバージョンなど)
98
-
99
- ここにより詳細な情報を記載してください。