質問編集履歴

3

コード修正と実行結果

2017/09/24 06:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,205 +2,187 @@
2
2
 
3
3
  コンパイルはできる状態です。コードの下に実行結果を張り付けています。
4
4
 
5
- よろしくおねがいいたします。実行時間時間の短い順に表示されない。
5
+ 実行時間時間の短い順に表示されない。
6
6
 
7
7
  ```
8
8
 
9
9
  コード
10
10
 
11
- /* qsort を使って構造体の配列をソートするプログラム例です。
12
-
13
- 構造体配列time_t を実行時間の短い順にソートします。
14
-
15
- */
16
-
17
-
18
-
19
11
  #include <stdio.h>
20
12
 
21
13
  #include <stdlib.h>
22
14
 
15
+
16
+
23
- #define MAXCNT 100
17
+ #define NDATA ((sizeof lst)/(sizeof(DATA_TIME)))
24
18
 
25
19
 
26
20
 
27
- typedef struct{
21
+ typedef struct //
28
22
 
29
- int tm_year;
23
+ {
30
24
 
31
- int tm_mon;
25
+ int year; //
32
26
 
33
- int tm_mday;
27
+ int mon; //
34
28
 
35
- int tm_hour;
29
+ int mday; //
36
30
 
37
- int tm_min;
31
+ int hour; //
38
32
 
39
- int tm_sec;
33
+ int min; //
40
34
 
41
- double score;
35
+ int sec;
42
36
 
37
+ double score;
38
+
43
- }tim_t;
39
+ }DATA_TIME;
44
40
 
45
41
 
46
42
 
47
- // --------------- 比較用の関数 cmp -------------------
43
+ // --------------- 比較用の関数 cmp cmp -------------------
48
44
 
49
- int cmp( const void *p, const void *q ) {
45
+ int cmpptr( const void *p, const void *q ) {
50
46
 
51
- return ((tim_t*)p)->score - ((tim_t*)q)->score;
47
+ return (*(DATA_TIME**)p)->score - (*(DATA_TIME**)q)->score;
48
+
49
+ }
50
+
51
+ // ----------------------------------------------------
52
+
53
+
54
+
55
+ int main()
56
+
57
+ {
58
+
59
+ DATA_TIME lst[]={{2017, 9,16, 8,18,10,10.6},
60
+
61
+ {2015,12, 7,19,59, 8, 8.0},
62
+
63
+ {2016, 1, 3, 1, 9,11, 7.5},
64
+
65
+ {2016, 4, 5,19,16, 8, 9.0},
66
+
67
+ {2015, 6, 4,19, 2,44, 7.5},
68
+
69
+ {2016, 8, 7,22,31,52, 9.3},
70
+
71
+ {2014, 1, 4,23,43,50,10.2},
72
+
73
+ {2016, 5,31,21, 9,53, 7.0},
74
+
75
+ {2014, 2,12,28,31,49,13.0},
76
+
77
+ {2016, 2,28, 2,27,20, 7.8},
78
+
79
+ {2015, 5, 2,16,43,32, 6.3},
80
+
81
+ {2017, 9,14,10,21,18, 6.0},
82
+
83
+ {2017, 9,16, 8,18,10, 8.6}};
84
+
85
+
86
+
87
+ int i;
88
+
89
+
90
+
91
+ DATA_TIME *plst[NDATA];
92
+
93
+
94
+
95
+ // ポインタの配列 plst に構造体配列のアドレスを代入
96
+
97
+ for(i=0; i<NDATA; i++) plst[i]=&lst[i];
98
+
99
+
100
+
101
+ // 実行時間の短い順にソート
102
+
103
+ qsort(plst, NDATA, sizeof(DATA_TIME*), cmpptr );
104
+
105
+
106
+
107
+ //並べ替え後の内容を表示
108
+
109
+ for( i=0; i<NDATA; i++ )
110
+
111
+ printf(" %d年 %d月 %d日 %d時 %d分 %d秒 実行時間:%.1f秒\n\n"
112
+
113
+ ,plst[i]->year, plst[i]->mon, plst[i]->mday,
114
+
115
+ plst[i]->hour, plst[i]->min, plst[i]->sec, plst[i]->score);
52
116
 
53
117
  }
54
118
 
55
119
 
56
120
 
57
- int main(void)
121
+ /*実行結果
58
122
 
59
- {
60
-
61
- tim_t data_t[]={{2017,9,16,8,18,10,10.6},
123
+ C:\MinGW\users\chap09\kadai>gcc -I. -o narabekae2 narabekae2.c -Wall
62
-
63
- {2015,12,7,19,59,8,8.0},
64
-
65
- {2016,1,3,1,9,11,7.5},
66
-
67
- {2016,4,5,19,16,8,9.0},
68
-
69
- {2015,6,4,19,2,44,7.5},
70
-
71
- {2016,8,7,22,31,52,9.3},
72
-
73
- {2014,1,4,23,43,50,10.2},
74
-
75
- {2016,5,31,21,9,53,7.0},
76
-
77
- {2014,2,12,28,31,49,13.0},
78
-
79
- {2016,2,28,2,27,20,7.8},
80
-
81
- {2015,5,2,16,43,32,6.3},
82
-
83
- {2017,9,14,10,21,18,6.0},
84
-
85
- {2017,9,16,8,18,10,8.6}};
86
-
87
- int i;
88
124
 
89
125
 
90
126
 
91
- int n=sizeof(data_t)/sizeof(tim_t);
127
+ C:\MinGW\users\chap09\kadai> narabekae2
92
128
 
93
-
94
-
95
- qsort( data_t, n, sizeof(tim_t), cmp );
96
-
97
-
98
-
99
- printf( "実行時間の短い順にソ\ートします。\n");
100
-
101
- for(i=0; i<n; i++){
102
-
103
- printf("%4d%2d%2d%2d%2d%2d\n %2.1f\n\n"
129
+ 201791410時 2118実行時間:6.0
104
-
105
- , data_t[i].tm_year,data_t[i].tm_mon,data_t[i].tm_mday,data_t[i].tm_hour,data_t[i].tm_min,data_t[i].tm_sec,data_t[i].score );
106
-
107
- }
108
-
109
- }
110
-
111
- /* 実行結果
112
130
 
113
131
 
114
132
 
115
- C:\MinGW\users\chap09\kadai>gcc -I. -o narabekae3 narabekae3.c -Wall
133
+ 2015年 5月 2日 16時 43 32秒 実行時間:6.3秒
116
134
 
117
135
 
118
136
 
119
- C:\MinGW\users\chap09\kadai>narabekae3
120
-
121
- 実行時間の短い順にソートします。
122
-
123
- 2017 914日 1021分 18
137
+ 201613日 1時 9分 11 実行時間:7.5秒
124
-
125
- 6.0秒
126
138
 
127
139
 
128
140
 
129
- 2015年 5 2日 164332
141
+ 2015年 127日 19598 実行時間:8.0秒
130
-
131
- 6.3秒
132
142
 
133
143
 
134
144
 
135
- 2016 1 3 1時 911
145
+ 201564日 19244 実行時間:7.5秒 ・・・おかしい
136
-
137
- 7.5秒
138
146
 
139
147
 
140
148
 
141
- 201512月 71959分 8秒
149
+ 2016年 2月 2822720秒 実行時間:7.8秒 ・・・おかしい
142
-
143
- 8.0秒
144
150
 
145
151
 
146
152
 
147
- 2015 6 4日 19 244
153
+ 201653121時 953 実行時間:7.0秒 ・・・おかしい
148
-
149
- 7.5秒
150
154
 
151
155
 
152
156
 
153
- 2016年 228 22720秒
157
+ 2016年 4519168秒 実行時間:9.0秒
154
-
155
- 7.8秒
156
158
 
157
159
 
158
160
 
159
- 2016年 531日 21 9分 53秒
161
+ 2016年 87日 2231分 52秒 実行時間:9.3秒
160
-
161
- 7.0秒
162
162
 
163
163
 
164
164
 
165
- 2016年 4月 519168
165
+ 20141月 4日 234350秒 実行時間:10.2
166
-
167
- 9.0秒
168
166
 
169
167
 
170
168
 
171
- 2016 8 72231分 52
169
+ 20179168時 1810 実行時間:8.6秒 ・・・おかしい
172
-
173
- 9.3秒
174
170
 
175
171
 
176
172
 
177
- 2014年 1月 4234350秒
173
+ 20179月 1681810秒 実行時間:10.6秒
178
-
179
- 10.2秒
180
174
 
181
175
 
182
176
 
183
- 2017年 9月 16日 8時 18分 10秒
184
-
185
- 8.6秒
186
-
187
-
188
-
189
- 2017年 9月 16日 8時 18分 10秒
190
-
191
- 10.6秒
192
-
193
-
194
-
195
- 2014年 2月 12日 28時 31分 49秒
177
+ 2014年 2月 12日 28時 31分 49秒 実行時間:13.0秒
196
-
197
- 13.0秒
198
178
 
199
179
 
200
180
 
201
181
 
202
182
 
203
183
  C:\MinGW\users\chap09\kadai>
184
+
185
+
204
186
 
205
187
  */
206
188
 

2

コードの変更、結果の変更

2017/09/24 06:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,304 +1,200 @@
1
- 実行日時、実行時間を表示して、実行時間の短い順に表示したいのですが、
1
+ 実行日時、実行時間を、実行時間の短い順に表示したいのですが、
2
2
 
3
3
  コンパイルはできる状態です。コードの下に実行結果を張り付けています。
4
4
 
5
- よろしくおねがいいたします。実行時間時間の短い順表示されない。
5
+ よろしくおねがいいたします。実行時間時間の短い順表示されない。
6
6
 
7
7
  ```
