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

質問編集履歴

4

2018/08/10 03:42

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -94,80 +94,4 @@
94
94
  自体は出ないと思います。
95
95
  printfで中身を表示してみたのですが、原因が全くわかりません。
96
96
  どうしたらfor文を正しく動作させて、jを変化させて理想の計算をさせられるでしょうか?
97
- どうか知恵を貸していただけないでしょうか。お願いします。
97
+ どうか知恵を貸していただけないでしょうか。お願いします。
98
-
99
- 編集
100
- あの、少しプログラムを変えてプログラムを解読する練習をしているのですが、
101
- ```
102
- #include <iostream>
103
- #include <stdio.h>
104
-
105
- // 元の数定義
106
- #define N 3 // 3
107
-
108
- using namespace std;
109
-
110
- //double a[N][N+1];
111
- // 係数
112
- static double a[N][N + 1] = {
113
- { 1.0, 2.0, 8.0, 4.0},
114
- { 4.0, 3.0, 2.0, 12.0},
115
- { 1.0, 4.0, 2.0, 4.0},
116
- };
117
-
118
-
119
- int main()
120
- {
121
- double d;
122
- int i;
123
- int j;
124
-
125
- for (i = N - 1; i >= 0; i--) {
126
- d = a[i][N]/ a[i][i]; //d = a[2][3] / a[2][2]
127
-
128
- printf("d=a[%d][%d]/a[%d][%d]よりdは%fです\n",i,N,i,i,d);
129
-
130
- for (j = i + 1; j < N; j++) {
131
- a[i][N] = d - a[i][j] * a[i][N] / a[i][i];
132
-
133
- printf("式は%f - a[%d][%d] * a[%d][%d]/a[%d][%d]です\n", d, i, j, i, N, i, i);
134
- printf("式の中身は%f - %f * %f/%fです\n", d, a[i][j], a[i][N], a[i][i]);        
135
- printf(" a[%d][%d]の中身は%f\n", i, N, a[i][N]);
136
- printf("%f/%f-(%f)*%f/%fである\n", a[i][N], a[i][i], a[i][j], a[i][N], a[i][i]);
137
- }
138
- }
139
-
140
- return 0;
141
- }
142
- ```
143
-
144
- 以下は実行結果です。
145
- ```
146
- d=a[2][3]/a[2][2]よりdは2.000000です
147
- d=a[1][3]/a[1][1]よりdは4.000000です
148
- 式は4.000000 - a[1][2] * a[1][3]/a[1][1]です
149
- 式の中身は4.000000 - 2.000000 * -4.000000/3.000000です
150
- a[1][3]の中身は-4.000000
151
- -4.000000/3.000000-(2.000000)*-4.000000/3.000000である
152
- d=a[0][3]/a[0][0]よりdは4.000000です
153
- 式は4.000000 - a[0][1] * a[0][3]/a[0][0]です
154
- 式の中身は4.000000 - 2.000000 * -4.000000/1.000000です
155
- a[0][3]の中身は-4.000000
156
- -4.000000/1.000000-(2.000000)*-4.000000/1.000000である
157
- 式は4.000000 - a[0][2] * a[0][3]/a[0][0]です
158
- 式の中身は4.000000 - 8.000000 * 36.000000/1.000000です
159
- a[0][3]の中身は36.000000
160
- 36.000000/1.000000-(8.000000)*36.000000/1.000000である
161
-
162
- ```
163
- 実行結果に関して
164
- ```
165
- d=a[1][3]/a[1][1]よりdは4.000000です
166
- 式は4.000000 - a[1][2] * a[1][3]/a[1][1]です
167
- 式の中身は4.000000 - 2.000000 * -4.000000/3.000000です
168
- ```
169
- a[1][3]は12のはずですが、なぜか-4.000000となっています。他にもいきなり36などの数字が出てきます。
170
- これは```a[i][N] = d - a[i][j] * a[j][N] / a[i][i]```を```a[i][N] = d - a[i][j] * a[i][N] / a[i][i]
171
- ```と置いてしまったがためにデタラメな計算になってしまったということでしょうか?
172
- すいません。少し考えます。
173
- 自分の力で解決します、。

3

2018/08/10 03:41

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -168,4 +168,6 @@
168
168
  ```
169
169
  a[1][3]は12のはずですが、なぜか-4.000000となっています。他にもいきなり36などの数字が出てきます。
170
170
  これは```a[i][N] = d - a[i][j] * a[j][N] / a[i][i]```を```a[i][N] = d - a[i][j] * a[i][N] / a[i][i]
171
- ```と置いてしまったがためにデタラメな計算になってしまったということでしょうか?
171
+ ```と置いてしまったがためにデタラメな計算になってしまったということでしょうか?
172
+ すいません。少し考えます。
173
+ 自分の力で解決します、。

2

編集

2018/08/10 03:40

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -166,6 +166,6 @@
166
166
  式は4.000000 - a[1][2] * a[1][3]/a[1][1]です
