質問編集履歴

3

説明

2023/05/15 11:41

投稿

mgwgw
mgwgw

スコア2

test CHANGED
File without changes
test CHANGED
@@ -129,9 +129,9 @@
129
129
  ```
130
130
 
131
131
  C言語始めたての初心者です。
132
- C言語を用いてカレンダーの作成をしています。ツェラーの公式等を使用しないでfor文・if文で作成したいです。
132
+ C言語を用いてカレンダーの作成をしています。ツェラーの公式等を使用しないで簡単な形でfor文・if文で作成したいです。
133
133
 
134
+ 2000年1月を基準として行っています。
134
- コードを組んみると・・・
135
+ バイスいただければ幸いす。
135
- 2000年1月を基準にして曜日計算を行っているのですが、閏年のためうまくいきません。符号等を上手く合わせようとしていますが、2000年3月からズレてしまいます。アドバイスをいただければ幸いです。
136
136
 
137
137
 

2

文法の修正

2023/05/15 10:28

投稿

mgwgw
mgwgw

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,7 @@
1
1
  C言語を用いてカレンダーの作成をしています。
2
2
 
3
+ ```ここに言語を入力
4
+ コード
3
5
  #define _CRT_SECURE_NO_WARNINGS
4
6
  #include <stdio.h>
5
7
  #define BASEYEAR 2000
@@ -11,7 +13,7 @@
11
13
  void main(void)
12
14
  {
13
15
  /*変数の宣言*/
14
- int day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }; /*月末*/
16
+
15
17
  int year = 0;
16
18
  int month = 0;
17
19
  int firstday = 0;
@@ -38,6 +40,8 @@
38
40
  }
39
41
  printf("月は1~12の範囲で入力してください。\n");
40
42
  }
43
+
44
+ int day[12] = { 31,28 + leap_year(year),31,30,31,30,31,31,30,31,30,31 }; /*月末*/
41
45
 
42
46
  /* 1日の曜日を取得 */
43
47
  firstday = day_week(year, month, day);
@@ -86,40 +90,43 @@
86
90
  }
87
91
  return 0;
88
92
  }
89
-
90
93
  /*曜日計算の関数*/
91
- int day_week(int year, int month, int *day)
94
+ int day_week(int year, int month, int* day)
92
95
  {
93
96
  int yy = 0;
94
97
 
95
- /*曜日は1年で1日進む*/
98
+ /*2000年以降の曜日計算*/
96
- yy = (year - BASEYEAR);
97
-
98
- if (year >= BASEYEAR)
99
+ if (BASEYEAR < year)
99
100
  {
100
101
  for (int i = BASEYEAR; i < year; i++)
101
102
  {
102
- yy += leap_year(i) + 1;
103
+ yy += 1 + leap_year(i) ;
103
104
  }
104
105
  }
106
+
107
+ /*2000年より前の曜日計算*/
108
+ else if (year < BASEYEAR) /*1996年からずれている*//*うるう年は+6でなく+7されている*/
109
+ {
105
- else if (year < BASEYEAR)
110
+ for (int i = year; i < BASEYEAR; i++)
111
+ {
112
+ yy += 6 + leap_year(i);
113
+ }
114
+ }
115
+ /* 各月分の日付を足す */
116
+
117
+ for (int i = 1; i < month; i++)
106
118
  {
107
- for (int i = year; i < BASEYEAR; i++)
108
- {
109
- yy += leap_year(i) + 5;
119
+ yy += day[i - 1];
110
- }
111
120
  }
112
- /* 各月分の日付を足す */
121
+
113
- for (int i = 0; i < month; i++)
114
- {
115
- yy += day[i];
116
- }
117
122
  /* 最後に7で割ると、その月の1日の曜日が求まる */
123
+
118
124
  yy %= 7;
119
125
 
120
126
  return yy;
121
-
122
127
  }
128
+
129
+ ```
123
130
 
124
131
  C言語始めたての初心者です。
125
132
  C言語を用いてカレンダーの作成をしています。ツェラーの公式等を使用しないでfor文・if文で作成したいです。

1

C言語のタグ

2023/05/14 09:38

投稿

mgwgw
mgwgw

スコア2

test CHANGED
File without changes
test CHANGED
File without changes