Personal Finance Planner

Date: 1982
Type: Cassette
Platform(s): TS 1000
Tags: Finance

Personal Finance Planner is a menu-driven financial calculator that handles house financing, car financing, savings accounts, loans, and amortization schedules. The program solves for any one of five time-value-of-money variables (N, I, PMT, PV, FV) given the other known values, supporting both ordinary annuity (END) and annuity-due (BEG) payment modes. Interest rate solving uses a bisection algorithm (binary search between bounds 0.002 and 85) to iteratively converge on the unknown rate when payments are non-zero, falling back to a direct logarithmic formula when PMT is zero. The animated title sequence draws a bar-chart graphic using a parameterized GOSUB routine that plots columns and rows of dollar signs, then wipes the screen with a scrolling row of dollar signs before entering the main program.


Program Analysis

Program Structure

The program is organized into several distinct functional blocks, navigated via GOTO and GOSUB:

  1. Lines 5–195: Animated splash screen — fills display with dollar signs in FAST mode, then draws a text-art “MONEY” logo in SLOW mode, pauses, and jumps to the main program.
  2. Lines 270–1570: Animated bar-chart graphic drawn with parameterized column/row subroutines, ending with a wipe effect before looping back to line 40 (re-entering SLOW mode).
  3. Lines 2000–2170: Variable initialization and first-run help gate.
  4. Lines 3000–3095: Main menu — selects program type (House, Car, Savings, Loans, Amortization, End).
  5. Lines 3100–3650: Context-sensitive help screens for each program type.
  6. Lines 4000–4140: Calculation mode menu (solve for N, I, PMT, PV, or FV).
  7. Lines 5000–6360: Data entry and calculation dispatch for all five TVM variables plus BEG/END toggle.
  8. Lines 7000–7860: Results display, continuation menu, and full amortization schedule generator.
  9. Lines 8000–8550: Error message, amortization entry guard, and help screen return.
  10. Lines 9000–9960: Clean exit (STOP) and SAVE line.

Time-Value-of-Money Formulas

The core financial engine implements standard TVM equations. The variable S is the annuity-due flag (1 for BEG, 0 for END), which modifies the payment factor via (1+I*S). The implemented formulas are:

VariableLineFormula
N5320-(LN((-P-(1+I*S)*M/I)/(F-(1+I*S)/I*M))/LN(1+I))
PMT5720(-P-F*(1+I)^(-N))/((1+I*S)*(1-(1+I)^(-N)))*I
PV5920-(M*(1+I*S)/I*(1-(1+I)^(-N))+F*(1+I)^(-N))
FV6120(-M*(1+I*S)*(1-(1+I)^(-N))/I-P)/((1+I)^(-N))

Interest Rate Bisection Solver

Solving for interest rate I (lines 5520–5579) uses a bisection search. Bounds W (low) and C (high, initialized to 85) bracket the solution, and the midpoint U is tested each iteration. The loop continues until the computed payment Q matches M to three decimal places, or until the bounds collapse below 1E-8 or exceed 85-1E-8, at which point an “INTEREST OFF SCALE” error is reported at line 8000. When M=0, a direct formula ((F/-P)^(1/N)-1)*100 is used instead.

Note that the variable W is reused here as the bisection lower bound, which conflicts with its use as a step direction in the animation subroutines. This is safe only because the animation and solver are never active simultaneously.

Animated Title Sequence

The splash screen at lines 270–1570 draws a bar chart of dollar signs using two parameterized subroutines. Subroutine at line 500 draws a vertical column: it takes row start U, row end V, step direction W, and column Y, animating by printing a moving block graphic character ahead of each dollar sign. Subroutine at line 900 is the horizontal equivalent, animating along columns at a fixed row. The wipe at lines 1520–1570 sweeps a block graphic down from row 20, overwriting each row with a line of dollar signs, then jumps to line 40 to re-enter SLOW mode.

Amortization Schedule (Lines 7100–7860)

The amortization module accepts a start and end period and computes principal, interest, and remaining balance for each period. The balance at period J is calculated directly using the closed-form formula at line 7440 rather than iterating from period 1, which avoids accumulated rounding error. A special case at lines 7350–7380 handles the first period of an annuity-due (S=1, J=1) where no interest accrues. The display paginates every 17 rows, pausing with a “PRESS ANY KEY” prompt and clearing the screen to continue.

