Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Challenge: Compute the number of Tuesdays since a given date
#21
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
Reply


Messages In This Thread
Challenge: Compute the number of Tuesdays since a given date - by Neo - 06-21-2004, 05:08 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)