167
167
  式の中身は4.000000 - 2.000000 * -4.000000/3.000000です
168
168
  ```
169
- a[1][3]は12のはずですが、なぜか-4.000000となっています。
169
+ a[1][3]は12のはずですが、なぜか-4.000000となっています。他にもいきなり36などの数字が出てきます。
170
170
  これは```a[i][N] = d - a[i][j] * a[j][N] / a[i][i]```を```a[i][N] = d - a[i][j] * a[i][N] / a[i][i]
171
171
  ```と置いてしまったがためにデタラメな計算になってしまったということでしょうか?

1

hennsyuu

2018/08/10 03:34

投稿

carnage0216
carnage0216

スコア194

title CHANGED
File without changes
body CHANGED
@@ -94,4 +94,78 @@
94
94
  自体は出ないと思います。
95
95
  printfで中身を表示してみたのですが、原因が全くわかりません。
96
96
  どうしたらfor文を正しく動作させて、jを変化させて理想の計算をさせられるでしょうか?
97
- どうか知恵を貸していただけないでしょうか。お願いします。
97
+ どうか知恵を貸していただけないでしょうか。お願いします。
98
+
99
+ 編集
100
+ あの、少しプログラムを変えてプログラムを解読する練習をしているのですが、
101
+ ```
102
+ #include <iostream>
103
+ #include <stdio.h>
104
+
105
+ // 元の数定義
106
+ #define N 3 // 3
107
+
108
+ using namespace std;
109
+
110
+ //double a[N][N+1];
111
+ // 係数
112
+ static double a[N][N + 1] = {
113
+ { 1.0, 2.0, 8.0, 4.0},
114
+ { 4.0, 3.0, 2.0, 12.0},
115
+ { 1.0, 4.0, 2.0, 4.0},
116
+ };
117
+
118
+
119
+ int main()
120
+ {
121
+ double d;
122
+ int i;
123
+ int j;
124
+
125
+ for (i = N - 1; i >= 0; i--) {
126
+ d = a[i][N]/ a[i][i]; //d = a[2][3] / a[2][2]
127
+
128
+ printf("d=a[%d][%d]/a[%d][%d]よりdは%fです\n",i,N,i,i,d);
129
+
130
+ for (j = i + 1; j < N; j++) {
131
+ a[i][N] = d - a[i][j] * a[i][N] / a[i][i];
132
+
133
+ printf("式は%f - a[%d][%d] * a[%d][%d]/a[%d][%d]です\n", d, i, j, i, N, i, i);
134
+ printf("式の中身は%f - %f * %f/%fです\n", d, a[i][j], a[i][N], a[i][i]);        
135
+ printf(" a[%d][%d]の中身は%f\n", i, N, a[i][N]);
136
+ printf("%f/%f-(%f)*%f/%fである\n", a[i][N], a[i][i], a[i][j], a[i][N], a[i][i]);
137
+ }
138
+ }
139
+
140
+ return 0;
141
+ }
142
+ ```
143
+
144
+ 以下は実行結果です。
145
+ ```
146
+ d=a[2][3]/a[2][2]よりdは2.000000です
147
+ d=a[1][3]/a[1][1]よりdは4.000000です
148
+ 式は4.000000 - a[1][2] * a[1][3]/a[1][1]です
149
+ 式の中身は4.000000 - 2.000000 * -4.000000/3.000000です
150
+ a[1][3]の中身は-4.000000
151
+ -4.000000/3.000000-(2.000000)*-4.000000/3.000000である
152
+ d=a[0][3]/a[0][0]よりdは4.000000です
153
+ 式は4.000000 - a[0][1] * a[0][3]/a[0][0]です
154
+ 式の中身は4.000000 - 2.000000 * -4.000000/1.000000です
155
+ a[0][3]の中身は-4.000000
156
+ -4.000000/1.000000-(2.000000)*-4.000000/1.000000である
157
+ 式は4.000000 - a[0][2] * a[0][3]/a[0][0]です
158
+ 式の中身は4.000000 - 8.000000 * 36.000000/1.000000です
159
+ a[0][3]の中身は36.000000
160
+ 36.000000/1.000000-(8.000000)*36.000000/1.000000である
161
+
162
+ ```
163
+ 実行結果に関して
164
+ ```
165
+ d=a[1][3]/a[1][1]よりdは4.000000です
166
+ 式は4.000000 - a[1][2] * a[1][3]/a[1][1]です
167
+ 式の中身は4.000000 - 2.000000 * -4.000000/3.000000です
168
+ ```
169
+ a[1][3]は12のはずですが、なぜか-4.000000となっています。
170
+ これは```a[i][N] = d - a[i][j] * a[j][N] / a[i][i]```を```a[i][N] = d - a[i][j] * a[i][N] / a[i][i]
171
+ ```と置いてしまったがためにデタラメな計算になってしまったということでしょうか?