初めまして、こんにちは
実は学校の課題でこのプログラムを入力した年月の先月、今月、来月の3ヶ月分を横に表示したいんですが……。なかなかうまくいかず苦戦しています。
どなたかお願いします!!m(_ _)m
#include <stdio.h>
int main(void)
{
int month[/url]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,bias,s,week,i;
while (1){
printf("\n\n西暦の年 月 ? ");
scanf("%d %d",&y,&m);
if((y%4==0 && y%100!=0) || y%400==0)
month[2]=29;
else
month[2]=28;
bias=y+(y-1)/4-(y-1)/100+(y-1)/400; //y年1月1日の日曜日からのズレ
s=0;
for(i=1;i<m;i++)
s=s+month;
week=(bias+s)%7; //1日の曜日
printf(" ---%d年%d月---\n",y,m);
printf(" sun mon tue wed thu fri sat\n");
for(i=0;i<week*4;i++)
printf(" ");
for(i=1;i<=month[m];i++){
printf("%4d",i);
if((week+i)%7==0)
printf("\n");
}
}
}
お願いします!!
Re:お願いします!!
ヒントをいくつか。
・ある月のカレンダーは6週にまたがることがある。
・その月の初日の曜日を求めたら、見かけ上の第一日曜日の日付を求める。
例)2007年2月1日は木曜日。よって、2007年2月の第一日曜日は-3日。
・とにかく、6週間(42日)分の日付を出力しようと試みる。その際、
1日~当月の末日以外の日付は空白を出力すればよい。
例)2007年2月の場合、-3日~38日の42日分を出力しようと試みる。
末日は28日なので、-3~0、29~38の各日は空白を出力する。
・3ヶ月分を出力したいので、年、月、初日の曜日、第一日曜日の日付あたりのデータを
3ヶ月分保持する。前月が前年12月になる場合に注意する。
・出力は、以下のとおり行なう。
1行目:年月の見出し(3ヶ月分)
2行目:曜日の見出し(同上)
3行目:各月の1週目(同上)
4行目:各月の2週目(同上)
・
・
8行目:各月の6週目(同上)
p.s.
「お願いします」じゃなくて「カレンダーの出力について」くらいの
タイトルを付けていただきたいです。
何をお願いしたいのか、その「何」の部分が重要です。
・ある月のカレンダーは6週にまたがることがある。
・その月の初日の曜日を求めたら、見かけ上の第一日曜日の日付を求める。
例)2007年2月1日は木曜日。よって、2007年2月の第一日曜日は-3日。
・とにかく、6週間(42日)分の日付を出力しようと試みる。その際、
1日~当月の末日以外の日付は空白を出力すればよい。
例)2007年2月の場合、-3日~38日の42日分を出力しようと試みる。
末日は28日なので、-3~0、29~38の各日は空白を出力する。
・3ヶ月分を出力したいので、年、月、初日の曜日、第一日曜日の日付あたりのデータを
3ヶ月分保持する。前月が前年12月になる場合に注意する。
・出力は、以下のとおり行なう。
1行目:年月の見出し(3ヶ月分)
2行目:曜日の見出し(同上)
3行目:各月の1週目(同上)
4行目:各月の2週目(同上)
・
・
8行目:各月の6週目(同上)
p.s.
「お願いします」じゃなくて「カレンダーの出力について」くらいの
タイトルを付けていただきたいです。
何をお願いしたいのか、その「何」の部分が重要です。