質問するログイン新規登録

質問編集履歴

7

コード修正と新たな問題

2021/01/23 07:16

投稿

kkk69
kkk69

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- コードを改良して1年間のカレンダーを作りたい
1
+ コードを改良して1年間のカレンダーを作りたい(曜日と日付の並びをそろえたい)
body CHANGED
@@ -62,10 +62,7 @@
62
62
  }
63
63
  }
64
64
  }
65
- //指定年月の1日の週の番号を求める(日:0、月:1、...、土:6)
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

コードを修正し新たに曜日と日付のずれが生じました

2021/01/23 07:16

投稿

kkk69
kkk69

スコア2

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
- 10 11 12 13 14 15 16
6
+ ![このように曜日か一つずつずれてしまいます。](cf05c3548676784041ac57f2e37ca6ab.png)
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[7][MON_WIDTH],int y, int m, int wof) {
30
+ void getCalender(char s[8][MON_WIDTH], int y, int m, int wof)
31
+ {
38
- int cal[5][7];
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++) cal[0][i] = 0;
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
- int row = (wof+d) / 7;
40
+ int row = (wof + d) / 7;
46
- int col = (wof+d) % 7;
41
+ int col = (wof + d) % 7;
47
- cal[row][col] = d+1;
42
+ cal[row][col] = d + 1;
48
43
  }
49
- for(i=wof+dom;i < 7*5; i++) {
44
+ for (i = wof + dom; i < 7 * 6; i++) {
50
- int row = i / 7;
45
+ int row = i / 7;
51
- int col = i % 7;
46
+ int col = i % 7;
52
- cal[row][col] = 0;
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 < 5; i++) {
53
+ for (i = 0; i < 6; i++) {
59
- s[i+2][0] = '\0';
54
+ s[i + 2][0] = '\0';
60
- char tmp[10];
55
+ char tmp[10];
61
- for(d = 0; d < 7; d++) {
56
+ for (d = 0; d < 7; d++) {
57
+ if (cal[i][d] == 0)
62
- if(cal[i][d] == 0) sprintf(tmp, " ");
58
+ sprintf(tmp, " ");
59
+ else
63
- else sprintf(tmp," %2d",cal[i][d]);
60
+ sprintf(tmp, " %2d", cal[i][d]);
64
- strcat(s[i+2],tmp);
61
+ strcat(s[i + 2], tmp);
65
- }
62
+ }
66
63
  }
67
64
  }
68
-
65
+ //指定年月の1日の週の番号を求める(日:0、月:1、...、土:6)
66
+ //year:年
69
- void main(void) {
67
+ //month:月
70
- char calender[7][MON_WIDTH];
68
+ //this_year_wof1:当該年の1月1日の週の番号
71
- getCalender(calender,YEAR,MONTH,WEEKof1);
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(int i=0; i< 7; i++) {
74
+ for (m = 1; m < month;m++){
73
- puts(calender[i]);
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

実行結果を修正しました

2021/01/23 07:14

投稿

kkk69
kkk69

スコア2

title CHANGED
File without changes
body CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  下のコードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいです。
4
4
  現在実行すると
5
+
5
-   2021年1月
6
+ 2021年 1月
6
7
  日 月 火 水 木 金 土
7
- 1 2
8
+ 1 2
8
- 3 4 5 6 7 8 9
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

実行結果と日本語の誤りを修正しました

2021/01/22 10:53

投稿

kkk69
kkk69

スコア2

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

コードの欠けていた部分を追記しました

2021/01/22 10:52

投稿

kkk69
kkk69

スコア2

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,8 @@
18
18
  言語はC言語です。
19
19
 
20
20
  よろしくお願いします。
21
+ ```
21
- ```#include <stdio.h>
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

2021/01/22 10:29

投稿

kkk69
kkk69

スコア2

title CHANGED
File without changes
body CHANGED
File without changes

1

2021/01/22 05:47

投稿

kkk69
kkk69

スコア2

title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,24 @@
1
- コードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいのですがどこをどのように書き換えて、追記すればいいかわかりません。
1
+ 粗末な質問仕方ですませんでした
2
2
 
3
+ 下のコードを改良して、縦に3か月横に4か月分の1年間分のカレンダーを作りたいです。
3
- 言語はC言語で
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
+ ```