サマーウォーズのモジュロ演算

 投稿者:falcon(初心者)  投稿日:2010年 8月14日(土)23時21分12秒
  突然申し訳ありません。自分でモジュロ演算を作ってみようとしたのですが、どうしてもうまくいきません。ご指摘おねがいできませんでしょうか?
普通なら、0が土曜日、1が日曜日、6が金曜日になるはずなのですが・・・


REM モジュロ演算
INPUT PROMPT "生まれた日":A
INPUT PROMPT "生まれた月":B
INPUT PROMPT "生まれた年(1900年~2100年まで)":C
IF C < 1900 THEN
   PRINT "計算できません"
ELSEIF C < 2000 THEN
   LET D = 19
   LET K = 38
   LET E = MOD(C , 100 )
   LET F = INT(26*(A+1)/10)
   LET G = INT(E/4)
   LET H = INT(D/4)
   LET I = MOD((A+F+E+G+H-K ), 7 )

ELSEIF C < 2100 THEN
   LET J = 20
   LET L = 40
   LET E = MOD(C , 100 )
   LET F = INT(26*(A+1)/10)
   LET G = INT(E/4)
   LET H = INT(D/4)
   LET I = MOD((A+F+E+G+H-40 ), 7 )

ELSEIF C > 2100 THEN
   PRINT "計算できません"
END IF
IF I = 6 THEN
   PRINT "土曜日です"
ELSEIF I = 5 THEN
   PRINT "日曜日です"
ELSEIF I = 4 THEN
   PRINT "月曜日です"
ELSEIF I = 3 THEN
   PRINT "火曜日です"
ELSEIF I = 2 THEN
   PRINT "水曜日です"
ELSEIF I = 1 THEN
   PRINT "木曜日です"
ELSEIF I = 0 THEN
   PRINT " 金曜日です"
END IF
END
 

Re: サマーウォーズのモジュロ演算

 投稿者:山中和義  投稿日:2010年 8月15日(日)07時07分10秒
  > No.1343[元記事へ]

falcon(初心者)さんへのお返事です。

> 普通なら、0が土曜日、1が日曜日、6が金曜日になるはずなのですが・・・
!映画『サマーウォーズ』と曜日の計算
!変数Hが、0なら土曜日、1なら日曜日、2なら月曜日、……、6なら金曜日となる

LET Y=2010 !年
LET M=8 !月
LET D=15 !日

IF M<3 THEN !月による補正
   LET M=M+12 ! !y年1,2月をy-1年13,14月へ
   LET Y=Y-1
END IF
LET J=INT(Y/100) !年の上2桁
LET K=MOD(Y,100) !年の下2桁
LET H=MOD(D+INT((M+1)*26/10)+K+INT(K/4)+INT(J/4)-2*J,7)

PRINT H

END
 

Re: サマーウォーズのモジュロ演算

 投稿者:falcon(初心者)  投稿日:2010年 8月15日(日)22時22分28秒
  > No.1344[元記事へ]

山中様、ありがとうございます!
生まれた年の千の位、百の位はINT(Y/100)で表せるのですね。
書いてある通りに書き換えてみると見事演算出来るようになりました。
簡単な計算を組み立てる難しさ、楽しさを知ることが出来ました。
このような簡単な質問に答えていただき、
本当にありがとうございました。
 

戻る