質問編集履歴
7
コード修正と新たな問題
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
コードを改良して1年間のカレンダーを作りたい
|
1
|
+
コードを改良して1年間のカレンダーを作りたい(曜日と日付の並びをそろえたい)
|
body
CHANGED
@@ -62,10 +62,7 @@
|
|
62
62
|
}
|
63
63
|
}
|
64
64
|
}
|
65
|
-
|
65
|
+
|
66
|
-
//year:年
|
67
|
-
//month:月
|
68
|
-
//this_year_wof1:当該年の1月1日の週の番号
|
69
66
|
int getWeekOf1(int year,int month,int this_year_wof1)
|
70
67
|
{
|
71
68
|
int m;
|
6
コードを修正し新たに曜日と日付のずれが生じました
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,18 +3,9 @@
|
|
3
3
|
下のコードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいです。
|
4
4
|
現在実行すると
|
5
5
|
|
6
|
-
2021年 1月
|
7
|
-
日 月 火 水 木 金 土
|
8
|
-
1 2
|
9
|
-
3 4 5 6 7 8 9
|
10
|
-
|
6
|
+

|
11
|
-
17 18 19 20 21 22 23
|
12
|
-
24 25 26 27 28 29 30
|
13
7
|
|
14
|
-
|
8
|
+
どうすれば曜日と日付をそろえることができますか
|
15
|
-
|
16
|
-
mainの最後のfor文のようにすれば12ヶ月分は表示できそうなのですが月初の曜日のズレや縦に3ヶ月横に4ヶ月分などの表示の仕方がわかりません。
|
17
|
-
|
18
9
|
言語はC言語です。
|
19
10
|
|
20
11
|
よろしくお願いします。
|
@@ -23,54 +14,86 @@
|
|
23
14
|
#include <string.h>
|
24
15
|
#define YEAR 2021
|
25
16
|
#define MONTH 1
|
26
|
-
#define WEEKof1 5
|
17
|
+
#define WEEKof1 5
|
27
|
-
#define MON_WIDTH 30
|
18
|
+
#define MON_WIDTH 30
|
19
|
+
enum { ROW = 3, COL = (12/ROW) };
|
28
20
|
|
21
|
+
int dayOfMonth[2][12] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
|
22
|
+
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
|
23
|
+
};
|
29
24
|
|
30
|
-
int dayOfMonth[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
|
31
|
-
{31,29,31,30,31,30,31,31,30,31,30,31}};
|
32
|
-
|
33
|
-
int leapYear(int year)
|
25
|
+
int leapYear(int year)
|
26
|
+
{
|
34
|
-
return (year % 4)==0;
|
27
|
+
return (year % 4) == 0;
|
35
28
|
}
|
36
29
|
|
37
|
-
void getCalender(char s[
|
30
|
+
void getCalender(char s[8][MON_WIDTH], int y, int m, int wof)
|
31
|
+
{
|
38
|
-
int cal[
|
32
|
+
int cal[6][7];
|
39
|
-
int dom = dayOfMonth[leapYear(y)][m-1];
|
33
|
+
int dom = dayOfMonth[leapYear(y)][m - 1];
|
40
|
-
int i,d;
|
34
|
+
int i, d;
|
41
35
|
|
42
|
-
|
36
|
+
|
43
|
-
for(i=0;i < wof;i++)
|
37
|
+
for (i = 0; i < wof; i++)
|
38
|
+
cal[0][i] = 0;
|
44
|
-
for(d=0;d < dom; d++) {
|
39
|
+
for (d = 0; d < dom; d++) {
|
45
|
-
|
40
|
+
int row = (wof + d) / 7;
|
46
|
-
|
41
|
+
int col = (wof + d) % 7;
|
47
|
-
|
42
|
+
cal[row][col] = d + 1;
|
48
43
|
}
|
49
|
-
for(i=wof+dom;i < 7*
|
44
|
+
for (i = wof + dom; i < 7 * 6; i++) {
|
50
|
-
|
45
|
+
int row = i / 7;
|
51
|
-
|
46
|
+
int col = i % 7;
|
52
|
-
|
47
|
+
cal[row][col] = 0;
|
53
48
|
}
|
54
49
|
|
55
50
|
|
56
|
-
sprintf(s[0]," %4d年%2d月",y,m);
|
51
|
+
sprintf(s[0], " %4d年%2d月", y, m);
|
57
|
-
sprintf(s[1]," 日 月 火 水 木 金 土");
|
52
|
+
sprintf(s[1], " 日 月 火 水 木 金 土");
|
58
|
-
for(i = 0; i <
|
53
|
+
for (i = 0; i < 6; i++) {
|
59
|
-
|
54
|
+
s[i + 2][0] = '\0';
|
60
|
-
char tmp[10];
|
55
|
+
char tmp[10];
|
61
|
-
|
56
|
+
for (d = 0; d < 7; d++) {
|
57
|
+
if (cal[i][d] == 0)
|
62
|
-
|
58
|
+
sprintf(tmp, " ");
|
59
|
+
else
|
63
|
-
|
60
|
+
sprintf(tmp, " %2d", cal[i][d]);
|
64
|
-
|
61
|
+
strcat(s[i + 2], tmp);
|
65
|
-
|
62
|
+
}
|
66
63
|
}
|
67
64
|
}
|
68
|
-
|
65
|
+
//指定年月の1日の週の番号を求める(日:0、月:1、...、土:6)
|
66
|
+
//year:年
|
69
|
-
|
67
|
+
//month:月
|
70
|
-
|
68
|
+
//this_year_wof1:当該年の1月1日の週の番号
|
71
|
-
|
69
|
+
int getWeekOf1(int year,int month,int this_year_wof1)
|
70
|
+
{
|
71
|
+
int m;
|
72
|
+
int serial_day = 0;
|
73
|
+
int wof1;
|
72
|
-
for(
|
74
|
+
for (m = 1; m < month;m++){
|
73
|
-
|
75
|
+
serial_day += dayOfMonth[leapYear(year)][m-1];
|
74
76
|
}
|
77
|
+
wof1 = (serial_day + this_year_wof1) % 7;
|
78
|
+
return wof1;
|
75
79
|
}
|
80
|
+
void main(void)
|
81
|
+
{
|
82
|
+
char calender[12][8][MON_WIDTH];
|
83
|
+
int i,row,col;
|
84
|
+
int m;
|
85
|
+
int wof1;
|
86
|
+
for (m = 1; m <= 12; m++){
|
87
|
+
wof1 = getWeekOf1(YEAR,m,WEEKof1);
|
88
|
+
getCalender(calender[m-1], YEAR, m, wof1);
|
89
|
+
}
|
90
|
+
for (row = 0;row < ROW;row++){
|
91
|
+
for (int i = 0; i < 8; i++) {
|
92
|
+
for (col = 0; col < COL; col++){
|
93
|
+
printf("%-24s",calender[row*COL+col][i]);
|
94
|
+
}
|
95
|
+
printf("\n");
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
76
99
|
```
|
5
実行結果を修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
下のコードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいです。
|
4
4
|
現在実行すると
|
5
|
+
|
5
|
-
|
6
|
+
2021年 1月
|
6
7
|
日 月 火 水 木 金 土
|
7
|
-
|
8
|
+
1 2
|
8
|
-
|
9
|
+
3 4 5 6 7 8 9
|
9
|
-
10 11 12 13 14 15 16
|
10
|
+
10 11 12 13 14 15 16
|
10
|
-
17 18 19 20 21 22 23
|
11
|
+
17 18 19 20 21 22 23
|
11
|
-
24 25 26 27 28 29 30
|
12
|
+
24 25 26 27 28 29 30
|
12
13
|
|
13
|
-
|
14
14
|
という感じで表示されます(*見やすいように編集してます。)
|
15
15
|
|
16
16
|
mainの最後のfor文のようにすれば12ヶ月分は表示できそうなのですが月初の曜日のズレや縦に3ヶ月横に4ヶ月分などの表示の仕方がわかりません。
|
4
実行結果と日本語の誤りを修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,8 +9,8 @@
|
|
9
9
|
10 11 12 13 14 15 16
|
10
10
|
17 18 19 20 21 22 23
|
11
11
|
24 25 26 27 28 29 30
|
12
|
-
31
|
13
12
|
|
13
|
+
|
14
14
|
という感じで表示されます(*見やすいように編集してます。)
|
15
15
|
|
16
16
|
mainの最後のfor文のようにすれば12ヶ月分は表示できそうなのですが月初の曜日のズレや縦に3ヶ月横に4ヶ月分などの表示の仕方がわかりません。
|
@@ -73,5 +73,4 @@
|
|
73
73
|
puts(calender[i]);
|
74
74
|
}
|
75
75
|
}
|
76
|
-
コード
|
77
76
|
```
|
3
コードの欠けていた部分を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,7 +18,8 @@
|
|
18
18
|
言語はC言語です。
|
19
19
|
|
20
20
|
よろしくお願いします。
|
21
|
+
```
|
21
|
-
|
22
|
+
#include <stdio.h>
|
22
23
|
#include <string.h>
|
23
24
|
#define YEAR 2021
|
24
25
|
#define MONTH 1
|
@@ -71,5 +72,6 @@
|
|
71
72
|
for(int i=0; i< 7; i++) {
|
72
73
|
puts(calender[i]);
|
73
74
|
}
|
75
|
+
}
|
74
76
|
コード
|
75
77
|
```
|
2
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,12 +1,24 @@
|
|
1
|
-
|
1
|
+
粗末な質問の仕方ですみませんでした。
|
2
2
|
|
3
|
+
下のコードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいです。
|
3
|
-
|
4
|
+
現在実行すると
|
5
|
+
2021年1月
|
6
|
+
日 月 火 水 木 金 土
|
7
|
+
1 2
|
8
|
+
3 4 5 6 7 8 9
|
9
|
+
10 11 12 13 14 15 16
|
10
|
+
17 18 19 20 21 22 23
|
11
|
+
24 25 26 27 28 29 30
|
12
|
+
31
|
4
13
|
|
5
|
-
よ
|
14
|
+
という感じで表示されます(*見やすいように編集してます。)
|
6
15
|
|
16
|
+
mainの最後のfor文のようにすれば12ヶ月分は表示できそうなのですが月初の曜日のズレや縦に3ヶ月横に4ヶ月分などの表示の仕方がわかりません。
|
7
17
|
|
18
|
+
言語はC言語です。
|
8
19
|
|
20
|
+
よろしくお願いします。
|
9
|
-
#include <stdio.h>
|
21
|
+
```#include <stdio.h>
|
10
22
|
#include <string.h>
|
11
23
|
#define YEAR 2021
|
12
24
|
#define MONTH 1
|
@@ -58,4 +70,6 @@
|
|
58
70
|
getCalender(calender,YEAR,MONTH,WEEKof1);
|
59
71
|
for(int i=0; i< 7; i++) {
|
60
72
|
puts(calender[i]);
|
61
|
-
}
|
73
|
+
}
|
74
|
+
コード
|
75
|
+
```
|