100 ! THIS IS THE FINANCIAL COMPUTATION PROGRAMME
110 !
112 SIGNIFICANCE 11
115 E1$="###.#########"
116 STRSIZ 132
117 ?tab(-1,0)
118 ?tab(3,1)
120 ?"THIS PROGRAMME WILL COMPUTE THE FOLLOWING"
130 ?" (1) AN ANNUITY-- EITHER A FUTURE VALUE OR"
140 ?" A PRESENT VALUE AND SOLVE FOR THE PAYMENT"
150 ?" THEN INTEREST RATE,THE NUMBER OF PERIODS,THE"
160 ?" PRESENT OR FUTURE VALUE,THE BALLOON PAYMENT"
170 ?" ON A LOAN,PRINT A LOAN SCHEDULE IF DESIRED AND"
180 ?" IT WIILL ALSO SOLVE PROBLEMS WHERE THE PAYMENTS"
190 ?" ARE RECEIVED IN ADVANCE"
200 ?" "
210 ?" (2) A LUMP SUM- WILL SOLVE FOR THE FUTURE VALUE"
220 ?" THE PRESENT VALUE,THE INTEREST RATE OR THE"
230 ?" NUMBER OF PERIODS"
240 ?" "
250 ?" (3) BONDS- WILL SOLVE FOR THE PRICE OF A BOND"
260 ?" OR SOLVE FOR THE YIELD TO MATURITY OF A BOND"
265 input "hit return to continue --> ", dummy$ : ?
266 ?tab(-1,0)
267 ?tab(3,1)
270 ?"THE FOLLOWING NOTATION IS USED:"
280 ?"N=THE ACTUAL NUMBER OF PERIODS"
290 ?"PMT=THE $ PAYMENT PER PERIOD"
310 ?"PV=PRESENT VALUE"
320 ?"FV(BALLOON)=THE FUTURE OR BALLOON PAYMENT"
330 ?"IF YOU ARE SOLVING FOR A FUTURE VALUE ENTER '1' IN FOR FV"
340 ?"COMPOUNDING=THE NUMBER OF TIMES COMPOUNDING PER YEAR"
350 ?"TYPE=TYPE OF ANNUITY--ENTER '0' FOR A NORMAL ANNUITY,AND"
360 ?"A '1' FOR AN ANNUITY DUE(PAYMENTS ARE DUE AT THE BEGINNING OF"
370 ?"A PERIOD)"
380 ?" "
390 ?" "
400 ?" "
410 ?"************************************************************"
412 FNA2=0 : FNA3=0 : FNA4=0 : FNA5=0
420 FOR Z8=1 TO 3 : PRINT : NEXT Z8
430 ?"WHICH DO YOU WANT: (1) AN ANNUITY; (2) A LUMP SUM; "
440 ?"OR (3) A BOND CALCULATION"
450 K1=K2=C6=C9=0
460 INPUT K1
470 FOR J=1 TO 3 : PRINT : NEXT J
480 IF K1=1 THEN 510
490 IF K1=2 THEN 2370
500 IF K1=3 THEN 2460
510 ?
520 ?
530 ?"ENTER N,I,PMT,PV,FV(BALLOON),PMTS PER YR,TIMES COMPOUNDED PER YR,TYPE"
540 INPUT A,B,C,D,E,C5,F,K2
542 IF F<>C5 THEN GOSUB INTFAC
550 C3=B
560 C4=A
570 C1=C
580 C2=D
590 C6=E
595 GOTO 650
600 FUNCT:
602 FNA=INT(X*100+.5)/100
604 IF Y=0 OR Z=0 THEN 642
610 FNB=INT((1+Z/C5/100)**(-Y)*X*100+.5)/100
620 FNC=INT((1+Z/C5/100)**(Y)*X*100+.5)/100
630 FND=INT(((X/Y)**(1/(Z))-1)*10000*C5+.5)/100
640 IF X<>0 THEN FNE=INT((LOG(X/Y))/(LOG(1+Z/100/C5))+.5)
642 RETURN
650 IF E>0 AND K2=1 THEN E=E/(1+B/100/C5)
660 IF K2=1 AND D>0 AND B>0 THEN D=D/(1+B/100/C5)
670 ?
680 ?
690 !
700 !
710 ?
720 ?
730 ! CONVERTING INTEREST AND PERIODS TO ACTUAL PERIODS
740 ! AND THE ACTUAL INTEREST PER PERIOD
750 !
760 IF B>0 THEN B=B/C5
770 ! TEST TO SEE IF INTEREST IS THE DESIRED OUTPUT
780 IF B=0 THEN 1440
790 IF C6=1 THEN 1320
800 GOTO 990
810 A1=0
820 ! SETTING FLAG (A) IF P.V.=0
830 IF D=0 THEN A1=1
840 ! CONVERTING THE INTEREST RATE TO A DECIMAL
850 X9=B*.01
860 X7=X9+1
870 IF A=0 THEN X8=1
880 IF A=0 THEN 910
890 ! X8=1+THE DECIMAL INTEREST TO THE NTH POWER
900 X8=X7**(A*-1)
910 X1=X8*E
920 X4=1-X8
930 X=C/X9
940 IF A1=1 THEN X3=(X*-1)
950 IF A1=1 THEN 970
960 X3=X
970 X=(C/X9)*(1-X8)
980 RETURN
990 !
992 ! SECTION TO SOLVE FOR PERIODS
1000 IF A=0 THEN 1020
1010 GOTO 1090
1020 GOSUB 810
1030 X=(E-X3)/(D-X3)
1040 IF X<0 THEN X=X*(-1)
1050 IF X7<0 THEN X7=X7*(-1)
1060 A=LOG(X)/LOG(X7)
1070 ?"THE TOTAL NUMBER OF PERIODS = ";INT(A+.5)
1080 GOTO 1820
1090 ! THE SECTION TO SOLVE FOR PAYMENT
1100 IF C=0 THEN 1120
1110 GOTO 1180
1120 C=1
1130 GOSUB 810
1140 C=(1/X)*(D-X1)
1150 C=ABS(C)
1158 X=C
1159 GOSUB FUNCT
1160 ?"THE PAYMENT AMOUNT = ";FNA
1170 GOTO 1820
1180 ! SECTION TO SOLVE FOR PRESENT VALUE
1190 IF D=0 THEN 1210
1200 GOTO 1300
1210 GOSUB 810
1220 D=X+X1
1230 IF K2=1 THEN D=D**(1+B/100)
1238 X=D
1239 GOSUB FUNCT
1240 IF C9=1 THEN ?"THE PRICE OF THE BOND = ";FNA
1250 IF C9=1 THEN 1270
1258 X=D
1259 GOSUB FUNCT
1260 ?"THE PRESENT VALUE OF THIS ANNUITY = ";FNA
1270 GOTO 1820
1280 ?
1290 ?
1300 ! SECTION TO SOLVE FOR BALLOON PAYMENT
1310 ! TEST TO SEE IF ALL NECESSARY COMPONEMTS ARE THERE
1320 ! THAT ARE NECESSARY TO SOLVE FOR BALLOON PAYMENT
1330 IF C1=0 OR C4=0 OR C3=0 THEN 1850
1340 GOSUB 810
1350 E=(D-X)/X8
1360 IF K2=1 THEN E=E*(1+B/100)
1370 E=ABS(E)
1378 X=E
1379 GOSUB FUNCT
1380 IF C6=1 THEN ?"THE FUTURE VALUE OF THIS ANNUITY = ";FNA
1390 IF C6=1 THEN 1410
1398 X=E
1399 GOSUB FUNCT
1400 ?"THE BALLOON PAYMENT = ";FNA
1410 GOTO 1820
1420 ! THE SECTION TO SOLVE FOR THE INTEREST RATE"
1430 ! SETS INITIAL INTEREST TO 15%
1440 B=15/C5
1450 IF K2=1 AND D>0 THEN D=D-C
1460 IF K2=1 AND D>0 THEN A=A-1
1470 IF K2=1 AND E>0 THEN E=E+C
1480 IF K2=1 AND E>0 THEN A=A+1
1490 C8=B
1500 !
1510 ! FIND PRESENT VALUE OF ALL PAYMENTS
1520 P=(1-(1+B/100)**-A)/(B/100)*C
1530 P1=0
1540 !
1550 ! TEST TO SEE IF THERE IS A BALLOON PAYMENT
1560 IF E=0 THEN 1590
1570 ! FINDING PRESENT VALUE OF THE BALLOON PAYMENT
1580 P1=(1+B/100)**-A*E
1590 P2=P+P1
1600 !
1610 !
1620 !TEST TO SEE IF LOAN VALUE - PRESENT VALUE IS WITHIN AN
1630 ! ACCEPTABLE RANGE
1640 IF K2=1 AND E>0 THEN D=P2-P1
1650 IF K2=1 AND E>0 THEN P2=P1
1660 IF K2<>1 AND E>0 AND C2=0 THEN D=P2-P1
1670 IF K2<>1 AND E>0 AND C2=0 THEN P2=P1
1680 IF D-P2>1 THEN 1750
1690 IF D-P2<-1 THEN 1750
1698 X=(B*C5)
1699 GOSUB FUNCT
1700 IF C9=1 THEN ?"THE YIELD TO MATURITY = ";FNA;" %"
1710 IF C9=1 THEN 1730
1718 X=(B*C5)
1719 GOSUB FUNCT
1720 ?"THE ANNUAL INTEREST = ";FNA;" %"
1730 GOTO 1820
1740 ! LOWER INTEREST RATE FOR ANOTHER ITERATION
1750 B=B-((D-P2)/D)*B
1760 !
1770 GOTO 1500
1780 ! RAISES INTEREST RATE FOR ANOTHER ITERATION
1790 !
1800 !
1810 !
1820 ?
1830 ?
1840 IF K1=3 OR K2=1 OR C2=0 THEN 2280
1850 ?"DO YOU WANT A LOAN SCHEDULE-----FOR PRINTED OUTPUT ENTER 'P'"
1852 ?"FOR OUTPUT TO TERMINAL ENTER 'T'"
1860 INPUT P$
1870 IF P$="N" OR P$="NO" THEN 2280
1872 IF P$="P" THEN OPEN#2,"CAP:",OUTPUT
1874 IF P$="P" THEN ?#2," "
1880 ?
1890 ?
1900 ?
1910 ?"ENTER FIRST AND LAST PAYMENT NUMBER"
1920 INPUT Q1,Q2
1930 ?
1938 X=C
1939 GOSUB FUNCT
1940 IF P$="T" THEN ?"THE PAYMENT AMOUNT = ";FNA
1942 IF P$="P" THEN ?#2,"THE PAYMENT AMOUNT = ";FNA
1948 X=D
1949 GOSUB FUNCT
1950 IF P$="T" THEN ?"THE PRINCIPAL AMOUNT = ";FNA
1952 IF P$="P" THEN ?#2,"THE PRINCIPAL AMOUNT = ";FNA
1958 X=(B*C5)
1959 GOSUB FUNCT
1960 IF P$="T" THEN ?"THE ANNUAL INTEREST RATE = ";FNA
1962 IF P$="P" THEN ?#2,"THE ANNUAL INTEREST RATE = ";FNA
1970 IF P$="T" THEN ?"THE TOTAL NUMBER OF PAYMENTS = ";INT(A)
1972 IF P$="P" THEN ?#2,"THE TOTAL NUMBER OF PAYMENTS = ";INT(A)
1978 X=E
1979 GOSUB FUNCT
1980 IF P$="T" THEN ?"THE BALLOON PAYMENT = ";FNA
1982 IF P$="P" THEN ?#2,"THE BALLOON PAYMENT = ";FNA
1990 IF P$="T" THEN ?
1992 IF P$="P" THEN ?#2," "
2000 IF P$="T" THEN ?
2002 IF P$="P" THEN ?#2," "
2010 IF P$="T" THEN ?"PMT #","PRINCIPAL","INTEREST","REM. BAL","TOT. INT"
2012 IF P$="P" THEN ?#2,"PMT #","PRINCIPAL","INTEREST","REM.BAL","TOT.INT"
2020 IF P$="T" THEN ?
2022 IF P$="P" THEN ?#2," "
2030 O1=C
2040 O2=O3=O5=0
2050 O4=D
2060 FOR I= 1 TO 400
2062 IF I>Q2 THEN GOTO 2302
2070 ! TESTING TO SEE IF THERE IS A BALLOON PAYMENT
2080 IF I<>A THEN 2180
2090 IF E=0 THEN 2180
2100 O1=C
2110 !O3=REM BALANCE TIMES THE INTEREST RATE
2120 O3=O4*(B/100)
2130 O2=O4
2140 O4=0
2150 O5=O5+O3
2160 A8=1.1
2170 GOTO 2230
2180 O1=C
2190 O3=O4*(B/100)
2200 O2=C-O3
2210 O4=O4-O2
2220 O5=O5+O3
2230 IF I<Q1 OR I>Q2 THEN 2270
2240 IF P$="T" THEN ?
2242 IF P$="P" THEN ?#2," "
2243 X=O2 : GOSUB FUNCT : FNA2=FNA
2245 X=O3 : GOSUB FUNCT : FNA3=FNA
2247 X=O4 : GOSUB FUNCT : FNA4=FNA
2249 X=O5 : GOSUB FUNCT : FNA5=FNA
2250 IF P$="T" THEN ? I,FNA2,FNA3,FNA4,FNA5
2252 IF P$="P" THEN ?#2,I,FNA2,FNA3,FNA4,FNA5
2254 IF P$="P" AND Q2=I THEN ?#2," "
2260 IF A8=1.1 THEN J=400
2270 NEXT I
2280 ?
2290 ?
2300 ?
2302 IF I>Q2 AND P$="P" THEN ?#2," "
2303 IF I>Q2 AND P$="P" THEN CLOSE#2
2304 IF I>Q2 AND P$="P" THEN P$=" "
2310 ?"DO YOU WISH TO MAKE ANOTHER RUN"
2320 INPUT Y$
2330 IF Y$="NO" OR Y$="N" THEN 2540
2340 ?
2350 ?
2360 GOTO 410
2370 ?"ENTER N,I,PV,FV,PMTS PER YR"
2380 INPUT G,H,I,J,C5
2390 IF C5<>0 THEN C9=G/C5
2400 FOR Z5=1 TO 2 : PRINT : NEXT Z5
2408 X=J : Y=I : Z=H
2409 GOSUB FUNCT
2410 IF G=0 THEN ?"THE NUMBER OF PERIODS = ";FNE
2418 X=J : Y=I : Z=G
2419 GOSUB FUNCT
2420 IF H=0 THEN ?"THE INTEREST RATE = ";FND
2428 X=J : Y=G : Z=H
2429 GOSUB FUNCT
2430 IF I=0 THEN ?"THE PRESENT VALUE = ";FNB
2438 X=I : Y=G : Z=H
2439 GOSUB FUNCT
2440 IF J=0 THEN ?"THE FUTURE VALUE = ";FNC
2450 GOTO 2280
2460 ?"ENTER # OF YEARS,DISCOUNT RATE,COUPON RATE,PRICE"
2470 INPUT A,B,C,D
2480 C=C/100*1000/2
2490 C5=2
2500 C9=1
2510 A=A*C5
2520 E=1000
2530 GOTO 550
2540 FOR I=1 TO 3 : PRINT : NEXT I
2550 ?"END OF PROGRAMME"
2560 FOR I=1 TO 3 : PRINT : NEXT I
2570 END
3200 INTFAC:
3201 ! THIS SUBROUTINE COMPUTES THE INTEREST FACTOR IF COMPOUNDING <> PERANN
3202 RATEA=B : COMPDD=F : PERANN=C5 : NOPMTS=A
3230 IF COMPDD=12 THEN FL12=1 ELSE FL12=0
3232 IF COMPDD=6 THEN FL22=1 ELSE FL22=0
3234 IF COMPDD=4 THEN FL13=1 ELSE FL13=0
3236 IF COMPDD=1 THEN FL15=1 ELSE FL15=0
3238 IF COMPDD=2 THEN FL14=1 ELSE FL14=0
3260 IF PERANN=12 THEN FL26=1 ELSE FL26=0
3262 IF PERANN=4 THEN FL27=1 ELSE FL27=0
3264 IF PERANN=2 THEN FL28=1 ELSE FL28=0
3266 IF PERANN=1 THEN FL29=1 ELSE FL29=0
3360 RATE=0
3362 IF RATEA=0 THEN FL33=1 ELSE FL33=0
3370 IF FL33=0 THEN RATE=RATEA/100
3380 IF FL12=1 THEN AA2=RATE/12
3390 IF FL12=1 GOTO ENDFTR
3400 IF FL13=1 THEN M=3
3402 IF FL14=1 THEN M=6
3404 IF FL15=1 THEN M=12
3406 IF FL13=1 THEN P=4
3408 IF FL14=1 THEN P=2
3410 IF FL15=1 THEN P=1
3420 AA1=0
3422 NN=0
3430 AA2=RATE/12
3440 IF P<>0 THEN RP=RATE/P
3450 RP1=RP+1
3460 LOOP1:
3470 AA3=1+AA2
3480 Y=AA3
3490 COUNT=1
3500 LOOP2:
3510 Y=Y*AA3
3520 COUNT=COUNT+1
3530 IF COUNT=M THEN FL16=1 ELSE FL16=0
3540 IF FL16=0 GOTO LOOP2
3550 IF Y>RP1 THEN FL19=1 ELSE FL19=0
3552 IF Y<RP1 THEN FL18=1 ELSE FL18=0
3554 IF Y=RP1 THEN FL17=1 ELSE FL17=0
3560 IF FL17=1 GOTO ENDFTR
3570 NN=AA2-AA1
3580 NN=NN/2
3590 IF NN>0 THEN FL21=1 ELSE FL21=0
3592 IF NN<0 THEN FL20=1 ELSE FL20=0
3594 IF NN=0 THEN FL17=1 ELSE FL17=0
3600 IF FL17=1 GOTO ENDFTR
3610 AA1=AA2
3620 IF FL18=1 AND FL20=1 THEN AA2=AA2-NN
3622 IF FL19=1 AND FL21=1 THEN AA2=AA2-NN
3630 IF FL18=1 AND FL21=1 THEN AA2=AA2+NN
3632 IF FL19=1 AND FL20=1 THEN AA2=AA2+NN
3640 GOTO LOOP1
3779 ENDFTR:
3780 EFF:
3790 EFFRAT=AA2
3792 B=EFFRAT*PERANN*100
3796 RETURN