質問

質問者:yuuji159 X月Y日がZ曜日なのは西暦何年か
困り度:
  • 暇なときにでも
X月Y日がZ曜日なのは西暦何年かをだすにはどうすればいいのでしょう?
質問投稿日時:05/08/27 17:52
質問番号:1608717
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答20pt

回答者:hrm_mmm 曜日の算出はツェラーの公式で算出すれば、あとは#1さんのご回答をコーディングするのみで1582年10月15日(金)以降対応となります

ツェラーの公式
http://easycgi.xrea.jp/tips/perl/zeller.htm

んでコーディングしてみました。
### ex. 1583年から2100年までで、10月10日が月曜日となる年は?
$mon = 10;
$day = 10;
$j = 0; ##カウンター
for( $i=1583; $i<=2100; $i++){
if( $mon<3){$year = $i-1; $month=$mon+12;}else{$year=$i;$month=$mon;}
$week = ($year + int($year/4) - int($year/100) + int($year/400) + int((13*$month + 8)/5) + $day) %7;
if ( $week == 1 ){
$j ++;
print "$i,";
}
}
print "<br>$j回ありました.";
### result 75回、ちゃんと今年も入っていたから計算間違いはないはず。
前後を適宜補って実行してみてください
種類:回答
どんな人:一般人
自信:自信あり
回答日時:05/08/27 21:45
回答番号:No.5
この回答へのお礼ツェラーの公式っていうのがあるんですね。これを使えばなんとかできそうです。
いろいろと詳しくありがとうございました。

回答

良回答10pt

回答者:mitochan1975 Perlに関しては無知ですが・・・ロジックなら分かります。

ただ、関数も当然しらないのでご容赦を。
まず、年月日が分からないと曜日は出しようがないので、
年(西暦)の幅を決めます。

その西暦(i)の幅で、ループさせます。
ループ内において、i年X月Y日の曜日を出します。
その曜日がZ曜日ならば、iを予め用意した配列に入れます。
ループ終了後に、配列にある全ての西暦が結果です。

どうですかねぇ。
種類:回答
どんな人:一般人
自信:参考意見
回答日時:05/08/27 18:07
回答番号:No.1
この回答へのお礼回答ありがとうございます。
なるほど、それならできそうですね。
最新から表示回答順に表示良回答のみ表示