質問編集履歴

2

どう質問したらいいかわからないため消します。

2020/11/25 23:20

投稿

reina0423
reina0423

スコア0

test CHANGED
@@ -1 +1 @@
1
- 【大学課題】入力された年と月をもとにカレンダー表示の仕方
1
+ 【大学課題】入力た年と月をもとにカレンダー表示
test CHANGED
@@ -1,355 +1 @@
1
- C++プログラミング課題です。
2
-
3
- 最初の「本関数を完成させよ。」という3つ目の問題まではできました。
4
-
5
- でも、最後の2次元配列を使未完成部分というところが調べてもわかりせん
1
+ みなさんコメントありがとござます。も少し頑張って調べて
6
-
7
-
8
-
9
- ー問題ー
10
-
11
- 年月を入力すると、その月のカレンダーを表示するプログラムを作成する。以下に示すプログラム
12
-
13
- の未完成の関数(ch_input, calc_elapsed_days, get_number_of_days),および,main 関数の一部を
14
-
15
- 作成し、プログラムを完成させよ。ただし,入力する年月は 1900 年 1 月以降とする。(なお、1900 年
16
-
17
- 1 月 1 日は月曜日である。) また、1900 年より前、もしくは、1 月から 12 月の範囲外の入力があった
18
-
19
- 場合、エラーメッセージを出力する。
20
-
21
-
22
-
23
-
24
-
25
- プログラム
26
-
27
- #include <iostream>
28
-
29
- #include <iomanip>
30
-
31
- #include <vector>
32
-
33
- using std::cout, std::cin, std::vector;
34
-
35
- using std::endl, std::setw;
36
-
37
- /*
38
-
39
- 書式: bool ch_input(int year, int month)
40
-
41
- 説明: 引数として入力した年(year)が 1900 年以降、月(month)が、1 月から 12 月の範囲であ
42
-
43
- るかをチェックする
44
-
45
- 戻り値: 正しければ true,不正であれば false を返す。
46
-
47
- */
48
-
49
- bool ch_input(int year, int month)
50
-
51
- {
52
-
53
- // 本関数を完成させよ。
54
-
55
- }
56
-
57
- /*
58
-
59
- 書式:int calc_elapsed_days(int year)
60
-
61
- 説明:1900 年 1 月 1 日から引数とした年(year)の 1 月 1 日までの経過日数を計算
62
-
63
- 戻り値:経過日数
64
-
65
- */
66
-
67
- int calc_elapsed_days(int year)
68
-
69
- {
70
-
71
- // 本関数を完成させよ。
72
-
73
-
74
-
75
- 書式: int get_number_of_days(int year, int month)
76
-
77
- 説明: 年(year)と月(month)から、その月の日数を得る。
78
-
79
- 戻り値: 日数(例:year が 2020, month が 12 であれば、31 を返す。)
80
-
81
- */
82
-
83
- int get_number_of_days(int year, int month)
84
-
85
- {
86
-
87
- // 本関数を完成させよ。
88
-
89
- }
90
-
91
- /*
92
-
93
- 書式: int get_first_week(int year, int month)
94
-
95
- 説明: 引数として入力した年(year)、月(month)から、その月の最初の曜日を得る
96
-
97
- 戻り値: 曜日に対応した数を返す。曜日と数の対応は以下のとおり
98
-
99
- 0->日 1->月 2->火 3->水 4->木 5->金 6->土
100
-
101
- 例えば、日曜日なら 0 を返す。
102
-
103
- */
104
-
105
- int get_first_week(int year,int month)
106
-
107
- {
108
-
109
- // 1900 年 1 月 1 日から year 年 1 月 1 日までの経過日の計算
110
-
111
- int total = calc_elapsed_days(year);
112
-
113
-
114
-
115
- // year 年 1 月 1 日から year 年 month 月 1 日までの経過日の計算
116
-
117
- for(int m = 1; m < month; m++) {
118
-
119
- total += get_number_of_days(year,m);
120
-
121
- }
122
-
123
- return (total+1) % 7;
124
-
125
- }
126
-
127
- int main()
128
-
129
- {
130
-
131
- int year,month;
132
-
133
-
134
-
135
- // 年月の入力
136
-
137
- cout << "年月を入力して下さい。 \n";
138
-
139
- cout << "年 : ";
140
-
141
- cin >> year;
142
-
143
- cout << "月 : ";
144
-
145
- cin >> month;
146
-
147
-
148
-
149
- // 入力チェック
150
-
151
- if( ch_input(year,month) )
152
-
153
- {
154
-
155
- // 入力した年、月の最初の曜日を得る
156
-
157
- int fw = get_first_week(year,month);
158
-
159
- // 入力した月の日数
160
-
161
- int md = get_number_of_days(year,month);
162
-
163
-
164
-
165
- const int n{6}, m{7};
166
-
167
- vector< vector<int> > v_days(n, vector<int>(m));
168
-
169
- // 以下、プログラムを作成せよ
170
-
171
-
172
-
173
-
174
-
175
-
176
-
177
- ーーーー未完成部分ーーーーー
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
- // カレンダーを表示する
186
-
187
- cout << year << "年" << month << "月" << endl;
188
-
189
- cout << " 日 月 火 水 木 金 土" << endl;
190
-
191
- cout << " --------------------" << endl;
192
-
193
-
194
-
195
- for (int i=0; i < n; i++) {
196
-
197
- for (int j=0; j < m; j++) {
198
-
199
- if(v_days[i][j] != 0) {
200
-
201
- cout << setw(3) << v_days[i][j];
202
-
203
- }
204
-
205
- else {
206
-
207
- cout << setw(3) << " ";
208
-
209
- }
210
-
211
- }
212
-
213
- cout << endl;
214
-
215
- }
216
-
217
-
218
-
219
- }
220
-
221
- else
222
-
223
- {
224
-
225
- cout << "不正な入力です。\n";
226
-
227
- }
228
-
229
- return 0;
230
-
231
- }
232
-
233
-
234
-
235
- □ 実行例1
236
-
237
- 年月を入力して下さい。
238
-
239
- 年 : 2020
240
-
241
- 月 : 12
242
-
243
- 2020 年 12 月
244
-
245
- 日 月 火 水 木 金 土
246
-
247
- --------------------
248
-
249
- 1 2 3 4 5
250
-
251
- 6 7 8 9 10 11 12
252
-
253
- 13 14 15 16 17 18 19
254
-
255
- 20 21 22 23 24 25 26
256
-
257
- 27 28 29 30 31
258
-
259
-
260
-
261
-
262
-
263
- □ 実行例2
264
-
265
- 年月を入力して下さい。
266
-
267
- 年 : 2020
268
-
269
- 月 : 2
270
-
271
- 2020 年 2 月
272
-
273
- 日 月 火 水 木 金 土
274
-
275
- --------------------
276
-
277
- 1
278
-
279
- 2 3 4 5 6 7 8
280
-
281
- 9 10 11 12 13 14 15
282
-
283
- 16 17 18 19 20 21 22
284
-
285
- 23 24 25 26 27 28 29
286
-
287
-
288
-
289
-
290
-
291
- □ 実行例3
292
-
293
- 年月を入力して下さい。
294
-
295
- 年 : 1888
296
-
297
- 月 : 12
298
-
299
- 不正な入力です。
300
-
301
-
302
-
303
-
304
-
305
- □ 実行例4
306
-
307
- 年月を入力して下さい。
308
-
309
- 年 : 2020
310
-
311
- 月 : 13
312
-
313
- 不正な入力です。
314
-
315
-
316
-
317
- 補足
318
-
319
- 1. main関数の未完成部分は,その下にある「カレンダーを表示する」部分を参考に,変数fw と 変
320
-
321
- 数 md の値を使用して2次元配列 v_days にカレンダーの日を格納し,日を表示しない部分は
322
-
323
- 0 を入れて下さい.例えば「実行例1」の 2020 年 12 月の場合,v_days には以下のようにデータが
324
-
325
- 格納されています.
326
-
327
-
328
-
329
- { { 0, 0, 1, 2, 3, 4, 5 },
330
-
331
- { 6, 7, 8, 9, 10, 11, 12 },
332
-
333
- { 13, 14, 15, 16, 17, 18, 19 },
334
-
335
- { 20, 21, 22, 23, 24, 25, 26 },
336
-
337
- { 27, 28, 29, 30, 31, 0, 0 },
338
-
339
- { 0, 0, 0, 0, 0, 0, 0 } }
340
-
341
-
342
-
343
- 2. calc_elapsed_days 関数と get_number_of_days 関数では閏年(1年は366日,2月は29日)に注
344
-
345
- 意して下さい。なお,閏年の条件は以下になります.
346
-
347
- ・ 西暦年が 4 で割り切れる年は閏年
348
-
349
- ・ ただし,西暦年が 100 で割り切れる年は閏年ではない
350
-
351
- ・ ただし、西暦年が 400 で割り切れる年は閏年
352
-
353
- 3. get_number_of_days 関数では、2 月は 28 日(閏年ならば 29 日)、4 月、 6 月、9 月、11 月は 30
354
-
355
- 日、それ以外は 31 日です。

1

自分でやったことを記載しました。

2020/11/25 23:20

投稿

reina0423
reina0423

スコア0

test CHANGED
@@ -1 +1 @@
1
- 留年がかかっているかわいい弟の課題】入力された年と月をもとにカレンダーを表示
1
+ 大学の課題】入力された年と月をもとにカレンダーを表示の仕方
test CHANGED
@@ -1,8 +1,8 @@
1
- ### 前提・実現したいこと
1
+ C++プログラミング課題です。
2
+
2
-
3
+ 最初の「本関数を完成させよ。」という3つ目の問題まではできました。
3
-
4
-
4
+
5
- 最後の未完成部分というところがわかりません。
5
+ でも、最後の2次元配列を使う未完成部分というところが調べてもわかりません。
6
6
 
7
7
 
8
8
 
@@ -353,9 +353,3 @@
353
353
  3. get_number_of_days 関数では、2 月は 28 日(閏年ならば 29 日)、4 月、 6 月、9 月、11 月は 30
354
354
 
355
355
  日、それ以外は 31 日です。
356
-
357
-
358
-
359
-
360
-
361
- 調べてもあまり出てこなくて困ってます。