質問編集履歴

5

2019/11/29 07:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes

4

質問文の修正

2019/11/29 07:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -40,15 +40,9 @@
40
40
 
41
41
 
42
42
 
43
- 以下のコードまで作成したのですが,わからない点があります.
43
+ 以下のコードまで作成したのですが,コマンド番号4の反復子を次の要素に進める操作が,無効にってしまいます.
44
-
45
- ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
44
+
46
-
47
- ・コマンド番号の3と4の処理が正しく実行されないのですが,コードをどのように修正したらよいでしょうか?
48
-
49
- 以上の2点について詳しく教えていただきたいです.
50
-
51
- また現在のコード修正点があれば,それも教えてください.よろしくお願いします.
45
+ 正しく操作が行われるには,コードをどのように修正したらよいでしょうか?教えてください.よろしくお願いします.
52
46
 
53
47
  ```C++
54
48
 

3

コードの修正

2019/11/29 04:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -204,7 +204,11 @@
204
204
 
205
205
  case NEXT:
206
206
 
207
+ while (p != busSchedule.end()) {
208
+
207
- p++; //反復子が次の要素を参照するようにする
209
+ p++; //反復子が次の要素を参照するようにする
210
+
211
+ }
208
212
 
209
213
  break;
210
214
 
@@ -214,7 +218,11 @@
214
218
 
215
219
  case PREVIOUS:
216
220
 
221
+ while (p != busSchedule.begin()) {
222
+
217
- p--; //反復子が前の要素を参照するようにする
223
+ p--; //反復子が前の要素を参照するようにする
224
+
225
+ }
218
226
 
219
227
  break;
220
228
 
@@ -296,9 +304,13 @@
296
304
 
297
305
  for (q = busSchedule.begin(); q != busSchedule.end(); q++) {
298
306
 
307
+ if (q == p) {
308
+
309
+ cout << ">";
310
+
311
+ }
312
+
299
- cout << p->busStopType << " " << p->busStopName << " " << p->time << endl;
313
+ cout << q->busStopType << " " << q->busStopName << " " << q->time << endl;
300
-
301
- p++;
302
314
 
303
315
  }
304
316
 

2

コードの修正

2019/11/29 04:25

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
46
46
 
47
- ・コマンド番号の3~5の処理が正しく出力されないのですが,コードをどのように修正したらよいでしょうか?
47
+ ・コマンド番号の3と4の処理が正しく実行されないのですが,コードをどのように修正したらよいでしょうか?
48
48
 
49
49
  以上の2点について詳しく教えていただきたいです.
50
50
 
@@ -62,8 +62,6 @@
62
62
 
63
63
 
64
64
 
65
- #define LINELENGTH 80 //一行の長さ
66
-
67
65
  #define SHOW 1 //表示
68
66
 
69
67
  #define INSERT 2 //追加
@@ -132,8 +130,6 @@
132
130
 
133
131
  void main() {
134
132
 
135
- char commandLine[LINELENGTH] = "";
136
-
137
133
  int type=0;
138
134
 
139
135
  string name, time;

1

コードの修正

2019/11/27 08:46

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,17 @@
38
38
 
39
39
  ・listとその反復子は、大域変数として定義します
40
40
 
41
+
42
+
43
+ 以下のコードまで作成したのですが,わからない点があります.
44
+
45
+ ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
46
+
47
+ ・コマンド番号の3~5の処理が正しく出力されないのですが,コードをどのように修正したらよいでしょうか?
48
+
49
+ 以上の2点について詳しく教えていただきたいです.
50
+
41
- 以下のコードで作成しのですが残りをどのように書いたら良いのかわからないので,具体的に教えていただきたいです。また,現在のコードで修正点があれば,それも教えてください.よろしくお願いします.
51
+ また,現在のコードで修正点があれば,それも教えてください.よろしくお願いします.
42
52
 
43
53
  ```C++
44
54
 
@@ -52,6 +62,8 @@
52
62
 
53
63
 
54
64
 
65
+ #define LINELENGTH 80 //一行の長さ
66
+
55
67
  #define SHOW 1 //表示
