質問編集履歴

3

削除された内容の復元を行いました

2020/02/04 05:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- c言語 並べ替え ソート
1
+ 昇順検査 c言語 コマンドライン
test CHANGED
@@ -1,113 +1,225 @@
1
+ ■やりたい事
2
+
3
+ コマンド行に整数値の列を収めたファイル名が与えられたとき、そのファイル名のファイルが昇順列を収めたものになっているかどうかを判定する。ここで、整数値の列が昇順列であるとは、並んでいる順にだんだんと値が大きくなる(その列の中で隣り合う2つの整数値 x, y が必ず x < y となっている)ことをいう。
4
+
1
- 循環し整数計算し出力に書き出すプログラムですが、いまいち内容がよく分かりません
5
+ 与えられファイル名のファイルの中身が昇順列であるかどうか調べ、その結果を書き出すプログラムを作れ。書出しは、ファイル名に続けて「: 」を書き出し、その後に続けて、昇順列あれば「increasing」、そうでなければ「not increasing」と書き出して、最後に改行ること
2
-
3
- コード自体を書いてみましたが。所何処と間違っていると思われます。
6
+
4
-
5
- 詳しい方細かく教えて下さい宜しくお願いします。
7
+ なお空の列は昇順列
6
-
7
- 追加・削除箇所も教えて下さい。宜しくお願い致します。
8
-
9
-
10
-
11
-
12
8
 
13
9
  ```C
14
10
 
15
11
  #include <stdio.h>
16
12
 
17
-
13
+ #include <stdlib.h>
14
+
18
-
15
+ int main(int argc, char *argv[]){
16
+
17
+
18
+
19
+ FILE *f;
20
+
21
+ f= fopen(argv[1],"r");
22
+
23
+ if( f==NULL ){
24
+
25
+ printf("%s: can't open.\n",argv[1]); exit(-1);
26
+
27
+ }
28
+
29
+ printf("%s: ");
30
+
31
+
32
+
19
- /*値を格納する配列 */
33
+ ・・・ファイル変fに対応するファイルの中身を調べて
34
+
20
-
35
+ ・・・昇順列なら"increasing"、
36
+
37
+ ・・・そうでないなら"not increasing"と書き出す
38
+
39
+
40
+
41
+ fclose(f);
42
+
43
+
44
+
45
+ return 0;
46
+
47
+ }
48
+
49
+ ```
50
+
51
+ やりたい事に則した...の部分を教えて頂きたく。
52
+
53
+ ■追記
54
+
55
+ ```C
56
+
57
+ #include <stdio.h>
58
+
59
+ #include <stdlib.h>
60
+
61
+ int main(int argc, char *argv[]){
62
+
63
+
64
+
65
+ FILE *f;
66
+
67
+ f= fopen(argv[1],"r");
68
+
69
+
70
+
71
+ if( f==NULL ){
72
+
73
+ printf("%s: can't open.\n",argv[1]); exit(-1);
74
+
75
+ }
76
+
77
+ printf("%s: ");
78
+
79
+ {
80
+
81
+ int increasing = 1;
82
+
83
+ int first = 1;
84
+
85
+ int max;
86
+
21
- int number[100];
87
+ char buffer[30001];
88
+
89
+ char * t = NULL;
22
90
 
23
91
 
24
92
 
25
- /* 数値の総数を入力 */
26
-
27
- int total;
28
-
29
- printf("入力する数値の総数 = ");
93
+ if(NULL == fgets(buffer, sizeof(buffer) - 1, f)){
30
-
94
+
31
- scanf("%d", &total);
95
+ printf("%s: can't reed.\n",argv[1]); exit(-1);
96
+
97
+ }
98
+
99
+ buffer[sizeof(buffer) -1] = '¥0';
32
100
 
33
101
 
34
102
 
35
-
36
-
37
- scanf("%d", &number[i]);
103
+ t = strtok(buffer, " ");
104
+
105
+ while(t != NULL) {
106
+
107
+ int i = atoi(t);
108
+
109
+ if(first == 1){
110
+
111
+ max = i;
112
+
113
+ first = 0;
114
+
115
+ }else if(i < max){
116
+
117
+ increasing = 0;
118
+
119
+ break;
120
+
121
+ }
122
+
123
+ ptr = strtok(NULL, " ");
124
+
125
+ }
38
126
 
39
127
 
40
128
 
41
- /* 数値を昇順にソート */
42
-
43
- for (i=0; i<total; ++i) {
44
-
45
- for (j=i+1; j<total; ++j) {
46
-
47
- if (number[i] > number[j]) {
129
+ if(increasing == 1){
48
-
49
- tmp = number[i];
130
+
50
-
51
- number[i] = number[j];
131
+ printf("increasing\n");
132
+
52
-
133
+ }else{
134
+
53
- number[j] = tmp;
135
+ puts("not increasing\n");
54
-
136
+
55
- }
137
+ }
56
-
138
+
57
- }
139
+ }
58
-
59
- }
140
+
60
-
61
-
62
-
63
-
64
-
141
+
142
+
65
- fclose(f);
143
+ fclose(f);
66
-
67
-
68
-
144
+
145
+
146
+
69
- return 0;
147
+ return 0;
70
148
 
71
149
  }
72
150
 
73
151
  ```