8
8
 
9
9
  コード
10
10
 
11
- /* "LACKNUM.DAT"から実行日時とそ時の実行時間読み込ん表示
11
+ /* qsort を使って構造体配列ソートするプログラム例です。
12
-
12
+
13
- そのあと実行時間時間の短い順に並べ替えて表示 */
13
+ 構造体配列time_t 実行時間の短い順にソートします。
14
+
15
+ */
16
+
17
+
14
18
 
15
19
  #include <stdio.h>
16
20
 
17
21
  #include <stdlib.h>
18
22
 
19
- #include <time.h>
20
-
21
-
22
-
23
23
  #define MAXCNT 100
24
24
 
25
- char dtfile[] = "LACKNUM.DAT";
25
+
26
-
27
- char dtfile2[] = "LACKNUM2.DAT"; // 最高記録用のファイル
26
+
28
-
29
-
30
-
31
- typedef struct{ // 構造体の宣言
27
+ typedef struct{
32
-
28
+
33
- int tm_year;
29
+ int tm_year;
34
-
30
+
35
- int tm_mon;
31
+ int tm_mon;
36
-
32
+
37
- int tm_mday;
33
+ int tm_mday;
38
-
34
+
39
- int tm_hour;
35
+ int tm_hour;
40
-
36
+
41
- int tm_min;
37
+ int tm_min;
42
-
38
+
43
- int tm_sec;
39
+ int tm_sec;
44
-
40
+
45
- double score;
41
+ double score;
46
-
42
+
47
- }SCORE_DATA;
43
+ }tim_t;
48
-
49
-
50
-
44
+
45
+
46
+
51
- // 比較関数
47
+ // --------------- 比較用の関数 cmp -------------------
52
-
48
+
53
- int cmpptr( const void *p, const void *q ) {
49
+ int cmp( const void *p, const void *q ) {
54
-
50
+
55
- return (*(SCORE_DATA**)p)->score - (*(SCORE_DATA**)q)->score;
51
+ return ((tim_t*)p)->score - ((tim_t*)q)->score;
56
52
 
57
53
  }
58
54
 
59
55
 
60
56
 
61
- double data_narabekae(int* count,double* p,double* q)
57
+ int main(void)
62
58
 
63
59
  {
64
60
 
61
+ tim_t data_t[]={{2017,9,16,8,18,10,10.6},
62
+
63
+ {2015,12,7,19,59,8,8.0},
64
+
65
+ {2016,1,3,1,9,11,7.5},
66
+
67
+ {2016,4,5,19,16,8,9.0},
68
+
69
+ {2015,6,4,19,2,44,7.5},
70
+
71
+ {2016,8,7,22,31,52,9.3},
72
+
73
+ {2014,1,4,23,43,50,10.2},
74
+
75
+ {2016,5,31,21,9,53,7.0},
76
+
77
+ {2014,2,12,28,31,49,13.0},
78
+
79
+ {2016,2,28,2,27,20,7.8},
80
+
81
+ {2015,5,2,16,43,32,6.3},
82
+
83
+ {2017,9,14,10,21,18,6.0},
84
+
65
- FILE *fp;
85
+ {2017,9,16,8,18,10,8.6}};
66
-
86
+
67
- int i;
87
+ int i;
68
-
69
-
70
-
71
- // double bestscore;
88
+
72
-
73
-
74
-
75
- SCORE_DATA local[MAXCNT]; // 構造体の宣言
89
+
76
-
77
-
78
-
79
- if((fp=fopen(dtfile, "rb"))==NULL ){
90
+
80
-
81
- printf( "ファイルがオープンできません\n" );
82
-
83
- exit( 1 );
84
-
85
- }
86
-
87
- for(i = 0; i<MAXCNT; i++) {
88
-
89
- if(fscanf(fp,"%d %d %d %d %d %d %lf\n" // 構造体配列への読み込み
90
-
91
- , &local[i].tm_year,&local[i].tm_mon, &local[i].tm_mday,
92
-
93
- &local[i].tm_hour, &local[i].tm_min,&local[i].tm_sec,&local[i].score )!= 7) break;
94
-
95
- (*count)++;
96
-
97
- }
98
-
99
- printf("\ncount0:\n\n",*count);
91
+ int n=sizeof(data_t)/sizeof(tim_t);
100
92
 
101
93
 
102
94
 
103
- // qsort( local, *count, sizeof(SCORE_DATA*), cmpptr );
95
+ qsort( data_t, n, sizeof(tim_t), cmp );
104
96
 
105
97
 
106
98
 
107
- printf("\n過去の履歴デ\n-------------------------- \n");
99
+ printf( "実行時間の短い順にソ\ートします。\n");
108
-
109
-
110
-
100
+
111
- for(i=0;i<*count;i++){
101
+ for(i=0; i<n; i++){
112
-
102
+
113
- printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n\n"
103
+ printf("%4d年 %2d月 %2d日 %2d時 %2d分 %2d秒\n %2.1f\n\n"
114
-
115
- ,local[i].tm_year, local[i].tm_mon, local[i].tm_mday,
104
+
116
-
117
- local[i].tm_hour,local[i].tm_min,local[i].tm_sec ,local[i].score);
105
+ , data_t[i].tm_year,data_t[i].tm_mon,data_t[i].tm_mday,data_t[i].tm_hour,data_t[i].tm_min,data_t[i].tm_sec,data_t[i].score );
118
-
106
+
119
- }
107
+ }
120
-
121
- fflush(stdout);
122
-
123
- fclose(fp);
124
-
125
- printf("count1は%d\n\n", *count);
126
-
127
- return *count;
128
108
 
129
109
  }