56
68
 
57
69
  #define INSERT 2 //追加
@@ -66,6 +78,36 @@
66
78
 
67
79
 
68
80
 
81
+ //バス停到着情報クラス
82
+
83
+ class Arrival {
84
+
85
+ public:
86
+
87
+ int busStopType; //バス停タイプ
88
+
89
+ string busStopName; //バス停名
90
+
91
+ string time; //通過時刻
92
+
93
+
94
+
95
+ // コンストラクタ
96
+
97
+ Arrival(int type, string name, string t) {
98
+
99
+ busStopType = type;
100
+
101
+ busStopName = name;
102
+
103
+ time = t;
104
+
105
+ }
106
+
107
+ };
108
+
109
+
110
+
69
111
  void showMenu(void); //機能の一覧を表示する。
70
112
 
71
113
  void show();
@@ -74,264 +116,216 @@
74
116
 
75
117
 
76
118
 
77
- //バス停到着情報クラス
119
+ // 大域変数
120
+
78
-
121
+ list<Arrival> busSchedule; //バス時刻表リスト
122
+
123
+ list<Arrival>::iterator p; //上記を参照する反復子
124
+
125
+
126
+
127
+ /****
128
+
129
+ メイン関数
130
+
131
+ ****/
132
+
79
- class Arrival {
133
+ void main() {
134
+
80
-
135
+ char commandLine[LINELENGTH] = "";
136
+
137
+ int type=0;
138
+
139
+ string name, time;
140
+
81
- public:
141
+ string t;
142
+
82
-
143
+ int command;
144
+
83
- int busStopType; //バス停タイプ
145
+ int busStopType=0; //バス停タイプ
84
146
 
85
147
  string busStopName; //バス停名
86
148
 
149
+
150
+
151
+ p = busSchedule.end(); //反復子がリスト末尾を指すようにする
152
+
153
+
154
+
155
+ //機能の一覧を表示する。
156
+
157
+ showMenu();
158
+
159
+
160
+
161
+ //コマンド番号を入力する。
162
+
163
+ cout << "コマンド番号=";
164
+
165
+ cin >> command;
166
+
167
+
168
+
169
+ //コマンドが「終了」でない限り、以下の処理を繰り返す。
170
+
171
+ while (command != END) {
172
+
173
+
174
+
175
+ //コマンドが「表示」であれば、以下を実行する。
176
+
177
+ switch (command) {
178
+
179
+ case SHOW:
180
+
181
+ show();
182
+
183
+ break;
184
+
185
+
186
+
187
+ //コマンドが「追加」であれば、以下を実行する。
188
+
189
+ case INSERT:
190
+
191
+ insert(busStopName,busStopType,time);
192
+
193
+ break;
194
+
195
+
196
+
197
+ //コマンドが「削除」であれば、以下を実行する。
198
+
199
+ case DELETE:
200
+
201
+ p = busSchedule.erase(p); //pの参照先を削除、戻り値は次の要素を参照
202
+
203
+ break;
204
+
205
+
206
+
207
+ //コマンドが「次の要素」であれば、以下を実行する。
208
+
209
+ case NEXT:
210
+
87
- string time; //通過時刻
211
+ p++; //反復子が次の要素を参照するようにする
212
+
88
-
213
+ break;
214
+
215
+
216
+
89
-
217
+ //コマンドが「前の要素」であれば、以下を実行する。
218
+
90
-
219
+ case PREVIOUS:
220
+
221
+ p--; //反復子が前の要素を参照するようにする
222
+
223
+ break;
224
+
225
+ }
226
+
227
+
228
+
229
+ // 機能の一覧を表示する。
230
+
231
+ showMenu();
232
+
233
+
234
+
91
- // コンストラクタ
235
+ // コド番号を入力する。
92
-
236
+
93
- Arrival(int type, string name, string t) {
237
+ cout << "コマンド番号=";
94
-
95
- busStopType = type;
238
+
96
-
97
- busStopName = name;
239
+ cin >> command;
240
+
98
-
241
+ }
242
+
243
+ }
244
+
245
+
246
+
247
+ /*****************************************
248
+
99
- time = t;
249
+ 機能の一覧を表示する。
250
+
251
+ *****************************************/
252
+
253
+ void showMenu(void){
254
+
255
+
256
+
257
+ // 1. 「コマンド番号 1 は リストに登録されている要素を一覧表示する。」と表示する。
258
+
259
+ cout << "コマンド番号 1 は リストに登録されている要素を一覧表示する。" << endl;
260
+
261
+
262
+
263
+ // 2. 「コマンド番号 2 は 反復子の直前に新規要素を追加する。」と表示する。
264
+
265
+ cout << "コマンド番号 2 は 反復子の直前に新規要素を追加する。" << endl;
266
+
267
+
268
+
269
+ // 3. 「コマンド番号 3 は 反復子が参照する要素を削除する。」と表示する。
270
+
271
+ cout << "コマンド番号 3 は 反復子が参照する要素を削除する。" << endl;
272
+
273
+
274
+
275
+ // 4. 「コマンド番号 4 は 反復子を次の要素に進める。」と表示する。
276
+
277
+ cout << "コマンド番号 4 は 反復子を次の要素に進める。" << endl;
278
+
279
+
280
+
281
+ // 5. 「コマンド番号 5 は 反復子を前の要素に進める。」と表示する。
282
+
283
+ cout << "コマンド番号 5 は 反復子を前の要素に進める。" << endl;
284
+
285
+
286
+
287
+ // 6. 「コマンド番号 6 は プログラムを終了する。」と表示する。
288
+
289
+ cout << "コマンド番号 6 は プログラムを終了する。" << endl;
100
290
 
101
291
  }
102
292
 
103
- };
293
+
104
-
105
-
106
-
107
- // 大域変数
294
+
108
-
109
- list<Arrival> busSchedule; //バス時刻表リスト
110
-
111
- list<Arrival>::iterator p; //上記を参照する反復子
112
-
113
-
114
-
115
- /****
116
-
117
- メイン関数
118
-
119
- ****/
120
-
121
- void main() {
295
+ void show() {
122
-
123
- string newName; // 新しく加える名称
296
+
124
-
125
- int newValue; // 新しく加える値
126
-
127
- int type=0;
128
-
129
- string name, time;
297
+ list<Arrival>::iterator q;
130
-
131
- string t;
298
+
132
-
133
- int command;
134
-
135
- int busStopType=0; //バス停タイプ
136
-
137
- string busStopName; //バス停名
299
+ p = busSchedule.begin();
138
-
139
-
140
-
300
+
141
- p = busSchedule.end(); //反復子がリスト末尾を指すようにする
301
+ for (q = busSchedule.begin(); q != busSchedule.end(); q++) {
142
-
143
-
144
-
145
- //機能の一覧を表示する。
302
+
146
-
147
- showMenu();
148
-
149
-
150
-
151
- //コマンド番号を入力する。
152
-
153
- cout << "コマンド番号=";
303
+ cout << p->busStopType << " " << p->busStopName << " " << p->time << endl;
154
-
155
- cin >> command;
304
+
156
-
157
-
158
-
159
- //コマンドが「終了」でない限り、以下の処理を繰り返す。
160
-
161
- while (command != END) {
162
-
163
-
164
-
165
- //コマンドが「表示」であれば、以下を実行する。
166
-
167
- switch (command) {
168
-
169
- case SHOW:
170
-
171
- show();
172
-
173
-
174
-
175
- break;
305
+ p++;
176
-
177
-
178
-
179
- //コマンドが「追加」であれば、以下を実行する。
180
-
181
- case INSERT:
182
-
183
- insert(busStopName,busStopType,time);
184
-
185
-
186
-
187
- break;
188
-
189
-
190
-
191
- //コマンドが「削除」であれば、以下を実行する。
192
-
193
- case DELETE:
194
-
195
-
196
-
197
-
198
-
199
- break;
200
-
201
-
202
-
203
- //コマンドが「次の要素」であれば、以下を実行する。
204
-
205
- case NEXT:
206
-
207
-
208
-
209
-
210
-
211
- break;
212
-
213
-
214
-
215
- //コマンドが「前の要素」であれば、以下を実行する。
216
-
217
- case PREVIOUS:
218
-
219
-
220
-
221
-
222
-
223
- break;
224
-
225
-
226
306
 
227
307
  }
228
308
 
229
-
230
-
231
- // 機能の一覧を表示する。
232
-
233
- showMenu();
234
-
235
-
236
-
237
- // コマンド番号を入力する。
238
-
239
- cout << "コマンド番号=";
240
-
241
- cin >> command;
242
-
243
309
  }
244
310
 
245
311
 
246
312
 
247
- p = busSchedule.erase(p); //pの参照先を削除、戻り値は次の要素を参照
313
+ void insert(string busStopName, int busStopType, string time){
314
+
248
-
315
+ int type=0;
316
+
317
+ // 入力を受け取る
318
+
319
+ cout << "バス停タイプ(0:乗車のみ、1:乗降可能、2:降車のみ),バス停名,通過時刻(hh : mmの形式)> ";
320
+
249
- p = busSchedule.begin(); //反復子がリト先頭を指すようにする
321
+ cin >> busStopType; //停タイプ
250
-
251
-
252
-
253
- p++; //反復子が次の要素を参照するようにする
322
+
254
-
255
- p--; //反復子が前の要素を参照するようにする
256
-
257
- type = p->busStopType;
258
-
259
- name = p->busStopName;
323
+ cin >> busStopName; //バス停名
260
-
324
+
261
- t = p->time;
325
+ cin >> time;
262
-
263
- }
326
+
264
-
265
-
266
-
267
- /*****************************************
268
-
269
- 機能の一覧を表示する。
270
-
271
- *****************************************/
272
-
273
- void showMenu(void){
274
-
275
-
276
-
277
- // 1. 「コマンド番号 1 は リストに登録されている要素を一覧表示する。」と表示する。
278
-
279
- cout << "コマンド番号 1 リストに登録されている要素を一覧表示する。" << endl;
327
+ p = busSchedule.insert(p, Arrival(busStopType, busStopName, time)); //pの参照先の直前に挿入、戻り値挿入要素を参照
280
-
281
-
282
-
283
- // 2. 「コマンド番号 2 は 反復子の直前に新規要素を追加する。」と表示する。
284
-
285
- cout << "コマンド番号 2 は 反復子の直前に新規要素を追加する。" << endl;
286
-
287
-
288
-
289
- // 3. 「コマンド番号 3 は 反復子が参照する要素を削除する。」と表示する。
290
-
291
- cout << "コマンド番号 3 は 反復子が参照する要素を削除する。" << endl;
292
-
293
-
294
-
295
- // 4. 「コマンド番号 4 は 反復子を次の要素に進める。」と表示する。
296
-
297
- cout << "コマンド番号 4 は 反復子を次の要素に進める。" << endl;
298
-
299
-
300
-
301
- // 5. 「コマンド番号 5 は 反復子を前の要素に進める。」と表示する。
302
-
303
- cout << "コマンド番号 5 は 反復子を前の要素に進める。" << endl;
304
-
305
-
306
-
307
- // 6. 「コマンド番号 6 は プログラムを終了する。」と表示する。
308
-
309
- cout << "コマンド番号 6 は プログラムを終了する。" << endl;
310
328
 
311
329
  }
312
330
 
313
-
314
-
315
- void show() {
316
-
317
- list<Arrival>::iterator q;
318
-
319
- for (q = busSchedule.begin(); q != busSchedule.end(); q++) {
320
-
321
-
322
-
323
- }
324
-
325
- }
326
-
327
- void insert(string busStopName, int busStopType, string time){
328
-
329
- int type=0;
330
-
331
- string name;
332
-
333
- p = busSchedule.insert(p, Arrival(type, name, time)); //pの参照先の直前に挿入、戻り値は挿入要素を参照
334
-
335
- }
336
-
337
331
  ```