74
152
 
75
-
76
-
77
- やりたい事した...の部分を教え頂き
153
+ 上記のよう追記ましがコンパイルエラーがでしまいました。
78
-
79
-
80
-
81
-
82
-
83
- ■追記
154
+
84
-
85
- `;
155
+ ```
86
-
156
+
87
- if( f==NULL ){
157
+ p8-3.c: In function 'main':
88
-
158
+
89
- printf("%s: can't open.\n",argv[1]); exit(-1);
159
+ p8-3.c:11:5: warning: format '%s' expects a matching 'char *' argument [-Wformat=]
90
-
91
- }
92
160
 
93
161
  printf("%s: ");
94
162
 
95
- {
163
+ ^
164
+
96
-
165
+ p8-3.c:23:37: warning: multi-character character constant [-Wmultichar]
166
+
97
-
167
+ buffer[sizeof(buffer) -1] = '¥0';
98
-
99
-
100
-
101
-
102
-
103
-
104
-
168
+
105
- }
169
+ ^
170
+
106
-
171
+ p8-3.c:23:9: warning: overflow in implicit constant conversion [-Woverflow]
172
+
173
+ buffer[sizeof(buffer) -1] = '¥0';
174
+
175
+ ^
176
+
177
+ p8-3.c:25:5: warning: implicit declaration of function 'strtok' [-Wimplicit-function-declaration]
178
+
179
+ t = strtok(buffer, " ");
180
+
181
+ ^
182
+
183
+ p8-3.c:25:7: warning: assignment makes pointer from integer without a cast [enabled by default]
184
+
185
+ t = strtok(buffer, " ");
186
+
187
+ ^
188
+
189
+ p8-3.c:35:9: error: 'ptr' undeclared (first use in this function)
190
+
191
+ ptr = strtok(NULL, " ");
192
+
193
+ ^
194
+
195
+ p8-3.c:35:9: note: each undeclared identifier is reported only once for each function it appears in
196
+
107
- ```
197
+ ```
198
+
108
-
199
+ ■成功例として
200
+
109
-
201
+ コマンドライン入力
202
+
110
-
203
+ data1.txt
204
+
111
-
205
+ 標準出力
206
+
112
-
207
+ data1.txt: increasing
208
+
209
+ コマンドライン入力
210
+
211
+ data2.txt
212
+
213
+ 標準出力
214
+
113
- 上記のように追記しましたがコンパイルエラーがでてしまいました。↓
215
+ data2.txt: not increasing
216
+
217
+ コマンドライン入力
218
+
219
+ data3.txt
220
+
221
+ 標準出力
222
+
223
+ data3.txt: increasing
224
+
225
+ 再度教えて頂きたく。。。

