|
25 Years of Programming
An open source source for C, C++, OWL, BASIC, MDB, XLS, DOT, and more... |
Home Projects Up Sitemap Search Blog Forum+Chat About Us Privacy Terms of Use Feedback FAQ Images Services Payments Humor Music |
Calculate number of days between dates, Microsoft MBASIC programThe NUMDAYS.BAS program written for the Heathkit H-89 computer in Microsoft MBASIC calculates the number of days between two dates. It is useful for financial calculations such as those involving interest payments or accruals, and in calculations to determine fair stock, bond, or stock option prices. The data are also used sometimes when attempting to predict likely future prices for those financial instruments. On the H-89, each year takes about 13 seconds to calculate. |
10 REM PROGRAM 'NUMDAYS.BAS' 20 REM COPYRIGHT (C)1982, 2001 STEVEN WHITNEY. 21 REM Initially published by http://25yearsofprogramming.com. 22 REM Published under GNU GPL (General Public License) Version 3, with ABSOLUTELY NO WARRANTY. 30 DATA 31,28,31,30,31,30,31,31,30,31,30,31 40 DEFINT A-S, U-Z: DEFDBL T 45 CLS 50 PRINT STRING$(75, "="): PRINT , "*** NUMBER OF DAYS BETWEEN TWO DATES ***": PRINT 60 PRINT , "PLEASE SEPARATE DATE COMPONENTS BY COMMAS :" 70 PRINT , SPC(3); "JANUARY 10, 1982 ==> 1,10,1982" 80 PRINT STRING$(75, "-"): PRINT 90 PRINT , , "ENTER START DATE 0,0,0, TO STOP PROGRAM" 100 PRINT 110 N = 0 120 INPUT "STARTING DATE (MONTH,DAY,YEAR): "; B, C, A 130 IF B = 0 AND C = 0 AND A = 0 THEN END 140 IF B < 1 OR B > 12 OR C < 1 OR (B = 2 AND C > 29) OR ((B = 4 OR B = 6 OR B = 9 OR B = 11) AND C > 30) OR C > 31 THEN PRINT , "IMPOSSIBLE": GOTO 120 150 IF (A / 100 = INT(A / 100) AND A / 400 = INT(A / 400) AND B = 2 AND C > 29) OR (A / 100 = INT(A / 100) AND A / 400 <> INT(A / 400) AND B = 2 AND C > 28) THEN PRINT , "IMPOSSIBLE": GOTO 120 160 INPUT " ENDING DATE (MONTH,DAY,YEAR): "; F, G, E 170 IF F < 1 OR F > 12 OR G < 1 OR (F = 2 AND G > 29) OR ((F = 4 OR F = 6 OR F = 9 OR F = 11) AND G > 30) OR G > 31 THEN PRINT , "IMPOSSIBLE": GOTO 160 180 IF (E / 100 = INT(E / 100) AND E / 400 = INT(E / 400) AND F = 2 AND G > 29) OR (E / 100 = INT(E / 100) AND E / 400 <> INT(E / 400) AND F = 2 AND G > 28) THEN PRINT , "IMPOSSIBLE": GOTO 160 190 B$ = STR$(B): IF LEN(B$) < 3 THEN B$ = "0" + RIGHT$(B$, 1) 200 C$ = STR$(C): IF LEN(C$) < 3 THEN C$ = "0" + RIGHT$(C$, 1) 210 F$ = STR$(F): IF LEN(F$) < 3 THEN F$ = "0" + RIGHT$(F$, 1) 220 G$ = STR$(G): IF LEN(G$) < 3 THEN G$ = "0" + RIGHT$(G$, 1) 230 T1 = VAL(STR$(A) + B$ + C$): REM START DATE 240 T2 = VAL(STR$(E) + F$ + G$): REM END DATE 250 IF T2 < T1 THEN PRINT : PRINT "END DATE IS PRIOR TO START DATE - START FROM BEGINNING": PRINT STRING$(75, "="): GOTO 90 260 GOTO 330 270 C = C + 1 280 N = N + 1 290 IF C > D THEN B = B + 1: C = 1: K = 1 300 IF B > 12 THEN A = A + 1: B = 1: D = 31: K = 0 310 IF A = E AND B = F AND C = G THEN 380 320 IF K = 0 THEN 370 330 RESTORE 340 FOR I = 1 TO B: READ D: NEXT I 350 IF A / 4 = INT(A / 4) AND B = 2 THEN D = 29: IF A / 100 = INT(A / 100) THEN D = 28: IF A / 400 = INT(A / 400) THEN D = 29 360 K = 0 370 GOTO 270 380 PRINT : PRINT , "DIFFERENCE IS", N; "DAYS.": GOTO 80 390 REM COPYRIGHT (C)1982 STEVEN WHITNEY.
|
|
|
|
|
|
Copyright ©2010 Steven Whitney. Last modified Thu 10/21/2010 02:08:03 -0700. |
||