06-21-2004, 05:08 PM
Hrmm, I couldn't post this very simple solution of mine earlier, but here it is still:
Code:
' =================================================
' Day Counter
'
' By Neo Deus Ex Machina
' Simplest form I could make up ... ;)
'
' Saturday 19th of June 2004
' =================================================
DECLARE SUB InitData ()
DECLARE SUB GetInput ()
DECLARE SUB Calculate ()
DEFINT A-Z
'$DYNAMIC
DIM SHARED DaysPerMonth(1 TO 12) AS INTEGER
DIM SHARED MonthsName(1 TO 12) AS STRING
DIM SHARED DaysName(1 TO 7) AS STRING
DIM SHARED TodayDay AS INTEGER
DIM SHARED TodayMonth AS INTEGER
DIM SHARED TodayYear AS INTEGER
DIM SHARED NowIndex AS INTEGER
DIM SHARED NowDay AS INTEGER
DIM SHARED NowMonth AS INTEGER
DIM SHARED NowYear AS INTEGER
DIM SHARED NumReqDays AS LONG
DIM SHARED DayCount AS INTEGER
'NOTE:
' 1-1-1900 was a Sunday (backtracked)
InitData
GetInput
Calculate
PRINT
SYSTEM
SUB Calculate
NowDay = 1
NowMonth = 1
NowYear = 1900
NowIndex = 7
NumReqDays = 0
IF INT(NowYear / 4) * 4 = NowYear THEN DaysPerMonth(2) = 29 ELSE DaysPerMonth(2) = 28
IF NowIndex = DayCount THEN NumReqDays = NumReqDays + 1
DO UNTIL NowDay >= TodayDay AND NowMonth >= TodayMonth AND NowYear >= TodayYear
NowDay = NowDay + 1
IF NowDay > DaysPerMonth(NowMonth) THEN
NowDay = 1
NowMonth = NowMonth + 1
IF NowMonth > 12 THEN
NowMonth = 1
NowYear = NowYear + 1
IF INT(NowYear / 4) * 4 = NowYear THEN DaysPerMonth(2) = 29 ELSE DaysPerMonth(2) = 28
END IF
END IF
NowIndex = NowIndex + 1
IF NowIndex > 7 THEN NowIndex = 1
IF NowIndex = DayCount THEN NumReqDays = NumReqDays + 1
LOOP
CLS
BackPrint$ = ""
IF NowDay MOD 10 = 1 THEN
BackPrint$ = "st"
ELSEIF NowDay MOD 10 = 2 THEN
BackPrint$ = "nd"
ELSEIF NowDay MOD 10 = 3 THEN
BackPrint$ = "rd"
ELSE
BackPrint$ = "th"
END IF
PRINT NumReqDays; DaysName(DayCount) + "s had passed since Sunday 1st of January 1900 up to"
PRINT " and including "; DaysName(NowIndex); STR$(NowDay) + BackPrint$ + " of "; MonthsName(NowMonth); NowYear
END SUB
SUB InitData
DaysPerMonth(1) = 31
DaysPerMonth(2) = 28
DaysPerMonth(3) = 31
DaysPerMonth(4) = 30
DaysPerMonth(5) = 31
DaysPerMonth(6) = 30
DaysPerMonth(7) = 31
DaysPerMonth(8) = 31
DaysPerMonth(9) = 30
DaysPerMonth(10) = 31
DaysPerMonth(11) = 30
DaysPerMonth(12) = 31
MonthsName(1) = "January"
MonthsName(2) = "February"
MonthsName(3) = "March"
MonthsName(4) = "April"
MonthsName(5) = "May"
MonthsName(6) = "June"
MonthsName(7) = "July"
MonthsName(8) = "August"
MonthsName(9) = "September"
MonthsName(10) = "October"
MonthsName(11) = "November"
MonthsName(12) = "December"
DaysName(1) = "Monday"
DaysName(2) = "Tuesday"
DaysName(3) = "Wednesday"
DaysName(4) = "Thursday"
DaysName(5) = "Friday"
DaysName(6) = "Saturday"
DaysName(7) = "Sunday"
END SUB
SUB GetInput
PRINT "This program can give the number of specific days passed up to a given date"
PRINT
DO
PRINT "Enter the year (>= 1900 and <= 32000):"
INPUT "", TYEAR$
LOOP UNTIL VAL(TYEAR$) >= 1900 AND VAL(TYEAR$) <= 32000
PRINT
DO
PRINT "Enter the month (>= 1 and <= 12):"
INPUT "", TMONTH$
LOOP UNTIL VAL(TMONTH$) >= 1 AND VAL(TMONTH$) <= 12
PRINT
DO
PRINT "Enter the day (>= 1 and <= 31 and existing):"
INPUT "", TDAY$
LOOP UNTIL VAL(TDAY$) >= 1 AND VAL(TDAY$) <= 31
PRINT
DO
EXIST = 0
PRINT "Enter the name of the day to count (e.g. tuesday) in English:"
INPUT "", DAY$
FOR I = 1 TO 7
IF LCASE$(LTRIM$(RTRIM$(DAY$))) = LCASE$(LTRIM$(RTRIM$(DaysName(I)))) THEN EXIST = I
NEXT I
LOOP UNTIL EXIST > 0
TodayDay = VAL(TDAY$)
TodayMonth = VAL(TMONTH$)
TodayYear = VAL(TYEAR$)
DayCount = EXIST
END SUB