2

一部変更

2020/02/04 05:29

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 昇順検査 c言語 コマンドライン
1
+ c言語 並べ替え ソート
test CHANGED
@@ -1,12 +1,10 @@
1
- ■やりたい
1
+ 循環し整数を計算し出力に書き出すプログラムですが、まいち内容がよく分かりません。
2
2
 
3
- マン行に整数値の列収めファイル名与えられたとき、そのファイル名のファイルが昇順列を収めたものになっているかどうかを判定するここで、整数値の列が昇順列であるは、並んでいる順にだんだんと値が大きくなる(その列の中で隣り合う2つの整数値 x, y が必ず x < y となっている)こをいう
3
+ 自体書いてみましたが。所何処間違っていると思われます
4
4
 
5
+ 詳しい方、細かく教えて下さい。宜しくお願いします。
5
6
 
6
-
7
- 与えられたファイル名のファイルの中身が昇順列であるかどうかを調べ、その結果を書き出すプログラムを作れ。書出しは、ファイル名に続けて「: 」を書き出し、その後に続けて、昇順列であれば「increasing」、そうでなければ「not increasing」と書き出して、最後に改行すること。
8
-
9
- 、空の列は昇順列
7
+ 追加・削除箇所も教えて下さい。宜しく願い致します
10
8
 
11
9
 
12
10
 
@@ -16,35 +14,53 @@
16
14
 
17
15
  #include <stdio.h>
18
16
 
17
+
18
+
19
+ /* 数値を格納する配列 */
20
+
21
+ int number[100];
22
+
23
+
24
+
25
+ /* 数値の総数を入力 */
26
+
27
+ int total;
28
+
19
- #include <stdlib.h>
29
+ printf("入力する数値の総数 = ");
30
+
31
+ scanf("%d", &total);
32
+
33
+
20
34
 
21
35
 
22
36
 
