SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

人生日数計算

※(2020/5/11)プログラムを作り直してシンプルに。
自分の誕生日と現在の日付を入力すると、生まれてから何日生きているかを計算します。

f:id:shiro0922:20200511150426p:plain
2013年1月1日生まれの子どもが、2020年5月11日までに何日生きているかを計算

紙に書いて手計算して、答え合わせをしてみるといいでしょう。

なお、日数が32767日(約89歳)を越えてマイナスになる場合(符号付き16ビット整数)ですが、+65536した日数を計算して表示しています(210〜340行)。
これで0歳〜179歳までの人に対応できます。

プログラム

10 CLS:?"*** LIFE DAYS ***"
20 CLV
30 ?:?"---Birthday"
40 ?"Year=";:INPUT B
50 ?"Month=";:INPUT C
60 ?"Day=";:INPUT D
70 ?:?"---Now"
80 ?"Year=";:INPUT Y
90 ?"Month=";:INPUT M
100 ?"Day=";:INPUT E
110 IF C<=2 B=B-1:C=C+12
120 IF M<=2 Y=Y-1:M=M+12
130 A=365*(Y-B)
140 A=A+Y/4-B/4
150 A=A-Y/100+B/100
160 A=A+Y/400-B/400
170 A=A+306*(M+1)/10-306*(C+1)/10
180 A=A+E-D
190 ?:?"LIFE DAYS=";
200 IF A>=0 ?A:END
210 FOR I=0 TO 4
220 [I]=A%10:[I]=-[I]
230 A=A/10
240 NEXT
250 LET [10],6,3,5,5,6
260 FOR I=0 TO 4
270 F=[I+10]-[I]
280 IF F<0 F=F+10:[I+21]=-1
290 [I+20]=[I+20]+F
300 NEXT
310 FOR I=4 TO 0 STEP -1
320 ?[I+20];
330 NEXT
340 ?

誕生日から現在までの日数計算は、西暦1年1月1日からの日数を計算するフェアフィールドの公式

365y+[y/4]-[y/100]+[y/400]+[306(m+1)/10]+d-428
※yは年、mは月、dは日。[]は小数点以下切り捨て。ただし1月・2月は前年の13月・14月とする

を差し引きに変形して計算しています。
現在の西暦(グレゴリオ暦)のうるう年(2月29日があって1日増える年)にするルールは、

  1. 西暦が4で割り切れる年はうるう年とする
  2. ただし西暦が100で割り切れる年は平年とする
  3. ただし西暦が400で割り切れる年はうるう年とする

です。例えば2020年はルール1によりうるう年、1900年はルール2により平年、2000年はルール3によりうるう年です。
上の公式はそのルールをそのまま計算しています。
実際は、1900年に生まれた人はもう生きておらず、2000年はそのままうるう年なので、人生日数計算ではルール1「4で割り切れる年」だけ考えればよいです。プログラムでは一応公式どおりに計算しています。

IchigoJam web版

web版での実行はこちら。再計算する時はF5キーを押してください。