<成人の日拡張版>
CLOSE; DISP OPEN;
/******* A.条件入力 ******************************************************/
$始め:DISP CLR;
DISP [20, 3],"==西暦a年b月の第c回目のd曜日は 何日かを算出します==";
DISP [20, 4]," (例) 成人の日は b=1,c=2,d=月曜日";
$年: DISP [20, 7]," a.西暦年を4桁で指定してください。";
INPUT [20, 8]," (終了は 0) → ",Z10,U(NNNN);
IF Z10=0 THEN GOTO $終了;
$月: INPUT [20, 9]," b.月を 1〜2桁で指定してください。→ ",Z11,U(NN);
IF Z11<1 OR 12<Z11 THEN GOTO $月;
$回: INPUT [20,10]," c.第?何回目 (5以下) → ",X12,U(N);
IF X12<1 OR 5<X12 THEN GOTO $回;
$曜日:SELECT [20,11],"d.曜日指定",X13,"日","月","火","水","木","金","土";
LET V13=KMID$("日月火水木金土",X13,1); /*曜日_文字表現 */
LET X13=X13-1; /*曜日_日曜日が0*/
DISP [20,11]," d.指定された曜日は: ",V13,"曜日";
/******* B.計算 *********************************************************/
$計算:LET X22=INTG(DATENUM(Z10*10000+Z11*100+1) MOD 7);
LET X23=(-X22+X13+1)+(X22-X13+6)/7*7+(X12-1)*7;
$判定:LET Z01=Z10*10000+Z11*100+DCML(X23);
LET Z02=DATENUM(Z01);
IF ERR(0)=0 THEN GOTO $結果;
DISP [20,14],"指定された日は、存在しません。";
GOTO $再試;
/******* C.結果表示 *****************************************************/
$結果:DISP [20,14], Z10,"年",Z11,"月の第",X12,V13,"曜日は";
DISP [20,15]," 【 ",X23," 日 】";
DISP [20,16],"です。";
/******* Z.終了 *********************************************************/
$再試:INPUT [20,20],"終了:0 再度計算:1 → ",V01,U(N);
IF V01="0" THEN GOTO $終了;
IF V01="1" THEN GOTO $始め ELSE GOTO $再試;
$終了:CLOSE; STOP;