Key BASIC Idioms and Techniques

  • String-encoded state: A$, X$, Y$ are used as mode flags throughout — X$="0" for data entry mode vs. X$="1" for calculation mode; Y$ holds the selected program type (“1″–”5”).
  • Numeric display rounding: All displayed values use the idiom INT(value*100+0.5)/100 to round to two decimal places before converting with STR$.
  • INKEY$ polling loops: All key input uses INKEY$ in tight loops (e.g., lines 5080–5082) with CHR$ boundary checks to filter valid keypresses.
  • Status bar via GOSUB 5072: Lines 5072–5077 form a reusable status display subroutine called from both data entry and calculation menus, showing current values of all TVM variables.
  • VAL B$ for balance carry-forward: At line 7430, LET R=VAL B$ recovers the previously stored balance string as a number to compute principal paid — a deliberate use of string storage to preserve the prior period’s rounded balance.

Bugs and Anomalies

  • Dead loop at line 4000: Lines 4000–4010 contain two nested FOR J loops, the first (FOR J=1 TO 17 STEP 2) immediately superseded by the second (FOR J=1 TO 17). The RETURN at line 4020 is never reached from the main flow since no GOSUB 4000 appears in the program; this subroutine is unused dead code.
  • Line 880 missing W assignment: The GOSUB 500 call at line 890 uses U, V, and Y set at lines 860–880, but W is not set before this call. It retains whatever value it held from the previous block (line 790, W=-1), which may or may not be the intended step direction.
  • Amortization guard at line 8200: If program type is Savings (Y$="3"), the amortization route redirects to the main menu at line 3000. This is intentional but silently discards the user’s request without explanation.
  • Line 5087 amortization route sets Y$=”5″ at line 8203 only after checking Y$="3" at 8200, meaning entering amortization from the main menu correctly sets the type, but re-entering via key “5” from the data entry menu (line 5087) bypasses the type assignment entirely and uses the prior Y$ value.

Content

Appears On

Related Products

Perform calculations, finance a house, or a car, keep savings accounts, repay loans and calculate an amortization schedule which can...

Related Articles

Related Content

Image Gallery

