<成人の日> /*********************************************************************/ /* V01 西暦年(4桁の数字) */ /* V02 年月日(8桁の数字--文字列) */ /* V03 成人の日の「日」(1 or 2桁の数字) */ /* Z02 年月日(8桁の数字--実数) */ /* Z03 Z02 の日付連番 */ /* Z04 日付連番(Z03)を7で割った余り */ /*********************************************************************/ $年: ACCEPT "西暦何年? (YYYY)",V01; /* 年=4桁の数字 */ IF ERR(0)=55 THEN GOTO $END; IF LEN(V01)<4 | >4 THEN GOTO $年; IF VAL(V01)<1000 THEN GOTO $年; LET V02=V01+"0108"; /* 年月日=8桁の数字 */ LET Z02=VAL(V02); $連番: LET Z03=DATENUM(Z02); /* DATENUM:日付連番を求める関数 */ LET Z04=Z03 MOD7; /* MOD:割り算の剰余を求める演算記号 */ IF Z04=1 THEN GOTO $月曜; LET Z02=Z02+1; GOTO $連番; $月曜: LET V02=NUM$(Z02); /* NUM$:整数・実数を文字列に変換する */ LET V03=NUM$(IVAL(RIGHT$(V02,7))); /* IVAL:文字列の数字を整数に変換 */ $表示: BELL; MESSAGE FORM$(V01,5)+"年の成人の日は1月"+FORM$(V03,5)+"日です"; /* FORM$(・・,5):半角文字を全角に変換 */ $END: STOP; <曜日> 【 Ver.01.01 19950721 】 曜日を求める $??: CLEAR Z1,2/11 & V1,4; ACCEPT "年月日は?(YYYYMMDD)",Z1; /* Z1 = YYYYMMDD */ $CHK1: IF ERR(0)=55 THEN STOP; /* [ESC] が押された */ $CHK2: IF Z1=0 THEN STOP; /* "0" が押された */ $CHK3: IF Z1<10101 THEN GOTO $??; /* 西暦1年1月1日以前 */ LET Z11=DATENUM(Z1); /* Z11 = 日付連番 */ $CHK4: IF Z11=0 THEN GOTO $??; /* あり得ない日付 */ $CHK5: IF Z1>=1000101 THEN GOTO $連番; LET Z11=DATENUM(Z1+20000000)-730485; /* Z1 が 991231 以前 */ $連番: LET Z2=Z11 MOD7; /* Z2 = 曜日連番 */ LET V4=KMID$("日月火水木金土",INTG(Z2)+1,1)+"曜日"; $表示: LET V1=NUM$(YEAR(Z11))+"年"; /* V1 = YYYY年 */ LET V2=NUM$(MONTH(Z11))+"月"; /* V2 = MM月 */ LET V3=NUM$(DAY(Z11))+"日"; /* V3 = DD日 */ MESSAGE V1+V2+V3+"は "+V4+" です"; /* 日付と曜日を表示 */ GOTO $??; STOP;