1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        MCOST:   COMPARES AND EVALUATES UP TO 1000 MORTGAGE
4  REM                 PAYMENT PLANS SIMULTANEOUSLY
5  REM        36709 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8999  REM-MCOST-11/24/69-RICHARDSON-PROGRAM
9000  PRINT "TYPE 'RUN-9100' FOR INSTRUCTIONS"
9001  PRINT 
9099  GOTO 9200
9100  PRINT "    '$MCOST' PERMITS THE USER TO EASILY COMPARE AND EVALUATE"
9105  PRINT "UP TO 1000 MORTGAGE PAYMENT PLANS SIMULTANEOUSLY."
9110  PRINT "     THE PROGRAM COMPUTES MONTHLY MORTGAGE PAYMENTS FOR"
9115  PRINT "VARIOUS PRINCIPAL AMOUNTS, AT DIFFERENT INTEREST RATES,"
9120  PRINT "OVER VARYING PERIODS."
9130  PRINT "     SAMPLE INPUT:"
9135  PRINT "       ENTER THE AMOUNTS? 22000,24000"
9140  PRINT "       ENTER THE RATES (PERCENT)? 7.5"
9145  PRINT "       ENTER THE YEARS? 20,25"
9150  PRINT "FROM THE ABOVE INPUT, 4 MORTGAGE PAYMENT PLANS WILL BE"
9155  PRINT "CALCULATED AND PRINTED WITH SUPPLEMENTARY COMPARISON"
9160  PRINT "INFORMATION."
9165  PRINT 
9200  DEF FNA()=INT((*1000+5)/10)/100
9235  DIM A[36],R[36],T[36]
9250  PRINT '10"ENTER THE AMOUNTS";
9255  GOSUB 9610
9260  LET A2=Z4
9265  GOSUB 9820
9270  MAT A=X
9275  PRINT "ENTER THE RATES(PERCENT)";
9280  GOSUB 9610
9285  LET R2=Z4
9290  GOSUB 9820
9295  MAT R=X
9300  PRINT "ENTER THE YEARS";
9305  GOSUB 9610
9310  LET T2=Z4
9315  GOSUB 9820
9320  MAT T=X
9325  PRINT '10'10
9330  PRINT TAB(11);"NUMBER";
9335  PRINT TAB(48);"DECREASE";
9340  PRINT TAB(61);"INCREASE"
9345  PRINT "INTEREST";
9350  PRINT TAB(13);"OF";
9355  PRINT TAB(22);"MONTHLY";
9360  PRINT TAB(35);"TOTAL";
9365  PRINT TAB(48);"MONTHLY";
9370  PRINT TAB(61);"TOTAL"
9375  PRINT "  RATE";
9380  PRINT TAB(11);"YEARS";
9385  PRINT TAB(22);"PAYMENT";
9390  PRINT TAB(35);"INTEREST";
9395  PRINT TAB(48);"PAYMENT";
9400  PRINT TAB(61);"INTEREST"
9405  GOSUB 9805
9410  FOR A1=1 TO A2
9415  PRINT '10'10"AMOUNT = ";FNA(A[A1])
9420  PRINT "------"'10
9425  FOR R1=1 TO R2
9430  LET R5=P1=0
9435  FOR T1=1 TO T2
9440  LET C9=2
9445  LET X9=R[R1]
9450  GOSUB 9870
9455  LET C9=15
9460  LET X9=T[T1]
9465  GOSUB 9870
9470  LET N=12*T[T1]
9475  LET R3=R[R1]/1200
9480  LET P=(A[A1]*R3)/(1-1/((1+R3)^N))
9485  LET R4=P*N-A[A1]
9490  LET C9=25
9495  LET X9=P
9500  GOSUB 9870
9505  LET C9=40
9510  LET X9=R4
9515  GOSUB 9870
9520  IF P1=0 THEN 9540
9525  LET C9=51
9530  LET X9=P1-P
9535  GOSUB 9870
9540  IF R5=0 THEN 9560
9545  LET X9=R4-R5
9550  LET C9=66
9555  GOSUB 9870
9560  PRINT 
9565  LET R5=R4
9570  LET P1=P
9575  NEXT T1
9580  PRINT 
9585  NEXT R1
9590  GOSUB 9805
9595  NEXT A1
9600  PRINT '10'10'10'10'10'10'10'10
9605  STOP 
9610  REM EVALUATE A NUMERICAL STRING
9615  REM THE ROUTINE WILL INPUT A STRING USING A$, AND WILL RETURN
9620  REM THE NUMERICAL VALUES IN ARRAY X. THE VARIABLE Z4 WIL 
9625  REM HOLD THE LENGTH OF THE ARRAY.
9630  REM THE ROUTINE USES THE STRINGS A$ AND N$; AND THE ARRAYS 
9635  REM X AND Y; AND THE VARIABLES Z1, Z2, Z3, Z4
9640  DIM A$[72],N$[14],X[36],Y[36]
9645  LET N$="0123456789., "'3
9650  MAT X=ZER
9655  MAT Y=ZER
9660  INPUT A$
9665  LET Z4=1
9670  LET Z2=0
9675  FOR Z3=1 TO LEN(A$)
9680  FOR Z1=1 TO 14
9685  IF A$[Z3,Z3]=N$[Z1,Z1] THEN 9705
9690  NEXT Z1
9695  PRINT "NON-NUMERIC INPUT - TRY AGAIN";
9700  GOTO 9650
9705  IF Z1 <= 10 THEN 9720
9710  GOTO Z1-10 OF 9795,9735,9730
9715  STOP 
9720  IF Z2 <> 0 THEN 9790
9725  LET X[Z4]=X[Z4]*10+(Z1-1)
9730  NEXT Z3
9735  IF Z2=0 THEN 9745
9740  LET X[Z4]=X[Z4]+Y[Z4]*10^(1-Z2)
9745  LET X[Z4+1]=0
9750  IF Z1 <> 12 THEN 9775
9755  LET Z1=0
9760  LET Z4=Z4+1
9765  LET Z2=0
9770  GOTO 9730
9775  IF Z1 <> 0 THEN 9785
9780  LET Z4=Z4-1
9785  RETURN 
9790  LET Y[Z4]=Y[Z4]*10+(Z1-1)
9795  LET Z2=Z2+1
9800  GOTO 9730
9805  PRINT "---------------------------------------------------";
9810  PRINT "------------------"
9815  RETURN 
9820  LET S1=0
9825  FOR S=1 TO 36
9830  IF X[S+1]=0 THEN 9860
9835  IF X[S] <= X[S+1] THEN 9855
9840  LET S1=X[S]
9845  LET X[S]=X[S+1]
9850  LET X[S+1]=S1
9855  NEXT S
9860  IF S1 <> 0 THEN 9820
9865  RETURN 
9870  LET T9=C9-2
9875  IF ABS(X9)<1 THEN 9885
9880  LET T9=T9-INT((LOG(ABS(X9))+5.E-07)/LOG(10))
9885  PRINT TAB(T9);FNA(X9);
9890  RETURN 
9999  END 