Source Code

   5 SLOW
  10 GOTO 200
  20 FOR I=0 TO 21
  25 PRINT "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
  30 NEXT I
  40 SLOW
  50 FOR I=0 TO 7
  60 PRINT AT I,0;"                                "
  70 NEXT I
  80 PRINT AT 8,0;"  $   $  $$$  $   $ $$$$$ $   $  "
  90 PRINT AT 9,0;"  $$ $$ $   $ $$  $ $     $$ $$  "
 100 PRINT AT 10,0;"  $$$$$ $   $ $$$ $ $      $$$   "
 110 PRINT AT 11,0;"  $$$$$ $   $ $$$$$ $$$$$   $    "
 120 PRINT AT 12,0;"  $ $ $ $   $ $ $$$ $       $    "
 130 PRINT AT 13,0;"  $   $ $   $ $  $$ $       $    "
 140 PRINT AT 14,0;"  $   $  $$$  $   $ $$$$$   $    "
 150 FOR I=15 TO 20
 160 PRINT AT I,0;"                                "
 170 NEXT I
 173 PRINT AT 21,0;"  AMERICAN MICRO PRODUCTS, INC. " 
 175 FOR I=1 TO 100
 180 NEXT I  
 195 GOTO 2000
 270 LET U=8
 280 LET V=14
 290 LET W=1
 295 LET Y=2
 300 GOSUB 500
 310 PRINT AT 9,3;"[▒]"
 320 LET U=9
 330 LET V=11
 340 LET W=1
 350 LET Y=3
 360 GOSUB 500
 380 LET U=10
 390 LET V=12
 400 LET W=1
 410 LET Y=4
 420 GOSUB 500
 440 LET U=11
 450 LET V=9
 460 LET W=-1
 470 LET Y=5
 475 GOSUB 500
 480 GOTO 560
 500 PRINT AT U,Y;"[▒]"
 505 FOR I=U TO V STEP W
 510 PRINT AT I,Y;"$"
 520 PRINT AT I+W,Y;"[▒]"
 530 NEXT I
 540 PRINT AT V+W,Y;" "
 550 RETURN
 560 LET U=8
 570 LET V=14
 580 LET W=1
 590 LET Y=6
 600 GOSUB 500
 610 LET U=9
 620 LET V=13
 630 LET W=1
 640 LET Y=8
 650 GOSUB 500
 660 LET U=9
 670 LET V=11
 680 LET W=1
 690 LET Y=14
 700 GOSUB 900
 710 LET U=13
 720 LET V=9
 730 LET W=-1
 740 LET Y=12
 750 GOSUB 500
 760 LET U=11
 770 LET V=9
 780 LET W=-1
 790 LET Y=8
 800 GOSUB 900
 810 LET U=8
 820 LET V=14
 830 LET W=1
 840 LET Y=14
 850 GOSUB 500
 860 LET U=9
 870 LET V=11
 880 LET Y=15
 890 GOSUB 500
 895 GOTO 960
 900 PRINT AT Y,U;"[▒]"
 910 FOR I=U TO V STEP W
 920 PRINT AT Y,I;"$"
 930 PRINT AT Y,I+W;"[▒]"
 940 NEXT I
 945 PRINT AT Y,V+W;" "
 950 RETURN
 960 LET U=10
 970 LET V=12
 980 LET Y=16
 990 GOSUB 500
 1000 LET U=11
 1010 LET V=13
 1020 LET Y=17
 1030 GOSUB 500
 1040 LET U=14
 1050 LET V=8
 1060 LET W=-1
 1070 LET Y=18
 1080 GOSUB 500
 1090 LET U=20
 1100 LET V=24
 1110 LET W=1
 1120 LET Y=8
 1130 GOSUB 900
 1140 LET U=9
 1150 LET V=14
 1160 LET Y=20
 1170 GOSUB 500
 1180 LET U=21
 1190 LET V=24
 1200 LET Y=14
 1210 GOSUB 900
 1220 LET Y=11
 1230 GOSUB 900
 1240 LET U=8
 1250 LET V=9
 1260 LET Y=26
 1270 GOSUB 500
 1280 LET U=9
 1290 LET V=10
 1300 LET Y=27
 1310 GOSUB 500
 1320 LET U=8
 1330 LET V=9
 1340 LET Y=30
 1350 GOSUB 500
 1360 LET U=9 
 1370 LET V=10
 1380 LET Y=29
 1390 GOSUB 500
 1400 LET U=10
 1410 LET V=14
 1420 LET Y=28
 1430 GOSUB 500
 1520 FOR I=20 TO 0 STEP -1
 1530 PRINT AT I,16;"[▒]"
 1540 PRINT AT I+1,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
 1550 NEXT I
 1560 PRINT AT 0,0;"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
 1570 GOTO 40
 2000 CLS
 2001 LET Y$="0"
 2002 LET A$="0"
 2005 CLS
 2020 LET M=0
 2030 LET I=0
 2040 LET P=0
 2050 LET F=0
 2060 LET S=0
 2070 LET X$="0"
 2080 LET T=0
 2090 LET E=0
 2100 LET G=0
 2110 LET M$="0"
 2120 LET N$="0"
 2130 LET P$="0"
 2140 LET F$="0"
 2150 LET I$="0"
 2160 LET S$="END"
 2170 IF A$<>"0" THEN GOTO 3085
 2200 PRINT AT 3,1;"FIRST, SELECT THE TYPE OF "
 2210 PRINT AT 4,1;"PROGRAM OF INTEREST."
 2220 PRINT AT 6,1;"N,I,PMT,PV,FV ARE DIFFERENT"
 2230 PRINT AT 7,1;"FOR EACH TYPE OF PROGRAM"
 2240 PRINT AT 8,1;"CHOSEN. CHECK HELP"
 2250 PRINT AT 10,1;"YOU MAY SOLVE ANY ONE VALUE"
 2260 PRINT AT 11,1;"GIVEN THE OTHER THREE OR"
 2270 PRINT AT 12,1;"FOUR VALUES"
 2280 PRINT AT 14,1;"BEGIN/END SPECIFIES WHETHER"
 2290 PRINT AT 15,1;"PAYMENTS ARE ANNUITY OR"
 2300 PRINT AT 16,1;"ANNUITY DUE"
 2310 PRINT AT 20,0;"** PRESS ANY KEY TO CONTINUE **"
 2320 LET A$=INKEY$ 
 2330 IF A$="" THEN GOTO 2320
 2340 CLS
 3000 CLS
 3005 PRINT AT 5,1;"PLEASE PRESS:"
 3010 PRINT AT 8,5;"1 HOUSE FINANCING"
 3020 PRINT AT 10,5;"2 CAR FINANCING"
 3030 PRINT AT 12,5;"3 SAVINGS ACCOUNT"
 3035 PRINT AT 14,5;"4 LOANS"
 3040 PRINT AT 16,5;"5 AMORTIZATION SCHEDULE"
 3050 PRINT AT 18,5;"6 END"
 3060 LET A$=INKEY$ 
 3070 IF A$<CHR$ 29 OR A$>CHR$ 34 THEN GOTO 3060
 3080 IF A$="6" THEN GOTO 9000
 3084 IF Y$<>A$ AND A$<>"5" THEN GOTO 2005
 3085 CLS
 3086 IF A$="5" THEN LET U$=" AMORTIZATION"
 3087 IF A$="5" THEN GOTO 8200
 3088 LET Y$=A$
 3090 IF Y$="1" THEN LET U$="    HOUSE "
 3091 IF Y$="2" THEN LET U$="     CAR  "
 3092 IF Y$="4" THEN LET U$="    LOAN "
 3093 IF Y$="3" THEN LET U$="   SAVING"
 3095 GOTO 5000
 3100 CLS
 3103 PRINT AT 1,8;U$
 3105 PRINT AT 3,12;"HELP"
 3106 PRINT AT 4,12;"▀▀▀▀"
 3110 IF Y$="1" OR Y$="2" THEN GOTO 3200
 3120 IF Y$="3" THEN GOTO 3400
 3130 IF Y$="4" OR Y$="5" THEN GOTO 3600
 3200 PRINT AT 6,3;"N  = NUMBER OF MONTHS"
 3210 PRINT AT 8,3;"I  = MONTH INTEREST RATE"
 3220 PRINT AT 10,3;"PMT= MONTH PAYMENT"
 3230 LET Z$=" "
 3240 IF Y$="2" THEN LET Z$="( TRADE IN)"
 3250 PRINT AT 12,3;"PV = PRICE-DOWN PMT";Z$
 3360 PRINT AT 14,3;"FV = FUTURE BALANCE"
 3370 GOTO 8500
 3400 PRINT AT 5,5;"N= COMPOUNDING PERIODS"
 3410 PRINT AT 7,5;"I= PERIODIC INTEREST RATE"
 3420 PRINT AT 9,3;"PMT= PERIODIC DEPOSIT"
 3430 PRINT AT 11,4;"PV= PRESENT BALANCE"
 3440 PRINT AT 13,4;"FV= FUTURE BALANCE"
 3450 GOTO 8500
 3600 PRINT AT 5,5;"N= COMPOUNDING PERIODS"
 3610 PRINT AT 7,5;"I= PERIODIC INTEREST RATE"
 3620 PRINT AT 9,3;"PMT= PERIODIC PAYMENT"
 3630 PRINT AT 11,4;"PV= TOTAL LOAN AMOUNT"
 3640 PRINT AT 13,4;"FV= FUTURE BALANCE"
 3650 GOTO 8500
 4000 FOR J=1 TO 17 STEP 2
 4003 FOR J=1 TO 17
 4005 PRINT AT J,0;"                                "
 4010 NEXT J
 4020 RETURN
 4100 LET X$="1"
 4105 CLS
 4107 PRINT AT 1,8;U$
 4108 PRINT AT 3,9;"CALCULATION"
 4109 PRINT AT 4,9;"▀▀▀▀▀▀▀▀▀▀▀"
 4110 PRINT AT 6,1;"PLEASE PRESS:             "
 4112 PRINT AT 8,5;"1 FOR  N"
 4114 PRINT AT 9,5;"2 FOR  I"
 4116 PRINT AT 10,5;"3 FOR  PMT"
 4118 PRINT AT 11,5;"4 FOR  PV"
 4120 PRINT AT 12,5;"5 FOR  FV"
 4130 PRINT AT 13,5;"6 FOR  CHANGE DATA"
 4135 PRINT AT 14,5;"7 FOR  OTHERS"
 4140 GOSUB 5072
 4150 GOTO 5080
 5000 LET X$="0"
 5001 CLS
 5002 PRINT AT 1,8;U$
 5003 PRINT AT 3,10;"DATA ENTRY"
 5004 PRINT AT 4,10;"▀▀▀▀▀▀▀▀▀▀"
 5005 PRINT AT 6,1;"PLEASE PRESS: "
 5008 PRINT AT 8,5;"0 FOR  BEG/END "
 5010 PRINT AT 9,5;"1 FOR  N  (PERIODS)"
 5020 PRINT AT 10,5;"2 FOR  I  (INTEREST)"
 5030 PRINT AT 11,5;"3 FOR  PMT(PAYMENT)"
 5040 PRINT AT 12,5;"4 FOR  PV (PRESENT VALUE)"
 5050 PRINT AT 13,5;"5 FOR  FV (FUTURE VALUE)"
 5060 IF Y$<>"5" THEN PRINT AT 14,5;"6 FOR  CALCULATION"
 5063 IF Y$="5" THEN PRINT AT 14,5;"6 FOR  SCHEDULE"
 5065 PRINT AT 15,5;"7 FOR  HELP"
 5066 PRINT AT 16,5;"8 FOR  OTHERS"
 5068 GOSUB 5072
 5070 GOTO 5080
 5072 PRINT AT 18,0;"--------------------------------"
 5073 PRINT AT 19,1;"BEG/END= ";S$;TAB 16;"  N= ";N$
 5074 PRINT AT 20,1;" I= ";I$;TAB 16;"PMT= ";M$
 5075 PRINT AT 21,1;"PV= ";P$;TAB 16;" FV= ";F$
 5077 RETURN
 5080 LET A$=INKEY$ 
 5082 IF A$<CHR$ 28 OR A$>CHR$ 36 THEN GOTO 5080
 5084 IF A$="8" AND X$="0" THEN GOTO 3000
 5085 IF A$="7" AND X$="0" THEN GOTO 3100
 5086 IF A$="7" AND X$="1" THEN GOTO 3000
 5087 IF A$="6" AND Y$="5" AND X$="0" THEN GOTO 8200
 5088 IF A$="6" AND Y$<>"5" AND X$="0" THEN GOTO 4100
 5089 CLS
 5090 IF A$="1" THEN GOTO 5300
 5100 IF A$="2" THEN GOTO 5500
 5110 IF A$="3" THEN GOTO 5700
 5120 IF A$="4" THEN GOTO 5900
 5130 IF A$="5" THEN GOTO 6100
 5140 IF A$="0" AND X$="0" THEN GOTO 6300
 5150 IF A$="6" AND X$="1" THEN GOTO 5000
 5160 GOTO 5080
 5300 REM "NUM"
 5310 IF X$="0" THEN GOTO 5400
 5320 LET N=-(LN ((-P-(1+I*S)*M/I)/(F-(1+I*S)/I*M))/LN (1+I))
 5330 CLS
 5340 LET N$=STR$ (INT (N*100+0.5)/100)
 5350 PRINT AT 5,3;"NUMBER OF PERIODS= ";N$ 
 5360 GOTO 7000
 5400 PRINT AT 2,1;"NUMBER OF PERIODS=?"
 5410 GOSUB 5072
 5420 INPUT N
 5425 LET N$=STR$ (INT (N*100+0.5)/100)
 5430 CLS
 5440 GOTO 5000
 5500 REM INT
 5510 IF X$="0" THEN GOTO 5600
 5520 LET U=0.002
 5522 LET C=85
 5524 LET W=0
 5525 IF M<>0 THEN GOTO 5540
 5526 LET T=((F/-P)**(1/N)-1)*100
 5530 LET I=T/100
 5535 GOTO 5580
 5540 IF U<1E-8 OR U>85-1E-8 THEN GOTO 8000
 5545 LET Q=(-P-F*(1+U)**(-N))/((1+U*S)*(1-(1+U)**(-N)))*U
 5560 IF INT (Q*1000)<>INT (M*1000) THEN GOTO 5570
 5562 LET I=U
 5564 LET T=I*100
 5566 GOTO 5580
 5570 IF Q<M AND P<=0 THEN LET W=U
 5572 IF Q>M AND P<=0 THEN LET C=U
 5574 IF Q<M AND P>0 THEN LET C=U
 5576 IF Q>M AND P>0 THEN LET W=U
 5578 LET U=W+(C-W)/2
 5579 GOTO 5540
 5580 LET I$=STR$ (INT (T*100+0.5)/100)
 5590 PRINT AT 5,3;"INTEREST RATE= ";I$
 5595 GOTO 7000
 5600 PRINT AT 2,1;"INTEREST RATE=?"
 5605 PRINT AT 3,1;"(ANNUAL INTEREST / 12)"
 5610 GOSUB 5072
 5620 INPUT T
 5630 LET I=T/100
 5640 LET I$=STR$ (INT (T*100+0.5)/100)
 5645 CLS
 5650 GOTO 5000
 5700 REM PMT
 5710 IF X$="0" THEN GOTO 5800
 5720 LET M=(-P-F*(1+I)**(-N))/((1+I*S)*(1-(1+I)**(-N)))*I
 5730 LET M$=STR$ (INT (M*100+0.5)/100)
 5740 IF Y$<>"3" THEN PRINT AT 5,3;"PAYMENT= ";M$
 5745 IF Y$="3" THEN PRINT AT 5,3;"DEPOSIT= ";M$
 5750 GOTO 7000
 5800 IF Y$<>"3" THEN PRINT AT 2,1;"PAYMENT= ?"
 5805 IF Y$="3" THEN PRINT AT 2,1;"DEPOSIT= ?"
 5810 GOSUB 5072
 5820 INPUT M
 5830 LET M$=STR$ (INT (M*100+0.5)/100)
 5840 CLS
 5850 GOTO 5000
 5900 REM PV
 5910 IF X$="0" THEN GOTO 6000
 5920 LET P=-(M*(1+I*S)/I*(1-(1+I)**(-N))+F*(1+I)**(-N))
 5930 LET P$=STR$ (INT (P*100+0.5)/100)
 5940 PRINT AT 5,3;"PRESENT VALUE= ";P$
 5950 GOTO 7000
 6000 PRINT AT 2,1;"PRESENT VALUE=?"
 6010 GOSUB 5072
 6020 INPUT P
 6030 LET P$=STR$ (INT (P*100+0.5)/100)
 6040 CLS
 6050 GOTO 5000
 6100 REM FV
 6110 IF X$="0" THEN GOTO 6200
 6120 LET F=(-M*(1+I*S)*(1-(1+I)**(-N))/I-P)/((1+I)**(-N))
 6130 LET F$=STR$ (INT (F*100+0.5)/100)
 6140 PRINT AT 5,3;"FUTURE VALUE= ";F$
 6150 GOTO 7000
 6200 PRINT AT 2,1;"FUTURE VALUE=?"
 6210 GOSUB 5072
 6220 INPUT F
 6230 LET F$=STR$ (INT (F*100+0.5)/100)
 6240 CLS
 6250 GOTO 5000
 6300 PRINT AT 2,1;"BEGIN/END(1/0)=?"
 6310 GOSUB 5072
 6320 INPUT S
 6325 IF S<>1 AND S<>0 THEN GOTO 6320
 6330 IF S=0 THEN LET S$="END"
 6340 IF S=1 THEN LET S$="BEG"
 6350 CLS
 6360 GOTO 5000
 7000 PRINT AT 15,3;"PLEASE PRESS:"
 7010 PRINT AT 17,5;"1 FOR CONTINUE"
 7020 PRINT AT 19,5;"2 FOR OTHERS"
 7025 PRINT AT 21,5;"3 FOR END PROGRAM"
 7030 LET A$=INKEY$ 
 7040 IF A$="1" THEN GOTO 5000
 7050 IF A$="3" THEN GOTO 9000
 7055 IF A$="2" THEN GOTO 3000
 7060 GOTO 7030
 7100 REM AMORTIZE
 7110 CLS
 7120 LET K=1
 7130 LET D$="0"
 7140 LET E=0
 7150 LET G=0
 7160 PRINT AT 2,1;"START PERIOD(1--";N;")=?"
 7170 PRINT AT 4,1;E
 7180 INPUT E
 7190 IF E<1 OR E>N OR INT E<E THEN GOTO 7180
 7200 PRINT AT 4,1;E
 7210 PRINT AT 7,1;"END PERIOD(";E;"--";N;")=?"
 7220 PRINT AT 9,1;G
 7230 INPUT G
 7240 IF G<E OR G>N OR INT G<G THEN GOTO 7230
 7250 PRINT AT 9,1;G
 7260 PRINT AT 11,1;"EDIT DATA(Y/N)?"
 7270 INPUT A$
 7280 CLS
 7290 IF A$="Y" THEN GOTO 7160
 7300 LET B=(ABS M*((1+I)**(-E+1)-1)/I+ABS P)/(1+I)**(-E+1)
 7310 LET H=0
 7320 LET W=0
 7330 LET B$=STR$ (INT (B*100+0.5)/100)
 7340 FOR J=E TO G
 7350 IF S<>1 OR J<>1 THEN GOTO 7400
 7360 LET L=0
 7365 LET R=ABS M
 7370 LET B=ABS P-ABS M
 7380 GOTO 7500
 7400 LET L=ABS (B*I)
 7420 LET L=INT (L*100+0.5)/100
 7430 LET R=VAL B$
 7440 LET B=(ABS M*((1+I)**(-J)-1)/I+ABS P)/(1+I)**(-J)
 7450 LET B$=STR$ (INT (B*100+0.5)/100)
 7460 LET R=R-VAL B$
 7500 LET R=INT (R*100+0.5)/100
 7505 IF D$="1" THEN GOTO 7600
 7510 PRINT AT 5,5;"AMORTIZATION SCHEDULE"
 7520 PRINT AT 6,5;"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄"
 7530 PRINT AT 8,6;" PRINCIPAL: ";P$
 7540 PRINT AT 10,6;" INTEREST:  ";I$
 7550 PRINT AT 12,6;" PERIODS:   ";N$
 7560 PRINT AT 14,6;" PAYMENT:   ";VAL M$
 7570 PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **"
 7572 LET A$=INKEY$ 
 7575 IF A$="" THEN GOTO 7572
 7580 LET D$="1"
 7590 CLS
 7600 IF K<>1 THEN GOTO 7700
 7610 PRINT AT 1,0;"N  PRINCIPAL INTEREST BALANCE"
 7620 PRINT AT 2,0;"--------------------------------"
 7630 LET X=3
 7640 LET K=K+2
 7700 PRINT AT K,0;STR$ J;TAB 4;R;TAB 13;L;TAB 22;VAL B$
 7710 LET K=K+1
 7720 IF K=20 THEN LET K=1
 7721 IF K=1 THEN PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **"
 7723 IF K=1 THEN LET A$=INKEY$ 
 7724 IF K=1 AND A$="" THEN GOTO 7723
 7725 IF K=1 THEN CLS
 7730 LET H=H+L
 7740 LET W=W+R
 7750 NEXT J
 7752 IF K+4>19 THEN PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **"
 7753 IF K+4<20 THEN GOTO 7760
 7755 LET A$=INKEY$ 
 7756 IF A$="" THEN GOTO 7755
 7760 LET K=K+1
 7780 IF K+4<20 THEN GOTO 7800
 7790 CLS
 7795 LET K=2
 7800 PRINT AT K,1;"TOTALS FOR PERIODS ";E;" TO ";G
 7810 PRINT AT K+2,5;"PRINCIPAL: ";W
 7820 PRINT AT K+4,5;"INTEREST : ";H
 7830 PRINT AT 21,0;"** PRESS ANY KEY TO CONTINUE **"
 7840 LET A$=INKEY$ 
 7850 IF A$="" THEN GOTO 7840
 7855 CLS
 7860 GOTO 7000
 8000 PRINT AT 5,3;"INTEREST OFF SCALE"
 8010 GOTO 7000
 8200 IF Y$="3" THEN GOTO 3000
 8203 LET Y$="5"
 8210 IF M=0 AND P=0 THEN GOTO 5000
 8230 IF N=0 AND T=0 THEN GOTO 5000
 8240 IF P<0 THEN LET M=ABS M
 8250 IF P>0 THEN LET M=-1*ABS M
 8260 GOTO 7100
 8500 PRINT AT 16,1;"POSITIVE(+)VALUES FOR CASH IN"
 8510 PRINT AT 17,1;"NEGATIVE(-)VALUES FOR CASH OUT"
 8520 PRINT AT 20,0;" ** PRESS ANY KEY FOR RETURN **"
 8530 LET A$=INKEY$ 
 8540 IF A$="" THEN GOTO 8530
 8545 CLS
 8550 GOTO 5000
 9000 CLS
 9010 STOP
 9950 SAVE "MONE[Y]"
 9960 RUN 

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

People

No people associated with this content.

Scroll to Top