質問編集履歴
3
ソースコード修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -157,7 +157,7 @@
|
|
157
157
|
|
158
158
|
fgets(youso, N, fp); //1行のみ読み取り
|
159
159
|
sscanf(youso, "%lf %lf %lf", &zahyou[i][0],&zahyou[i][1],&zahyou[i][2]);
|
160
|
-
fprintf(outputfile,"%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
160
|
+
//fprintf(outputfile,"%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
161
161
|
|
162
162
|
}
|
163
163
|
|
2
文章の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
4列目の値が5列目の値と同じになってしまいます。
|
5
5
|
|
6
6
|
読み込むファイル(in.dat)該当箇所のみ
|
7
|
-
|
7
|
+
数字が1万行ほど羅列されているので、大きすぎて最初のほうしか貼ることが出来ませんでしたが、このままでもプログラムは動くと思います。
|
8
8
|
```
|
9
9
|
4846 15677 0 0 1.000E+03
|
10
10
|
23 34 35 36 70 73 72 56
|
@@ -233,7 +233,7 @@
|
|
233
233
|
}
|
234
234
|
```
|
235
235
|
|
236
|
-
### 実行結果(該当箇所
|
236
|
+
### 実行結果(該当箇所一部抜粋)
|
237
237
|
```
|
238
238
|
23 34 35 70 70 73 72 56
|
239
239
|
66 61 64 33 33 46 40 44
|
1
ソースコードなど修正しました。丸々コピペしただけなので、読みにくかったら申し訳ありません。
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,19 +4,79 @@
|
|
4
4
|
4列目の値が5列目の値と同じになってしまいます。
|
5
5
|
|
6
6
|
読み込むファイル(in.dat)該当箇所のみ
|
7
|
+
データが大きすぎて最初のほうしか貼ることが出来ませんでしたが、このままでもプログラムは動くと思います。
|
7
|
-
```
|
8
|
+
```
|
9
|
+
4846 15677 0 0 1.000E+03
|
8
|
-
|
10
|
+
23 34 35 36 70 73 72 56
|
9
11
|
66 61 64 58 33 46 40 44
|
10
12
|
58 56 72 73 73 78 58 60
|
11
13
|
75 53 65 60 64 78 66 58
|
12
|
-
|
14
|
+
19 8 1283 20 25 18 17 19
|
13
|
-
|
15
|
+
78 64 66 62 68 46 75 60
|
14
|
-
|
16
|
+
76 61 60 75 19 20 1283 14
|
17
|
+
66 76 62 75 15 9 20 1283
|
18
|
+
15 4 9 1283 23 32 36 24
|
19
|
+
34 23 21 32 62 78 74 76
|
20
|
+
76 66 78 58 73 78 71 58
|
21
|
+
14 26 16 25 13 2 1 3
|
22
|
+
21 23 24 32 61 76 60 58
|
23
|
+
64 71 72 56 65 61 75 60
|
24
|
+
26 16 25 27 39 50 49 37
|
25
|
+
17 19 1283 14 8 18 6 7
|
26
|
+
56 64 71 57 13 12 11 1
|
27
|
+
42 25 30 29 34 23 35 22
|
28
|
+
20 15 1283 14 6 17 18 1283
|
29
|
+
68 76 60 75 8 18 19 1283
|
30
|
+
40 37 33 49 17 19 18 1283
|
31
|
+
37 39 27 33 25 18 30 29
|
32
|
+
30 19 25 31 28 37 27 33
|
33
|
+
77 62 57 78 42 25 29 37
|
34
|
+
41 50 37 49 28 25 16 27
|
35
|
+
76 66 58 61 14 26 15 16
|
36
|
+
70 56 71 57 43 64 47 48
|
37
|
+
36 47 35 48 58 56 64 72
|
38
|
+
35 34 47 36 21 23 13 24
|
39
|
+
72 56 71 70 64 78 71 57
|
40
|
+
38 50 39 37 4 1283 14 5
|
41
|
+
62 78 76 66 57 70 77 71
|
42
|
+
77 62 78 74 14 26 20 15
|
43
|
+
71 64 72 58 54 46 68 40
|
44
|
+
8 18 7 19 42 37 41 50
|
45
|
+
34 23 32 36 64 78 58 71
|
46
|
+
68 44 49 40 62 64 57 78
|
47
|
+
31 37 42 38 25 18 19 30
|
48
|
+
48 64 56 43 76 74 62 75
|
49
|
+
48 47 43 36 9 8 20 1283
|
50
|
+
60 46 44 68 60 53 46 75
|
51
|
+
40 37 28 33 33 39 44 49
|
52
|
+
33 44 40 49 17 19 14 25
|
53
|
+
15 4 1283 14 4 6 1283 5
|
54
|
+
2 12 13 1 39 37 49 33
|
55
|
+
42 25 37 31 72 73 71 58
|
56
|
+
42 25 31 30 76 78 60 58
|
57
|
+
41 37 42 29 23 34 21 22
|
58
|
+
57 64 43 56 46 68 40 44
|
59
|
+
78 68 76 60 39 37 27 38
|
60
|
+
66 61 76 75 78 57 77 71
|
61
|
+
28 25 27 37 25 18 29 17
|
62
|
+
37 50 42 38 30 41 42 29
|
63
|
+
1283 17 14 5 8 18 1283 6
|
64
|
+
6 17 1283 5 78 71 69 73
|
65
|
+
11 10 13 1 3 13 10 1
|
66
|
+
11 23 12 22 24 23 13 12
|
67
|
+
19 14 25 20 20 14 25 26
|
68
|
+
31 25 1338 19 31 37 1338 25
|
69
|
+
31 19 1338 20 31 20 1338 26
|
15
|
-
```
|
70
|
+
```
|
16
|
-
|
71
|
+
|
17
|
-
### 該当のソースコード
|
72
|
+
### 該当のソースコード
|
18
73
|
|
19
74
|
```c
|
75
|
+
#include <stdio.h>
|
76
|
+
#include <stdlib.h>
|
77
|
+
|
78
|
+
#define N 256 //1行の最大文字数(1バイト)
|
79
|
+
|
20
80
|
int main(void) {
|
21
81
|
|
22
82
|
FILE *fp; // FILE型構造体
|
@@ -26,12 +86,47 @@
|
|
26
86
|
float a3;
|
27
87
|
int f1,f2,f3,f4,f5,f6,f7,f8;
|
28
88
|
|
89
|
+
//結果をファイルに出力
|
90
|
+
FILE *outputfile; // 出力ストリーム
|
91
|
+
outputfile = fopen("in_p.dat", "w"); // ファイルを書き込み用にオープン(開く)
|
92
|
+
if (outputfile == NULL) { // オープンに失敗した場合
|
93
|
+
printf("cannot open\n"); // エラーメッセージを出して
|
94
|
+
exit(1); // 異常終了
|
95
|
+
}
|
96
|
+
|
97
|
+
fp = fopen(fname, "r"); // ファイルを開く。失敗するとNULLを返す。
|
98
|
+
if(fp == NULL) {
|
99
|
+
printf("%s file not open!\n", fname);
|
100
|
+
return -1;
|
101
|
+
}
|
102
|
+
|
103
|
+
//1行目の読み取り
|
104
|
+
fgets(youso, N, fp); //1行のみ読み取り
|
105
|
+
sscanf(youso, "%d %d %d %d %f", &x,&y,&a1,&a2,&a3); //なぜか最後の数値だけfloat型でないとちゃんと出力されない
|
106
|
+
fprintf(outputfile,"%d %d %d %d %0.f\n", x,y,a1,a2,a3); //表示
|
107
|
+
//printf("%s", youso);
|
108
|
+
|
109
|
+
//要素の読み取り
|
110
|
+
int setten[y-1][3]; //各要素が使う節点番号を格納する配列;setten[0]には要素番号1の要素が使う節点を格納
|
111
|
+
//要素数が偶数か奇数かによって場合分け
|
29
|
-
if (y%2==
|
112
|
+
if (y%2==0){ //偶数の時
|
30
113
|
for(int i=0;i<y/2;i++){ //要素数/2の回数だけ行単位で読み取る
|
31
114
|
fgets(youso, N, fp); //1行のみ読み取り
|
32
115
|
int s = 2*i;
|
33
116
|
int t = 2*i+1;
|
34
|
-
|
117
|
+
//配列に格納
|
118
|
+
sscanf(youso, "%d %d %d %d %d %d %d %d", &setten[s][0],&setten[s][1],&setten[s][2],&setten[s][3],&setten[t][0],&setten[t][1],&setten[t][2],&setten[t][3]);
|
119
|
+
//表示
|
120
|
+
fprintf(outputfile,"%d %d %d %d %d %d %d %d\n", setten[s][0],setten[s][1],setten[s][2],setten[s][3],setten[t][0],setten[t][1],setten[t][2],setten[t][3]);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
if (y%2==1){ //奇数の時
|
124
|
+
for(int i=0;i<y/2;i++){ //要素数/2の回数だけ行単位で読み取る
|
125
|
+
fgets(youso, N, fp); //1行のみ読み取り
|
126
|
+
int s = 2*i;
|
127
|
+
int t = 2*i+1;
|
128
|
+
|
129
|
+
/*
|
35
130
|
sscanf(youso, "%d %d %d %d %d %d %d %d", &f1,&f2,&f3,&f4,&f5,&f6,&f7,&f8);
|
36
131
|
|
37
132
|
int tmp1[] = {f1, f2, f3, f4};
|
@@ -45,6 +140,97 @@
|
|
45
140
|
|
46
141
|
printf("%d %d %d %d %d %d %d %d\n", setten[s][0],setten[s][1],setten[s][2],setten[s][3],setten[t][0],setten[t][1],setten[t][2],setten[t][3]);
|
47
142
|
|
143
|
+
*/
|
144
|
+
|
145
|
+
sscanf(youso, "%d %d %d %d %d %d %d %d", &setten[s][0],&setten[s][1],&setten[s][2],&setten[s][3],&setten[t][0],&setten[t][1],&setten[t][2],&setten[t][3]);
|
146
|
+
//fprintf(outputfile,"%d %d %d %d %d %d %d %d\n", setten[s][0],setten[s][1],setten[s][2],setten[s][3],setten[t][0],setten[t][1],setten[t][2],setten[t][3]);
|
147
|
+
}
|
148
|
+
//残った最後の一行
|
149
|
+
fgets(youso, N, fp);
|
150
|
+
sscanf(youso, "%d %d %d %d", &setten[y-1][0],&setten[y-1][1],&setten[y-1][2],&setten[y-1][3]);
|
151
|
+
fprintf(outputfile,"%d %d %d %d\n", setten[y-1][0],setten[y-1][1],setten[y-1][2],setten[y-1][3]);
|
152
|
+
}
|
153
|
+
|
154
|
+
//節点座標の読み取り
|
155
|
+
double zahyou[x][2]; //節点のx,y,z座標を格納する配列
|
156
|
+
for(int i=0;i<x;i++){ //節点数の回数だけ行単位で読み取る
|
157
|
+
|
158
|
+
fgets(youso, N, fp); //1行のみ読み取り
|
159
|
+
sscanf(youso, "%lf %lf %lf", &zahyou[i][0],&zahyou[i][1],&zahyou[i][2]);
|
160
|
+
fprintf(outputfile,"%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
161
|
+
|
162
|
+
}
|
163
|
+
|
164
|
+
//printf("%f %f %f\n", zahyou[0][0],zahyou[0][1],zahyou[0][2]);
|
165
|
+
|
166
|
+
for(int i=0;i<x;i++){
|
167
|
+
//fprintf(outputfile,"%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
168
|
+
}
|
169
|
+
|
170
|
+
|
171
|
+
//使われていない節点の座標を表す行を削除したい
|
172
|
+
|
173
|
+
//新しい配列において使われている節点の節点番号に該当する箇所に1を格納
|
174
|
+
//使われていない節点の節点番号に該当する配列には0を格納
|
175
|
+
|
176
|
+
int bangou[x-1]; //新しい配列
|
177
|
+
int s=0;
|
178
|
+
int i,j;
|
179
|
+
//使われている節点の節点番号に該当する箇所に1を格納
|
180
|
+
for (i=0;i<y;i++){
|
181
|
+
for (j=0;j<3;j++){
|
182
|
+
s = setten[i][j];
|
183
|
+
bangou[s-1]=1;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
//使われていない節点の節点番号に該当する配列には0を格納
|
187
|
+
for (i=0;i<x;i++){
|
188
|
+
if (bangou[i]!=1){
|
189
|
+
bangou[i]=0;
|
190
|
+
}
|
191
|
+
}
|
192
|
+
/*
|
193
|
+
//表示
|
194
|
+
for (i=0;i<x;i++){
|
195
|
+
printf("%d\n", bangou[i]);
|
196
|
+
}
|
197
|
+
*/
|
198
|
+
/*
|
199
|
+
//使われていない節点の座標を格納した配列に0を格納
|
200
|
+
for (i=0;i<x;i++){
|
201
|
+
if (bangou[i]==0){
|
202
|
+
zahyou[i][0] = 0;
|
203
|
+
zahyou[i][1] = 0;
|
204
|
+
zahyou[i][2] = 0;
|
205
|
+
}
|
206
|
+
//printf("%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]); //表示
|
207
|
+
|
208
|
+
}
|
209
|
+
|
210
|
+
*/
|
211
|
+
|
212
|
+
/*
|
213
|
+
//使われていない節点の座標が書かれた行を削除して表示
|
214
|
+
for (i=0;i<x;i++){
|
215
|
+
if (zahyou[i][0]!=0&&zahyou[i][1]!=0&&zahyou[i][2]!=0){
|
216
|
+
printf("%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
*/
|
220
|
+
|
221
|
+
|
222
|
+
for (i=0;i<x;i++){
|
223
|
+
if (bangou[i]==1){
|
224
|
+
fprintf(outputfile,"%f %f %f\n", zahyou[i][0],zahyou[i][1],zahyou[i][2]);
|
225
|
+
}
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
fclose(fp); // ファイルを閉じる
|
230
|
+
|
231
|
+
fclose(outputfile); // ファイルをクローズ(閉じる)
|
232
|
+
return 0;
|
233
|
+
}
|
48
234
|
```
|
49
235
|
|
50
236
|
### 実行結果(該当箇所のみ)
|