130
110
 
131
-
132
-
133
- int main(void)
134
-
135
- {
136
-
137
- FILE *fp;
138
-
139
- int i;
140
-
141
- int count=0;
142
-
143
- double p,q;
144
-
145
- // double bestscore;
146
-
147
-
148
-
149
- data_narabekae(&count,&p,&q);
150
-
151
-
152
-
153
- /* if((fp=fopen( dtfile2, "wb" ))==NULL ){
154
-
155
- printf( "ファイルがオープンできません\n" );
156
-
157
- exit( 1 );
158
-
159
- }
160
-
161
-
162
-
163
- for(i=0;i<10;i++){
164
-
165
- if(fscanf( fp, "%d %d %d %d %d %d %lf\n"
166
-
167
- ,&local[i].tm_year+1900, &local[i].tm_mon+1, &local[i].tm_mday,
168
-
169
- &local[i].tm_hour,&local[i].tm_min,&local[i].tm_sec ,&local[i].score)!=7)break;
170
-
171
- }
172
-
173
-
174
-
175
- if((fp=fopen( dtfile2, "rb" ))==NULL ){
176
-
177
- printf( "ファイルがオープンできません\n" );
178
-
179
- exit( 1 );
180
-
181
- }
182
-
183
- for(i=0;i<10;i++){
184
-
185
- printf("%d年 %d月 %d%d%d%d \n所要時間(score)は%.1f\n\n"
186
-
187
- ,local[i].tm_year+1900, local[i].tm_mon+1, local[i].tm_mday,
188
-
189
- local[i].tm_hour,local[i].tm_min,local[i].tm_sec );
190
-
191
-
192
-
193
- printf("最短所要時間(score)は%.1f", local[0].score);
194
-
195
-
196
-
197
- } */
198
-
199
- fclose(fp);
200
-
201
- return 0;
202
-
203
- }
204
-
205
-
206
-
207
- /*実際の結果
208
-
209
-
210
-
211
- C:\MinGW\users\chap09\kadai>gcc -I. -o narabekae narabekae.c pdcurses.a
212
-
213
-
214
-
215
- C:\MinGW\users\chap09\kadai>narabekae
216
-
217
-
218
-
219
- 過去の履歴データ
220
-
221
- --------------------------
222
-
223
- 2017年 9月 16日 8時 52分 18秒
224
-
225
- 所要時間(score)は10.6
226
-
227
-
228
-
229
- 2015年 12月 7日 19時 59分 8秒
230
-
231
- 所要時間(score)は8.0
232
-
233
-
234
-
235
- 2016年 1月 4日 1時 9分 11秒
236
-
237
- 所要時間(score)は7.5
238
-
239
-
240
-
241
- 2016年 1月 4日 19時 16分 8秒
242
-
243
- 所要時間(score)は9.0
244
-
245
-
246
-
247
- 2016年 1月 4日 19時 2分 44秒
248
-
249
- 所要時間(score)は7.5
250
-
251
-
252
-
253
- 2016年 1月 4日 22時 31分 52秒
254
-
255
- 所要時間(score)は9.3
256
-
257
-
258
-
259
- 2016年 1月 4日 23時 33分 50秒
260
-
261
- 所要時間(score)は10.2
262
-
263
-
264
-
265
- 2016年 1月 31日 21時 9分 53秒
266
-
267
- 所要時間(score)は7.0
268
-
269
-
270
-
271
- 2016年 2月 2日 8時 49分 9秒
272
-
273
- 所要時間(score)は9.4
274
-
275
-
276
-
277
- 2016年 2月 27日 12時 45分 26秒
278
-
279
- 所要時間(score)は13.0
280
-
281
-
282
-
283
- 2016年 2月 28日 2時 27分 20秒
284
-
285
- 所要時間(score)は7.4
286
-
287
-
288
-
289
- 2016年 5月 2日 16時 43分 32秒
290
-
291
- 所要時間(score)は6.3
292
-
293
-
294
-
295
- 2017年 9月 14日 10時 21分 18秒
296
-
297
- 所要時間(score)は6.0
298
-
299
-
300
-
301
- count1は13
111
+ /* 実行結果
112
+
113
+
114
+
115
+ C:\MinGW\users\chap09\kadai>gcc -I. -o narabekae3 narabekae3.c -Wall
116
+
117
+
118
+
119
+ C:\MinGW\users\chap09\kadai>narabekae3
120
+
121
+ 実行時間の短い順にソートします。
122
+
123
+ 2017年 9月 14日 10時 21分 18秒
124
+
125
+ 6.0秒
126
+
127
+
128
+
129
+ 2015年 5月 2日 16時 43分 32秒
130
+
131
+ 6.3秒
132
+
133
+
134
+
135
+ 2016年 1月 3日 1時 9分 11秒
136
+
137
+ 7.5秒
138
+
139
+
140
+
141
+ 2015年 12月 7日 19時 59分 8秒
142
+
143
+ 8.0
144
+
145
+
146
+
147
+ 2015年 6月 4日 19 2分 44秒
148
+
149
+ 7.5秒
150
+
151
+
152
+
153
+ 2016年 2月 28日 2時 27分 20秒
154
+
155
+ 7.8秒
156
+
157
+
158
+
159
+ 2016年 5月 31日 21時 9分 53秒
160
+
161
+ 7.0秒
162
+
163
+
164
+
165
+ 2016年 4月 51916 8
166
+
167
+ 9.0
168
+
169
+
170
+
171
+ 2016年 8月 7日 22時 31分 52秒
172
+
173
+ 9.3秒
174
+
175
+
176
+
177
+ 2014年 1月 4日 23時 43分 50秒
178
+
179
+ 10.2秒
180
+
181
+
182
+
183
+ 2017年 9月 16日 8時 18分 10秒
184
+
185
+ 8.6秒
186
+
187
+
188
+
189
+ 2017年 9月 16日 8時 18分 10秒
190
+
191
+ 10.6秒
192
+
193
+
194
+
195
+ 2014年 2月 12日 28時 31分 49
196
+
197
+ 13.0秒
302
198
 
303
199
 
304
200
 
@@ -306,107 +202,11 @@
306
202
 
307
203
  C:\MinGW\users\chap09\kadai>
308
204
 
309
-
310
-
311
- 実行結果(望む結果)
312
-
313
-
314
-
315
- C:\MinGW\users\chap09\kadai>gcc -I. -o test6 test6.c -Wall
316
-
317
-
318
-
319
- C:\MinGW\users\chap09\kadai>test6
320
-
321
- count0:13
322
-
323
-
324
-
325
- 2017年 9月 16日 8時 52分 18秒
326
-
327
- 所要時間(score)は10.6
328
-
329
-
330
-
331
- 2015年 12月 7日 19時 59分 8秒
332
-
333
- 所要時間(score)は8.0
334
-
335
-
336
-
337
- 2016年 1月 4日 1時 9分 11秒
338
-
339
- 所要時間(score)は7.5
340
-
341
-
342
-
343
- 2016年 1月 4日 19時 16分 8秒
344
-
345
- 所要時間(score)は9.0
346
-
347
-
348
-
349
- 2016年 1月 4日 19時 2分 44秒
350
-
351
- 所要時間(score)は7.5
352
-
353
-
354
-
355
- 2016年 1月 4日 22時 31分 52秒
356
-
357
- 所要時間(score)は9.3
358
-
359
-
360
-
361
- 2016年 1月 4日 23時 33分 50秒
362
-
363
- 所要時間(score)は10.2
364
-
365
-
366
-
367
- 2016年 1月 31日 21時 9分 53秒
368
-
369
- 所要時間(score)は7.0
370
-
371
-
372
-
373
- 2016年 2月 2日 8時 49分 9秒
374
-
375
- 所要時間(score)は9.4
376
-
377
-
378
-
379
- 2016年 2月 27日 12時 45分 26秒
380
-
381
- 所要時間(score)は13.0
382
-
383
-
384
-
385
- 2016年 2月 28日 2時 27分 20秒
386
-
387
- 所要時間(score)は7.4
388
-
389
-
390
-
391
- 2016年 5月 2日 16時 43分 32秒
392
-
393
- 所要時間(score)は6.3
394
-
395
-
396
-
397
- 2017年 9月 14日 10時 21分 18秒
398
-
399
- 所要時間(score)は6.0
400
-
401
-
402
-
403
- count3:13
404
-
405
-
406
-
407
- 後短い時間順省略
205
+ */
408
-
409
- C:\MinGW\users\chap09\kadai>
206
+
207
+
208
+
209
+
410
210
 