23
- int main(int argc, char *argv[]){
37
+ scanf("%d", &number[i]);
24
38
 
25
-
39
+
26
40
 
27
- FILE *f;
41
+ /* 数値を昇順にソート */
28
42
 
29
- f= fopen(argv[1],"r");
43
+ for (i=0; i<total; ++i) {
30
44
 
31
- if( f==NULL ){
45
+ for (j=i+1; j<total; ++j) {
32
46
 
33
- printf("%s: can't open.\n",argv[1]); exit(-1);
47
+ if (number[i] > number[j]) {
48
+
49
+ tmp = number[i];
50
+
51
+ number[i] = number[j];
52
+
53
+ number[j] = tmp;
54
+
55
+ }
34
56
 
35
57
  }
36
58
 
37
- printf("%s: ");
59
+ }
38
60
 
39
-
40
61
 
41
- ・・・ファイル変数fに対応するファイルの中身を調べて
42
62
 
43
- ・・・昇順列なら"increasing"、
44
63
 
45
- ・・・そうでないなら"not increasing"と書き出す
46
-
47
-
48
64
 
49
65
  fclose(f);
50
66
 
@@ -66,21 +82,7 @@
66
82
 
67
83
  ■追記
68
84
 
69
- ```C
85
+ `;
70
-
71
- #include <stdio.h>
72
-
73
- #include <stdlib.h>
74
-
75
-
76
-
77
- int main(int argc, char *argv[]){
78
-
79
-
80
-
81
- FILE *f;
82
-
83
- f= fopen(argv[1],"r");
84
86
 
85
87
  if( f==NULL ){
86
88
 
@@ -92,75 +94,13 @@
92
94
 
93
95
  {
94
96
 
95
- int increasing = 1;
96
97
 
97
- int first = 1;
98
98
 
99
- int max;
99
+
100
100
 
101
101
 
102
102
 
103
- char buffer[30001];
104
-
105
- char * t = NULL;
106
-
107
-
108
-
109
- if(NULL == fgets(buffer, sizeof(buffer) - 1, f)){
110
-
111
- printf("%s: can't reed.\n",argv[1]); exit(-1);
112
-
113
- }
114
-
115
- buffer[sizeof(buffer) -1] = '¥0';
116
-
117
-
118
-
119
- t = strtok(buffer, " ");
120
-
121
- while(t != NULL) {
122
-
123
- int i = atoi(t);
124
-
125
- if(first == 1){
126
-
127
- max = i;
128
-
129
- first = 0;
130
-
131
- }else if(i < max){
132
-
133
- increasing = 0;
134
-
135
- break;
136
-
137
- }
138
-
139
- ptr = strtok(NULL, " ");
140
-
141
- }
142
-
143
-
144
-
145
- if(increasing == 1){
146
-
147
- printf("increasing\n");
148
-
149
- }else{
150
-
151
- puts("not increasing\n");
152
-
153
- }
154
-
155
- }
156
-
157
103
 
158
-
159
- fclose(f);
160
-
161
-
162
-
163
- return 0;
164
104
 
165
105
  }
166
106
 
@@ -171,107 +111,3 @@
171
111
 
172
112
 
173
113
  上記のように追記しましたがコンパイルエラーがでてしまいました。↓
174
-
175
-
176
-
177
- ```
178
-
179
- p8-3.c: In function 'main':
180
-
181
- p8-3.c:11:5: warning: format '%s' expects a matching 'char *' argument [-Wformat=]
182
-
183
- printf("%s: ");
184
-
185
- ^
186
-
187
- p8-3.c:23:37: warning: multi-character character constant [-Wmultichar]
188
-
189
- buffer[sizeof(buffer) -1] = '¥0';
190
-
191
- ^
192
-
193
- p8-3.c:23:9: warning: overflow in implicit constant conversion [-Woverflow]
194
-
195
- buffer[sizeof(buffer) -1] = '¥0';
196
-
197
- ^
198
-
199
- p8-3.c:25:5: warning: implicit declaration of function 'strtok' [-Wimplicit-function-declaration]
200
-
201
- t = strtok(buffer, " ");
202
-
203
- ^
204
-
205
- p8-3.c:25:7: warning: assignment makes pointer from integer without a cast [enabled by default]
206
-
207
- t = strtok(buffer, " ");
208
-
209
- ^
210
-
211
- p8-3.c:35:9: error: 'ptr' undeclared (first use in this function)
212
-
213
- ptr = strtok(NULL, " ");
214
-
215
- ^
216
-
217
- p8-3.c:35:9: note: each undeclared identifier is reported only once for each function it appears in
218
-
219
- ```
220
-
221
-
222
-
223
-
224
-
225
- ■成功例として
226
-
227
- コマンドライン入力
228
-
229
- data1.txt
230
-
231
-
232
-
233
- 標準出力
234
-
235
- data1.txt: increasing
236
-
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
245
- コマンドライン入力
246
-
247
- data2.txt
248
-
249
-
250
-
251
- 標準出力
252
-
253
- data2.txt: not increasing
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
-
262
-
263
- コマンドライン入力
264
-
265
- data3.txt
266
-
267
-
268
-
269
- 標準出力
270
-
271
- data3.txt: increasing
272
-
273
-
274
-
275
-
276
-
277
- 再度教えて頂きたく。。。

1

追記しました。

2020/02/01 12:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,219 @@
59
59
 
60
60
 
61
61
  やりたい事に則した...の部分を教えて頂きたく。
62
+
63
+
64
+
65
+
66
+
67
+ ■追記
68
+
69
+ ```C
70
+
71
+ #include <stdio.h>
72
+
73
+ #include <stdlib.h>
74
+
75
+
76
+
77
+ int main(int argc, char *argv[]){
78
+
79
+
80
+
81
+ FILE *f;
82
+
83
+ f= fopen(argv[1],"r");
84
+
85
+ if( f==NULL ){
86
+
87
+ printf("%s: can't open.\n",argv[1]); exit(-1);
88
+
89
+ }
90
+
91
+ printf("%s: ");
92
+
93
+ {
94
+
95
+ int increasing = 1;
96
+
97
+ int first = 1;
98
+
99
+ int max;
100
+
101
+
102
+
103
+ char buffer[30001];
104
+
105
+ char * t = NULL;
106
+
107
+
108
+
109
+ if(NULL == fgets(buffer, sizeof(buffer) - 1, f)){
110
+
111
+ printf("%s: can't reed.\n",argv[1]); exit(-1);
112
+
113
+ }
114
+
115
+ buffer[sizeof(buffer) -1] = '¥0';
116
+
117
+
118
+
119
+ t = strtok(buffer, " ");
120
+
121
+ while(t != NULL) {
122
+
123
+ int i = atoi(t);
124
+
125
+ if(first == 1){
126
+
127
+ max = i;
128
+
129
+ first = 0;
130
+
131
+ }else if(i < max){
132
+
133
+ increasing = 0;
134
+
135
+ break;
136
+
137
+ }
138
+
139
+ ptr = strtok(NULL, " ");
140
+
141
+ }
142
+
143
+
144
+
145
+ if(increasing == 1){
146
+
147
+ printf("increasing\n");
148
+
149
+ }else{
150
+
151
+ puts("not increasing\n");
152
+
153
+ }
154
+
155
+ }
156
+
157
+
158
+
159
+ fclose(f);
160
+
161
+
162
+
163
+ return 0;
164
+
165
+ }
166
+
167
+ ```
168
+
169
+
170
+
171
+
172
+
173
+ 上記のように追記しましたがコンパイルエラーがでてしまいました。↓
174
+
175
+
176
+
177
+ ```
178
+
179
+ p8-3.c: In function 'main':
180
+
181
+ p8-3.c:11:5: warning: format '%s' expects a matching 'char *' argument [-Wformat=]
182
+
183
+ printf("%s: ");
184
+
185
+ ^
186
+
187
+ p8-3.c:23:37: warning: multi-character character constant [-Wmultichar]
188
+
189
+ buffer[sizeof(buffer) -1] = '¥0';
190
+
191
+ ^
192
+
193
+ p8-3.c:23:9: warning: overflow in implicit constant conversion [-Woverflow]
194
+
195
+ buffer[sizeof(buffer) -1] = '¥0';
196
+
197
+ ^
198
+
199
+ p8-3.c:25:5: warning: implicit declaration of function 'strtok' [-Wimplicit-function-declaration]
200
+
201
+ t = strtok(buffer, " ");
202
+
203
+ ^
204
+
205
+ p8-3.c:25:7: warning: assignment makes pointer from integer without a cast [enabled by default]
206
+
207
+ t = strtok(buffer, " ");
208
+
209
+ ^
210
+
211
+ p8-3.c:35:9: error: 'ptr' undeclared (first use in this function)
212
+
213
+ ptr = strtok(NULL, " ");
214
+
215
+ ^
216
+
217
+ p8-3.c:35:9: note: each undeclared identifier is reported only once for each function it appears in
218
+
219
+ ```
220
+
221
+
222
+
223
+
224
+
225
+ ■成功例として
226
+
227
+ コマンドライン入力
228
+
229
+ data1.txt
230
+
231
+
232
+
233
+ 標準出力
234
+
235
+ data1.txt: increasing
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ コマンドライン入力
246
+
247
+ data2.txt
248
+
249
+
250
+
251
+ 標準出力
252
+
253
+ data2.txt: not increasing
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+ コマンドライン入力
264
+
265
+ data3.txt
266
+
267
+
268
+
269
+ 標準出力
270
+
271
+ data3.txt: increasing
272
+
273
+
274
+
275
+
276
+
277
+ 再度教えて頂きたく。。。