10 CLEAR 1024 20 PV=0:PY=0:N%=0:IN=0:FV=0:DU%=0:CA%=0:PR=1:IV%=0:NV%=-1 60 CLS 70 PRINT "Annuities" 80 SCREEN 0,0 90 PRINT @280,"PV I% N PMT FV P/YR DUE? END"; 100 ON KEY GOSUB 1000,2000,3000,4000,5000,6000,7000,8000 200 I%=1:PRINT @80,"PV: ";:X=PV:GOSUB 20000:GOSUB 22000 210 PRINT @100,"I%: ";:X=IN:GOSUB 21000:GOSUB 22000 220 PRINT @120,"N: ";:PRINT USING "#,###,###,###";N;:GOSUB 22000 230 PRINT @140,"PMT: ";:X=PY:GOSUB 20000:GOSUB 22000 240 PRINT @160,"FV: ";:X=FV:GOSUB 20000:GOSUB 22000 250 PRINT @180,"P/YR:";:PRINT USING "#,###,###,###";PR; 270 IF DU% THEN PRINT @200,"Due ";:ELSE PRINT @200,"Ordinary"; 280 IF IV% THEN PRINT @220,"***ERROR***";SPACE$(39-POS(0));:BEEP 290 IF NOT NV% THEN PRINT @220,"ACC: ";:X=N*PY+PV+FV:GOSUB 20000 300 IF (NOT IV%) AND NV% THEN PRINT @220,SPACE$(39); 310 IV%=0:KEY ON:KF=0 320 C$=INKEY$:IF NOT KF THEN 320 330 GOTO 200 1000 KF=-1:KEY OFF 1020 PR$="PV? ":IL%=20 1030 GOSUB 10000:IF IN$="=" THEN CA%=1:GOSUB 11000:GOSUB 30000:RETURN 1040 IF IN$="" THEN GOSUB 11000:RETURN 1050 GOSUB 12000:IF ER% THEN BEEP:GOTO 1030 1060 PV=X:GOSUB 11000:NV%=-1:RETURN 2000 KF=-1:KEY OFF 2020 PR$="I%? ":IL%=20 2030 GOSUB 10000:IF IN$="=" THEN CA%=2:GOSUB 11000:GOSUB 30000:RETURN 2040 IF IN$="" THEN GOSUB 11000:RETURN 2050 GOSUB 12000:IF ER% THEN BEEP:GOTO 2030 2060 IN=X:GOSUB 11000:NV%=-1:RETURN 3000 KF=-1:KEY OFF 3020 PR$="N? ":IL%=20 3030 GOSUB 10000:IF IN$="=" THEN CA%=3:GOSUB 11000:GOSUB 30000:RETURN 3040 IF IN$="" THEN GOSUB 11000:RETURN 3050 GOSUB 12000:IF ER% THEN BEEP:GOTO 3030 3060 N=X:IF N<0 OR N<>INT(X) THEN BEEP:GOTO 3030 3070 GOSUB 11000:NV%=-1:RETURN 4000 KF=-1:KEY OFF 4020 PR$="PMT? ":IL%=20 4030 GOSUB 10000:IF IN$="=" THEN CA%=4:GOSUB 11000:GOSUB 30000:RETURN 4040 IF IN$="" THEN GOSUB 11000:RETURN 4050 GOSUB 12000:IF ER% THEN BEEP:GOTO 4030 4060 PY=X:GOSUB 11000:NV%=-1:RETURN 5000 KF=-1:KEY OFF 5020 PR$="FV? ":IL%=20 5030 GOSUB 10000:IF IN$="=" THEN CA%=5:GOSUB 11000:GOSUB 30000:RETURN 5040 IF IN$="" THEN GOSUB 11000:RETURN 5050 GOSUB 12000:IF ER% THEN BEEP:GOTO 5030 5060 FV=X:GOSUB 11000:NV%=-1:RETURN 6000 KF=-1:KEY OFF 6020 PR$="P/YR? ":IL%=20 6030 GOSUB 10000 6040 IF IN$="" THEN GOSUB 11000:RETURN 6050 GOSUB 12000:IF ER% THEN BEEP:GOTO 6030 6060 PR=X:IF PR<=0 OR PR<>INT(PR) THEN BEEP:GOTO 6030 6070 GOSUB 11000:NV%=-1:RETURN 7000 KF=-1:KEY OFF:DU%=NOT DU%:NV%=-1:RETURN 8000 KEY OFF:MENU 10000 GOSUB 11000:IN$="":PRINT @240,PR$; 10010 C$=INPUT$(1) 10020 IF C$=CHR$(13) THEN RETURN 10030 IF C$=CHR$(8) OR C$=CHR$(127) THEN 10100 10040 IF C$=CHR$(24) THEN 10000 10050 IF C$<" " THEN 10010 10060 IF LEN(IN$)CA% THEN PRINT " ";:GOTO 22020 22010 IF NV% THEN PRINT "?";:ELSE PRINT "*"; 22020 I%=I%+1:RETURN 30000 IF CA%<>2 THEN KN=IN/(100*PR):JN=1+KN:T=1-DU%*KN 30010 IV%=0 30020 ON ERROR GOTO 30800 30030 ON CA% GOSUB 31000,32000,33000,34000,35000 30040 ON ERROR GOTO 0 30050 RETURN 30800 IV%=-1:NV%=IV%:ON CA% GOSUB 30910,30920,30930,30940,30950 30810 RESUME 30050 30910 PV=0:RETURN 30920 IN=0:RETURN 30930 N=0:RETURN 30940 PY=0:RETURN 30950 FV=0:RETURN 31000 IF IN=0 THEN PV=-N*PY-FV:ELSE PV=(-PY*T*(JN^N-1)/KN-FV)/JN^N 31010 NV%=0: RETURN 32000 IF PY=0 THEN X=-FV/PV:IN=100*PR*(X^(1/N)-1):NV%=0:RETURN 32010 Q=SGN (FV+PV+N*PY):A=1/N+(PV+FV)/N/N/PY:A=Q*A*SGN(PY):IF A=0 THEN IN=0:NV%=0:RETURN 32020 IF A<0 THEN IV%=-1:IN=0:RETURN 32030 KN=A:JN=1+KN:T=1-DU%*KN 32040 X=JN^(N-1):U=PV*X*JN+T*PY*(X*JN-1)/KN+FV 32050 Z=N*PV*X+T*PY*(N*KN*X-X*JN+1)/KN/KN:IF DU THEN Z=Z+PY*(X*JN-1)/KN 32060 IF SGN(Z)=Q AND SGN(U)=Q THEN A=2*A:GOTO 32030 32070 IF SGN(Z)=Q THEN A=A/2:GOTO 32030 32080 A=KN-U/Z:IF PR*ABS(A-KN)>=1E-6 THEN 32030 32090 NV%=0:IN=100*KN*PR:RETURN 33000 IF IN=0 THEN N=(FV+PV)/PY:GOTO 33100 33010 X=T*PY+KN*PV:U=T*PY-KN*FV 33030 N=LOG(U/X)/LOG(JN) 33100 N=INT (N+.5):NV%=0:IF N<0 THEN N=0:IV%=-1:NV%=-1 33110 RETURN 34000 IF IN=0 THEN PY=(-PV-FV)/N:NV%=0:RETURN 34020 PY=(-FV-PV*JN^N)*KN/T/(JN^N-1):NV%=0:RETURN 35000 IF IN=0 THEN FV=-N*PY-PV:ELSE FV=-PV*JN^N-T*PY*(JN^N-1)/KN 35010 NV%=0: RETURN