411
211
 
412
212
 

1

コードの修正と実行結果の変更

2017/09/24 04:32

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,19 +2,15 @@
2
2
 
3
3
  コンパイルはできる状態です。コードの下に実行結果を張り付けています。
4
4
 
5
- よろしくおねがいいたします。
5
+ よろしくおねがいいたします。実行時間時間の短い順が表示されない。
6
6
 
7
7
  ```
8
8
 
9
9
  コード
10
10
 
11
- /* 構造体の配列を宣言して、ファイルからデータを読み込むサンプルプログラムです。
12
-
13
- "LACKNUM.DAT"から実行日時とその時の実行時間を読み込んで表示する。
11
+ /* "LACKNUM.DAT"から実行日時とその時の実行時間を読み込んで表示する。
14
-
12
+
15
- そのあと実行時間時間の短い順に並べ替えて表示する。
13
+ そのあと実行時間時間の短い順に並べ替えて表示する。 */
16
-
17
- */
18
14
 
19
15
  #include <stdio.h>
20
16
 
@@ -28,11 +24,11 @@
28
24
 
29
25
  char dtfile[] = "LACKNUM.DAT";
30
26
 
31
- char dtfile2[] = "LACKNUM2.DAT";// 最高記録用のファイル
27
+ char dtfile2[] = "LACKNUM2.DAT"; // 最高記録用のファイル
32
-
33
-
34
-
28
+
29
+
30
+
35
- typedef struct{ // 構造体の宣言
31
+ typedef struct{ // 構造体の宣言
36
32
 
37
33
  int tm_year;
38
34
 
@@ -44,27 +40,15 @@
44
40
 
45
41
  int tm_min;
46
42
 
47
- int tm_sec;
43
+ int tm_sec;
48
-
49
- }TIME_DATA;
44
+
50
-
51
-
52
-
53
- TIME_DATA local[MAXCNT];
54
-
55
-
56
-
57
- typedef struct { // 構造体の宣言
58
-
59
- TIME_DATA local;
60
-
61
- double score;
45
+ double score;
62
-
46
+
63
- } SCORE_DATA;
47
+ }SCORE_DATA;
64
-
65
-
66
-
48
+
49
+
50
+
67
- // 比較用の関数 cmp
51
+ // 比較関数
68
52
 
69
53
  int cmpptr( const void *p, const void *q ) {
70
54
 
@@ -74,208 +58,266 @@
74
58
 
75
59
 
76
60
 
77
- double data_narabekae(double* p,double* q)
61
+ double data_narabekae(int* count,double* p,double* q)
78
62
 
79
63
  {
80
64
 
65
+ FILE *fp;
66
+
67
+ int i;
68
+
69
+
70
+
71
+ // double bestscore;
72
+
73
+
74
+
75
+ SCORE_DATA local[MAXCNT]; // 構造体の宣言
76
+
77
+
78
+
79
+ if((fp=fopen(dtfile, "rb"))==NULL ){
80
+
81
+ printf( "ファイルがオープンできません\n" );
82
+
83
+ exit( 1 );
84
+
85
+ }
86
+
87
+ for(i = 0; i<MAXCNT; i++) {
88
+
89
+ if(fscanf(fp,"%d %d %d %d %d %d %lf\n" // 構造体配列への読み込み
90
+
91
+ , &local[i].tm_year,&local[i].tm_mon, &local[i].tm_mday,
92
+
93
+ &local[i].tm_hour, &local[i].tm_min,&local[i].tm_sec,&local[i].score )!= 7) break;
94
+
95
+ (*count)++;
96
+
97
+ }
98
+
99
+ printf("\ncount0:\n\n",*count);
100
+
101
+
102
+
103
+ // qsort( local, *count, sizeof(SCORE_DATA*), cmpptr );
104
+
105
+
106
+
107
+ printf("\n過去の履歴データ\n-------------------------- \n");
108
+
109
+
110
+
111
+ for(i=0;i<*count;i++){
112
+
113
+ printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n\n"
114
+
115
+ ,local[i].tm_year, local[i].tm_mon, local[i].tm_mday,
116
+
117
+ local[i].tm_hour,local[i].tm_min,local[i].tm_sec ,local[i].score);
118
+
119
+ }
120
+
121
+ fflush(stdout);
122
+
123
+ fclose(fp);
124
+
125
+ printf("count1は%d\n\n", *count);
126
+
127
+ return *count;
128
+
129
+ }
130
+
131
+
132
+
133
+ int main(void)
134
+
135
+ {
136
+
81
137
  FILE *fp;
82
138
 
83
139
  int i;
84
140
 
85
- int j=0;
86
-
87
141
  int count=0;
88
142
 
143
+ double p,q;
144
+
89
- double score; //これまでの履歴の所要時間
145
+ // double bestscore;
90
-
91
- double bestscore; //これまでの最短所要時間
92
146
 
93
147
 
94
148
 
149
+ data_narabekae(&count,&p,&q);
150
+
95
151
 
96
152
 
97
- SCORE_DATA stars[MAXCNT]; // 構造体配列の宣言
98
-
99
-
100
-
101
- if((fp=fopen( dtfile, "rb" ))==NULL ){
153
+ /* if((fp=fopen( dtfile2, "wb" ))==NULL ){
102
-
154
+
103
- printf( "ファイルがオープンできません\n" );
155
+ printf( "ファイルがオープンできません\n" );
104
-
156
+
105
- exit( 1 );
157
+ exit( 1 );
106
158
 
107
159
  }
108
160
 
161
+
162
+
109
- printf("count0:%d\n\n",count);
163
+ for(i=0;i<10;i++){
110
-
111
-
112
-
113
- while((i = fread(&stars, sizeof(struct tm), 1, fp)) > 0 ){
164
+
114
-
115
- printf("%d %d %d %d %d %d\n",
165
+ if(fscanf( fp, "%d %d %d %d %d %d %lf\n"
116
-
117
- local->tm_year + 1900, local->tm_mon + 1,
166
+
118
-
119
- local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec);
167
+ ,&local[i].tm_year+1900, &local[i].tm_mon+1, &local[i].tm_mday,
120
-
121
- fread(&score, sizeof(double), 1, fp);
168
+
122
-
123
- printf("得点(所要時間)は%.1f秒\n\n",stars-> score);
169
+ &local[i].tm_hour,&local[i].tm_min,&local[i].tm_sec ,&local[i].score)!=7)break;
124
-
125
-
126
-
127
- // SCORE_DATA *stars[MAXCNT]={0}; // 構造体配列の宣言
170
+
128
-
129
-
130
-
131
- local[j].tm_year=local->tm_year;
132
-
133
- local[j].tm_mon=local->tm_mon;
134
-
135
- local[j].tm_mday=local->tm_mday;
136
-
137
- local[j].tm_hour=local->tm_hour;
138
-
139
- local[j].tm_min=local->tm_min;
140
-
141
- local[j].tm_sec=local->tm_sec;
142
-
143
- stars[j].score=stars-> score;
144
-
145
- j++;
171
+ }
146
-
147
- count++;
148
172
 
149
173
 
150
174
 
175
+ if((fp=fopen( dtfile2, "rb" ))==NULL ){
176
+
151
- printf("count1は%d\n\n", count);
177
+ printf( "ファイルがオープンできません\n" );
152
-
153
-
154
-
178
+
155
- SCORE_DATA plst[count];
179
+ exit( 1 );
156
-
157
-
158
-
159
- for(i=0; i<count; i++) plst[i] = stars[j];
180
+
160
-
161
-
162
-
163
- qsort( stars, count, sizeof(SCORE_DATA*), cmpptr );
164
-
165
-
166
-
167
- printf("\n過去のbestten\n-------------------------- \n");
168
-
169
- // 並べ替え後の内容を表示
181
+ }
170
-
182
+
171
- for(i=0;i<10;i++){
183
+ for(i=0;i<10;i++){
172
-
184
+
173
- printf( "%d年 %d月 %d日 %d時 %d分 %d秒 \n"
185
+ printf("%d年 %d月 %d日 %d時 %d分 %d秒 \n所要時間(score)は%.1f\n\n"
174
-
186
+
175
- ,plst[j].local.tm_year+1900, plst[j].local.tm_mon+1, plst[j].local.tm_mday,
187
+ ,local[i].tm_year+1900, local[i].tm_mon+1, local[i].tm_mday,
176
-
188
+
177
- plst[i].local.tm_hour,plst[i].local.tm_min,plst[i].local.tm_sec );
189
+ local[i].tm_hour,local[i].tm_min,local[i].tm_sec );
178
190
 
179
191
 
180
192
 
181
- printf("得点(所要時間 %.1f秒です。\n\n", plst[i].score);
193
+ printf("最短所要時間(score)は%.1f", local[0].score);
182
-
183
- bestscore=plst[0].score;
194
+
184
-
185
- return bestscore;
195
+
186
-
187
- }
196
+
188
-
189
- }
190
-
191
- fflush(stdout);
197
+ } */
192
198
 
193
199
  fclose(fp);
194
200
 
195
- printf("count2は%d\n\n", count);
196
-
197
- return count;
201
+ return 0;
198
202
 
199
203
  }
200
204
 
201
205
 
202
206
 
203
- int main(void)
204
-
205
- {
206
-
207
- int count=0;
208
-
209
- double p,q;
210
-
211
-
212
-
213
- data_narabekae(&p,&q);
214
-
215
-
216
-
217
- printf("count3:%d\n\n", count);
218
-
219
-
220
-
221
- return 0;
222
-
223
- }
224
-
225
-
226
-
227
207
  /*実際の結果
228
208
 
209
+
210
+
211
+ C:\MinGW\users\chap09\kadai>gcc -I. -o narabekae narabekae.c pdcurses.a
212
+
213
+
214
+
215
+ C:\MinGW\users\chap09\kadai>narabekae
216
+
217
+
218
+
219
+ 過去の履歴データ
220
+
221
+ --------------------------
222
+
223
+ 2017年 9月 16日 8時 52分 18秒
224
+
225
+ 所要時間(score)は10.6
226
+
227
+
228
+
229
+ 2015年 12月 7日 19時 59分 8秒
230
+
231
+ 所要時間(score)は8.0
232
+
233
+
234
+
235
+ 2016年 1月 4日 1時 9分 11秒
236
+
237
+ 所要時間(score)は7.5
238
+
239
+
240
+
241
+ 2016年 1月 4日 19時 16分 8秒
242
+
243
+ 所要時間(score)は9.0
244
+
245
+
246
+
247
+ 2016年 1月 4日 19時 2分 44秒
248
+
249
+ 所要時間(score)は7.5
250
+
251
+
252
+
253
+ 2016年 1月 4日 22時 31分 52秒
254
+
255
+ 所要時間(score)は9.3
256
+
257
+
258
+
259
+ 2016年 1月 4日 23時 33分 50秒
260
+
261
+ 所要時間(score)は10.2
262
+
263
+
264
+
265
+ 2016年 1月 31日 21時 9分 53秒
266
+
267
+ 所要時間(score)は7.0
268
+
269
+
270
+
271
+ 2016年 2月 2日 8時 49分 9秒
272
+
273
+ 所要時間(score)は9.4
274
+
275
+
276
+
277
+ 2016年 2月 27日 12時 45分 26秒
278
+
279
+ 所要時間(score)は13.0
280
+
281
+
282
+
283
+ 2016年 2月 28日 2時 27分 20秒
284
+
285
+ 所要時間(score)は7.4
286
+
287
+
288
+
289
+ 2016年 5月 2日 16時 43分 32秒
290
+
291
+ 所要時間(score)は6.3
292
+
293
+
294
+
295
+ 2017年 9月 14日 10時 21分 18秒
296
+
297
+ 所要時間(score)は6.0
298
+
299
+
300
+
301
+ count1は13
302
+
303
+
304
+
305
+
306
+
307
+ C:\MinGW\users\chap09\kadai>
308
+
309
+
310
+
311
+ 実行結果(望む結果)
312
+
313
+
314
+
229
315
  C:\MinGW\users\chap09\kadai>gcc -I. -o test6 test6.c -Wall
230
316
 
231
317
 
232
318
 
233
319
  C:\MinGW\users\chap09\kadai>test6
234
320
 
235
- count0:0
236
-
237
-
238
-
239
- 1900年 1月 0日 0時 0分 0秒
240
-
241
- 得点(所要時間)は0.0秒
242
-
243
-
244
-
245
- count1は1
246
-
247
-
248
-
249
-
250
-
251
- 過去のbestten
252
-
253
- --------------------------
254
-
255
- 1900年 1月 0日 6419076時 0分 1秒
256
-
257
- 得点(所要時間)は 0.0秒です。
258
-
259
-
260
-
261
- count3:0
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
- 実行結果(望む結果)
270
-
271
-
272
-
273
- C:\MinGW\users\chap09\kadai>gcc -I. -o test6 test6.c -Wall
274
-
275
-
276
-
277
- C:\MinGW\users\chap09\kadai>test6
278
-
279
321
  count0:13
280
322
 
281
323