指定された年月日の曜日を求める

説明

指定された年月日の曜日を求めるにはツェラーの公式を使います。なお、このプログラムは現在の暦(グレゴリオ暦)に基づいて計算しています。

ツェラーの公式 - Wikipedia

Studioで試す

以下のリンクから Jasmine Tea でこのサンプルプログラムを Studio 画面で開いて実際に試すことができます。プログラムを実行したいときは、エディターの右下にある青色の「実行」ボタンを押してください。

Studio で開く

プログラム

// 指定された年月日の曜日を求める
cls
a@=["土","日","月","火","水","木","金"]
input "西暦4桁を入れてください",y
input "月を入れてください",m
input "日を入れてください",d
yy=y
mm=m
if m<3 then
  m=m+12
  y=y-1
end if
j=int(y/100)
k=y%100
h=(d+int((26*(m+1))/10)+k+int(k/4)+int(j/4)-2*j)%7
print yy;"年";mm%12;"月";d;"日(";a@[h];")"

function int(n)
  a$=str$(n)
  b$=""
  for i=0 to len(a$)-1
    c$=mid$(a$,i,1)
    d=asc(c$)
    if d<48 or d>57 then
      return val(b$)
    else
      b$=b$+c$
    end if
  next
  return val(b$)
end function

解説

2行目で画面を消去しています。

3行目で表示する曜日を配列に入れておきます。ツェラーの公式では0が土曜日、1が月曜日...6が金曜日となるので、この順番に配列要素を設定しておきます。

4行目で西暦年を入力するようにしています。

5行目で月を入力するようにしています。

6行目で日を入力するようにしています。

7,8行目で入力した年月を変数に入れています。これは計算時に年月が変更されてしまうため元の年月を変数に保存しておいて最後に年月日を表示する時に使うためです。

9行目では月の値が3未満、つまり1月か2月かを調べています。これはツェラーの公式では1,2月は前年の13月、14月として扱う必要があるためです。

10行目で月に12を加算しています。これにより1月なら13、2月なら14となります。

11行目では年から1を引きます。

13行目から15行目までがツェラーの公式による曜日計算になります。なお、int()は正数値の小数点以下を切り捨てる関数です。この関数は18行以降で定義しています。

16行目で年月日と計算した曜日を表示しています。曜日は計算した値を配列の添字として使用することで簡単に表示できます。

18行目から31行目までが正数値切り捨て関数です。この関数は数値を一旦文字列に変換します。変換後に文字列を先頭から1文字ずつ読み出します。読み出した文字を文字コードに変換し0〜9までの数字かどうかを調べます。数値なら文字列として連結します。そうでなければval()を使って連結した文字列を数値に変換して呼び出し元に返します。