Calculates loan payments and future value of an investment.
Appears on
Library tape from the Sinclair Computer Users Society (SINCUS).
Source Code
5 REM by Al Laity 10 DATA "JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","end" 99 GO TO 1000 100 CLS 110 FOR X=1 TO 2: PRINT "********************************": NEXT X 120 PRINT "**** THE PERSONAL ACCOUNTANT****" 125 PRINT "**** by Al Laity ****" 130 FOR X=1 TO 2: PRINT "********************************": NEXT X 140 RETURN 300 REM FUTURE VALUE CALCULATION 301 LET FL=0 310 REM C1=ONGOING BAl 311 LET c1=be 320 FOR C=1 TO NY 323 FOR j=1 TO nc 325 LET IN=I*C1: LET A=IN: GO SUB 1200: LET IN=VAL A$: LET y$=a$ 328 LET c1=c1+in+.001: LET a=c1: GO SUB 1200: LET x$=a$: LET c1=VAL a$ 330 IF st=0 THEN GO TO 385 331 RESTORE 10 332 LET d=VAL d$: LET d=d+12/nc: IF d>12 THEN LET d=d-12: LET FL=1 333 LET D$=STR$ D 334 FOR f=1 TO VAL d$: READ f$: IF f$="end" THEN RESTORE 10: READ f$ 335 NEXT F 340 IF st=2 THEN GO TO 375 341 IF FL=1 THEN LET E=VAL E$+1: LET E$=STR$ E: PRINT INVERSE 1;"** YEAR ";E$;" **": LET FL=0 345 PRINT f$;TAB 17-LEN y$;y$;TAB 32-LEN x$;x$ 374 GO TO 385 375 IF FL=1 THEN LET E=VAL E$+1: LET E$=STR$ E: LPRINT INVERSE 1;"** YEAR ";E$;" **": LET FL=0 380 LPRINT f$;TAB 17-LEN y$;y$;TAB 32-LEN x$;x$ 385 NEXT j 393 NEXT C 395 LET A$=STR$ C1 397 LET C$(5)="FUTURE VALUE $"+A$: RETURN 400 REM FU WI INC CALC 401 LET FL=0 410 LET C1=BE 420 FOR c=1 TO ny 430 FOR J=1 TO NC 440 LET INT=R*C1: LET A=INT: GO SUB 1200: LET INT=VAL A$: LET X$=A$ 442 LET INC=0 445 IF J=NC THEN LET INC=IN 450 LET C1=C1+INT+INC: LET A=C1: GO SUB 1200: LET C1=VAL A$: LET Y$=A$ 455 LET a=inc: GO SUB 1200: LET z$=a$ 456 IF st=0 THEN GO TO 600 460 RESTORE 10 470 LET D=VAL D$+12/NC: IF D>12 THEN LET D=D-12: LET FL=1 475 LET D$=STR$ D 480 FOR F=1 TO VAL D$: READ F$ 485 IF F$="end" THEN RESTORE 10: READ f$ 490 NEXT f 500 IF st=0 THEN GO TO 600 510 IF st=2 THEN GO TO 550 515 IF FL=1 THEN LET FL=0: LET E=VAL E$+1: LET E$=STR$ E: PRINT INVERSE 1;"** YEAR ";E$;" **" 520 PRINT f$;TAB (12-LEN z$);z$;TAB (22-LEN X$);X$;TAB (32-LEN Y$);Y$ 530 GO TO 600 550 IF FL=1 THEN LET FL=0: LET E=VAL E$+1: LET E$=STR$ E: LPRINT INVERSE 1;"** YEAR ";E$;" **" 560 LPRINT f$;TAB (12-LEN z$);z$;TAB (22-LEN X$);X$;TAB (32-LEN Y$);Y$ 600 NEXT j 610 NEXT c 620 LET a=c1: GO SUB 1200: LET c$(6)="FUTURE VALUE $"+A$ 650 RETURN 1000 BORDER 6: PAPER 4: BRIGHT 0: INK 0 1010 GO SUB 100 1040 PRINT : PRINT : PRINT : PRINT "1. LOAN PAYMENTS & AMORTIZATIONS" 1050 PRINT : PRINT "2. FUTURE VALUES" 1060 PRINT : PRINT "3. FUTURE VALUE WITH INCREMENT" 1070 INPUT "choose by number - ";a 1080 IF a<1 OR a>3 THEN GO TO 1070 1090 GO TO (a+1)*1000 1200 REM makes a TO a$ with ending zeros 1201 LET b=a*100+.1 1205 LET tem=INT (b) 1210 LET a$=STR$ tem 1220 LET b=LEN (a$) 1221 IF b<3 THEN LET a$="0"+a$: GO TO 1220 1230 LET a$=a$( TO (b-2))+"."+a$((b-1) TO b) 1240 RETURN 1300 REM data to screen 1301 CLS 1305 GO SUB 9900 1310 FOR x=1 TO 2: PRINT "********************************": NEXT x 1320 FOR y=1 TO 6 1325 IF c$(y)=" " THEN GO TO 1340 1330 PRINT c$(y) 1340 NEXT y 1350 FOR x=1 TO 2: PRINT "********************************": NEXT x 1360 RETURN 1400 REM datato printer 1410 PRINT : PRINT : FOR X=1 TO 3: PRINT " DATA TO PRINTER ": NEXT X 1450 FOR x=1 TO 2: LPRINT "********************************": NEXT x 1460 FOR y=1 TO 6: IF C$(Y)=" " THEN GO TO 1480 1470 LPRINT C$(Y) 1480 NEXT Y 1490 FOR x=1 TO 2: LPRINT "********************************": NEXT x 1495 RETURN 1900 CLS : FOR X=1 TO 2: PRINT "********************************": NEXT X 1910 PRINT A$ 1920 FOR X=1 TO 2: PRINT "********************************": NEXT X 1930 RETURN 1950 FOR X=1 TO 2: LPRINT "********************************": NEXT X 1960 LPRINT A$ 1970 FOR X=1 TO 2: LPRINT "*********:*********************": NEXT X 1980 RETURN 2000 REM loan 2001 DIM c$(6,32) 2010 BORDER 5: PAPER 5: CLS 2020 LET a$="********* LOAN PAYMENTS ********": GO SUB 1900 2030 PRINT : PRINT : PRINT 2035 INPUT "AMOUNT OF LOAN ";A$: IF A$="Q" THEN RUN 2040 LET AM=VAL A$ 2041 IF AM>999999.99 THEN GO TO 2040 2042 IF AM<0 THEN GO TO 2040 2045 LET a=am: GO SUB 1200: LET c$(1)="amount of loan $"+a$: PRINT c$(1) 2050 INPUT "number of monthly payments? ";n$: IF N$="Q" THEN RUN 2051 LET NU=VAL N$ 2052 LET c$(2)="number of payments "+STR$ (nu) 2055 PRINT c$(2) 2060 INPUT "interest rate? ";i$: IF I$="Q" THEN RUN 2061 LET I=VAL I$ 2062 LET c$(3)="interest rate "+STR$ (i)+"%": PRINT c$(3) 2064 LET I=I/1200 2065 LET pay=am*(i/(1-(1+i)^(-nu))): LET a=pay: GO SUB 1200 2066 LET pay=VAL a$ 2067 LET c$(4)="payment amount $"+STR$ pay 2070 INPUT "data to printer (y OR n)? ";z$ 2075 GO SUB 1300 2080 IF z$="y" OR Z$="Y" THEN GO SUB 1400 2100 INPUT "shall I prepare a growth table";z$ 2110 IF z$<>"y" AND z$<>"Y" THEN GO TO 9800 2130 LET N=0 2140 LET FL=0 2150 REM growth table 2160 GO SUB 9700 2162 INPUT "data to printer (y OR n)? ";z$ 2165 IF Z$="Y" OR z$="y" THEN GO TO 2500 2170 PRINT 2180 PRINT "DATE INT. PRIN. NEW BAL." 2185 PRINT INVERSE 1;"** year - ";e$;" **": LET a=am: GO SUB 1200: PRINT "**opening balance**";TAB 32-LEN a$;a$ 2190 FOR y=1 TO 1000 2200 GO SUB 2800 2210 IF FL=1 THEN GO TO 2290 2213 LET F$="" 2214 RESTORE 10 2215 FOR F=1 TO VAL D$: READ F$: NEXT F 2220 PRINT F$;TAB (12-LEN x$);x$;TAB (22-LEN y$);y$;TAB (32-LEN z$);z$ 2275 LET M=VAL d$: LET M=M+1: IF M=13 THEN LET M=1 2276 LET d$=STR$ M: IF M<10 THEN LET d$="0"+d$ 2279 IF m=1 THEN LET e=VAL e$: LET e=e+1: LET e$=STR$ e: PRINT INVERSE 1;"** year - ";e$;" **"; INVERSE 0 2280 NEXT y 2290 GO TO 9800 2500 LPRINT : REM GROWTH TABLE TO PRINTER 2510 LPRINT "DATE INT. PRIN. NEW BAL." 2585 LPRINT INVERSE 1;"** year - ";e$;" **": LET a=am: GO SUB 1200: LPRINT "**opening balance**";TAB 32-LEN a$;a$ 2590 FOR y=1 TO 1000 2600 GO SUB 2800 2610 IF FL=1 THEN GO TO 2690 2612 RESTORE 10 2615 FOR F=1 TO VAL D$: READ F$: NEXT F 2620 LPRINT F$;TAB (12-LEN x$);x$;TAB (22-LEN y$);y$;TAB (32-LEN z$);z$ 2675 LET M=VAL d$: LET M=M+1: IF M=13 THEN LET M=1 2676 LET d$=STR$ M: IF M<10 THEN LET d$="0"+d$ 2679 IF m=1 THEN LET e=VAL e$+1: LET e$=STR$ e: LPRINT INVERSE 1;"** year - ";e$;" **" 2680 NEXT y 2700 GO TO 9800 2800 REM calculate 2801 LET N=N+1: IF N>NU THEN LET FL=1: RETURN 2802 LET in=am*i: LET a=in: GO SUB 1200: LET in=VAL a$ 2810 LET p=pay-in+.001: LET am=am-p+.001 2815 IF nu=n AND am<>0 THEN LET p=p+am: LET in=in-am: LET am=0: 2825 LET A=AM: GO SUB 1200: LET z$=A$: LET am=VAL a$ 2830 LET A=IN: GO SUB 1200: LET x$=A$: LET in=VAL a$ 2840 LET A=P: GO SUB 1200: LET y$=A$: LET p=VAL a$ 2845 LET FL=0 2850 RETURN 3000 BORDER 4: PAPER 6: INK 0: CLS 3001 DIM C$(6,32) 3005 LET A$="******** FUTURE VALUES ********" 3006 GO SUB 1900 3007 PRINT : PRINT : PRINT 3009 INPUT "OPENING BALANCE";B$: IF B$="Q" THEN RUN 3010 LET BE=VAL B$ 3015 LET A=BE: GO SUB 1200: LET C$(1)="OPENING BALANCE $"+A$: PRINT C$(1) 3020 IF BE<=0 OR BE>999999.99 THEN GO TO 3000 3021 INPUT "NUMBER OF YEARS ";N$: IF N$="Q" THEN RUN 3025 LET NY=VAL N$ 3028 LET C$(2)="NUMBER OF YEARS "+N$: PRINT C$(2) 3030 INPUT " # OF COMPOUNDINGS PER YEAR CHOOSE ONE OF - (1,2,3,4,6,12) ";N$: IF N$="Q" THEN RUN 3040 LET NC=VAL N$ 3041 IF NC<=0 OR (NC<>1 AND NC<>2 AND NC<>3 AND NC<>4 AND NC<>6 AND NC<>12) THEN GO TO 3030 3045 LET C$(3)="COMPOUNDINGS/YR. "+N$: PRINT C$(3) 3050 INPUT "ANNUAL INTEREST RATE ";I$: IF I$="Q" THEN RUN 3060 LET I=VAL I$: IF I<0 THEN GO TO 3050 3065 LET C$(4)="ANNUAL INT. RATE "+I$+" %": PRINT C$(4) 3066 LET i=i/100 3067 LET st=0 3068 LET i=i/nc 3070 GO SUB 300 3090 INPUT "DATA TO PRINTER ";Z$ 3100 GO SUB 1300: IF Z$="Y" OR Z$="y" THEN GO SUB 1400 3110 INPUT "SHALL I PREPARE A GROWTH TABLE";Z$ 3120 IF Z$<>"Y" AND Z$<>"y" THEN GO TO 9800 3125 GO SUB 9700 3130 INPUT "DATA TO PRINTER (Y OR N)?";Z$ 3140 IF Z$="Y" OR Z$="y" THEN LET st=2: GO TO 3150 3141 LET ST=1 3145 PRINT "DATE INTEREST NEW BALANCE" 3146 PRINT INVERSE 1;"** YEAR ";E$;" **" 3147 LET A=BE: GO SUB 1200: FOR F=1 TO VAL D$: READ F$: NEXT F 3148 PRINT F$;" OPENNING BALANCE";TAB 32-LEN A$;A$ 3149 GO TO 3155 3150 LPRINT "DATE INTEREST NEW BALANCE" 3156 LPRINT INVERSE 1;"** YEAR ";E$;" **" 3157 LET A=BE: GO SUB 1200: RESTORE 10: FOR F=1 TO VAL D$: READ F$: NEXT F 3158 LPRINT F$;" OPENING BALANCE";TAB 32-LEN A$;A$ 3160 GO SUB 300 3200 GO TO 9800 4000 REM future with inc 4010 LET A$="* FUTURE VALUE WITH INCREMENT **": GO SUB 1900 4020 DIM C$(6,32) 4030 PRINT : PRINT : PRINT 4040 INPUT "OPENING BALANCE ";B$: IF B$="Q" THEN RUN 4045 LET BE=VAL B$: IF BE<0 OR BE>999999.99 THEN GO TO 4040 4050 LET A=BE: GO SUB 1200: LET C$(1)="OPENING BALANCE $"+A$: PRINT C$(1) 4060 INPUT "INCREMENT ?";I$: IF I$="Q" THEN RUN 4070 LET IN=VAL I$: IF IN<0 OR IN>999999.99 THEN GO TO 4060 4075 LET A=IN: GO SUB 1200: LET C$(2)="ANNUAL INCREMENT $"+A$ 4076 PRINT C$(2) 4080 INPUT "INTEREST RATE ?";R$: IF R$="Q" THEN RUN 4085 LET R=(VAL R$)/100: IF R<0 THEN GO TO 4080 4090 LET C$(3)="INTEREST RATE "+R$+"%": PRINT C$(3) 4100 INPUT "NUMBER OF YEARS ?";N$: IF N$="Q" THEN RUN 4110 LET NY=VAL N$: LET C$(4)="NUMBER OF YEARS "+N$ 4120 PRINT C$(4) 4130 INPUT "NUMBER OF COMPOUNDINGS PER YEAR CHOOSE ONE OF (1,2,3,4,6, OR 12)";N$: IF N$="Q" THEN RUN 4135 IF N$<>"1" AND N$<>"2" AND N$<>"3" AND N$<>"4" AND N$<>"6" AND N$<>"12" THEN GO TO 4130 4140 LET NC=VAL N$: IF INT (NC)<>NC THEN GO TO 4130 4145 LET C$(5)="COMPOUNDINGS/YR. "+N$: PRINT C$(5) 4146 LET r=r/nc 4150 LET ST=0: GO SUB 400 4160 INPUT "DATA TO PRINTER ?(Y OR N)";Z$ 4170 GO SUB 1300: IF Z$="Y" OR Z$="y" THEN GO SUB 1400 4175 INPUT "SHALL I PREPARE A GROWTH TABLE ";Z$: IF Z$<>"Y" AND Z$<>"y" THEN GO TO 9800 4176 GO SUB 9700 4177 RESTORE 10: FOR F=1 TO VAL D$: READ F$: NEXT F 4180 INPUT "data to printer (y OR n)?";z$ 4190 IF z$="y" OR z$="Y" THEN LET ST=2: GO TO 4250 4200 PRINT INVERSE 1;"** YEAR ";E$;" **" 4204 LET A=BE: GO SUB 1200 4205 PRINT F$;TAB 32-LEN A$;A$ 4210 LET ST=1: GO SUB 400: GO TO 9800 4250 LPRINT : LPRINT : LPRINT INVERSE 1;"** YEAR ";E$;" **" 4254 LET A=BE: GO SUB 1200 4255 LPRINT F$;TAB 32-LEN A$;A$ 4260 LET ST=2: GO SUB 400: GO TO 9800 5000 STOP 9700 INPUT "beginning month and year?(mm/yy)";m$ 9710 IF VAL m$( TO 2)>12 OR VAL m$( TO 2)<0 THEN GO TO 9700 9720 LET d$=m$( TO 2): LET e$="19"+m$(4 TO ) 9730 RETURN 9800 PRINT : PRINT "press any key for menu" 9810 IF INKEY$="" THEN GO TO 9810 9820 RUN 9900 REM pad c$ 9910 FOR Y=1 TO 6 9915 IF c$(y)=" " THEN GO TO 9990 9916 LET a$=c$(y): LET b=32 9917 FOR j=32 TO 1 STEP -1: IF a$(j)<>" " THEN LET a$=a$( TO j): GO TO 9919 9918 NEXT j 9919 LET a$="*** "+a$+" " 9920 LET b=32-LEN a$ 9930 FOR j=1 TO b: LET a$=a$+"*": NEXT j 9940 LET c$(y)=a$ 9990 NEXT y 9995 RETURN 9998 SAVE "amortize" LINE 1000 9999 VERIFY ""