1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        BNKSIM:   SIMULATES ONE YEAR'S DEPOSIT AND WITHDRAWAL
4  REM                  ACTIVITIES OF A SMALL BANK
5  REM        36713 REV  A   10/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8999  REM-BNKSIM-1/7/70-RICHARDSON-PROGRAM
9000  PRINT "TYPE 'RUN-9100' FOR INSTRUCTIONS"
9001  PRINT 
9002  GOTO 9200
9100  PRINT "THIS PROGRAM WILL SIMULATE ONE YEAR'S ACTIVITIES OF A SMALL"
9102  PRINT "BANK USING PROBABILITIES FOR WITHDRAWALS AND DEPOSITS. IT"
9104  PRINT "ASSUMES THESE WITHDRAWALS AND DEPOSITS ARE NORMALLY DISTRIBUTED."
9106  PRINT "THIS BANK WILL BE OPEN 20 DAYS A MONTH, WITH INTEREST COMPUTED"
9108  PRINT "QUARTERLY ON THE MINIMUM BALANCE. THE PROGzps WILL PRODUCE"
9110  PRINT "MONTHLY, QUARTERLY AND YEARLY STATEMENTS."
9112  PRINT 
9200  LET A0=E=T=0
9201  LET Q=RND(-1)
9202  MAT A=ZER
9204  PRINT "IN THIS PROGRAM YOU HAVE YOUR CHOICE OF THE TYPE OF DATA TO USE."
9206  PRINT "BY ENTERING THE NUMBER  1  ,THE COMPUTER WILL BEGIN ALL"
9208  PRINT "BALANCES AT $100. IN THIS MANNER THE USER CAN SEE THE"
9210  PRINT "EFFECTS MUCH EASIER ON THE ACCOUNT BALANCES FROM MONTH TO MONTH."
9212  PRINT 
9214  PRINT "BY ENTERING THE NUMBER  2  , THE COMPUTER WILL SELECT LARGER"
9216  PRINT "RANDOM NUMBERS FOR BEGINNING BALANCES."
9218  PRINT 
9220  PRINT "WHICH TYPE DO YOU WANT TO USE";
9222  INPUT Z
9226  PRINT "HOW MANY CUSTOMERS DO YOU WISH TO USE IN THIS SIMULATION(LIMIT--"
9228  PRINT "--50-- FOR STORAGE PURPOSES)";
9229  INPUT N
9230  IF N <= 50 THEN 9238
9234  PRINT "TOO MANY CUSTOMERS. TRY AGAIN"
9236  GOTO 9226
9238  PRINT 
9240  PRINT "WHAT IS THE YEARLY INTEREST OF THIS BANK(IN DECIMAL FORM)";
9242  INPUT R
9244  IF R <= .1 THEN 9250
9246  PRINT "INTEREST NOT CORRECTLY ENTERED OR GREATER THAN 10%."
9248  GOTO 9240
9250  PRINT 
9252  PRINT "WHAT IS THE PROBABILITY OF A CUSTOMER ENTERING THE BANK DURING"
9254  PRINT "ONE MONTH?  THE BANK IS OPEN 20 DAYS PER MONTH.(E.G.,2 DAYS OUT"
9256  PRINT "OF 20 = .10 PROBABILITY)";
9258  INPUT E
9260  IF E <= 1 THEN 9266
9262  PRINT "PROBABILITY NOT ENTERED CORRECTLY; TRY AGAIN."
9264  GOTO 9252
9266  PRINT 
9268  PRINT "WHAT IS THE MEAN TRANSACTION FOR EACH PERSON ENTERING--IN"
9270  PRINT "DOLLARS--ASSUMING ALL DEPOSITS AND WITHDRAWALS HAVE THE SAME"
9272  PRINT "MEAN";
9274  INPUT M
9276  PRINT 
9278  PRINT "WHAT IS THE STANDARD DEVIATION--IN DOLLARS";
9280  INPUT S
9282  PRINT 
9284  PRINT "WHAT IS THE PROBABILITY THAT, WHEN A  CUSTOMER ENTERS THE "
9286  PRINT "BANK, HE WILL WITHDRAW MONEY";
9288  INPUT T
9290  IF T <= .99 THEN 9296
9292  PRINT "YOU HAVE ENTERED THE PROBABILITY INCORRECTLY; TRY AGAIN."
9294  GOTO 9284
9296  PRINT 
9298  PRINT 
9300  PRINT "**PROBLEM: TO SIMULATE BANK ACTIVITIES USING";N;" CUSTOMERS,"
9302  PRINT "WITH THE BANK HAVING A";R;" YEARLY RATE."
9304  PRINT "P(WITHDRAWAL/ENTRY INTO BANK) IS";T;" WITH THE MEAN TRANSACTION"
9306  PRINT "BEING $";M;" AND THE STANDARD DEVIATION BEING $";S
9308  PRINT 
9310  PRINT 
9312  REM     THE SIMULATION PROCEDURE ACTUALLY BEGINS HERE......
9314  DIM A[50],M[50],Z[50]
9316  LET P=Q=0
9318  FOR I=1 TO N
9320  IF Z=1 THEN 9326
9322  LET A[I]=RND(A0)*1000+100
9324  GOTO 9328
9326  READ A[I]
9328  LET M[I]=A[I]
9330  NEXT I
9332  PRINT "$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $"
9334  PRINT 
9336  PRINT 
9338  PRINT TAB(10);"THE NUMBERS TO BE USED AS BEGINNING BALANCES FOR THE"
9340  PRINT TAB(30);"ACCOUNTS ARE"
9342  PRINT 
9344  PRINT 
9346  PRINT "CUSTOMER";TAB(16);"BALANCE";TAB(43);"CUSTOMER";TAB(59);"BALANCE"
9348  FOR I=1 TO INT(N/2+.5)
9350  IF INT(N/2+.5) <> I THEN 9358
9352  IF N/2=INT(N/2+.5) THEN 9358
9354  PRINT I,A[I]
9356  GOTO 9360
9358  PRINT I,A[I]," ",I+INT(N/2+.5),A[I+(INT(N/2+.5))]
9360  LET Q=Q+A[I]+A[I+(INT(N/2+.5))]
9362  NEXT I
9364  PRINT 
9366  PRINT "TOTAL BEGINNING BALANCES";Q
9368  PRINT 
9370  FOR C=1 TO 240
9372  GOTO 9392
9374  IF C/60=INT(C/60) THEN 9442
9376  IF C/20=INT(C/20) THEN 9464
9378  NEXT C
9380  PRINT TAB(15);"THE FINAL ACCOUNT BALANCES FOR THE YEAR ARE"
9382  PRINT 
9384  PRINT 
9386  PRINT "CUSTOMER";TAB(16);"BALANCE";TAB(43);"CUSTOMER";TAB(59);"BALANCE"
9388  GOSUB 9472
9390  STOP 
9392  FOR I=1 TO N
9394  IF RND(A0) <= E THEN 9414
9396  REM     THE COMPUTER IS GENERATING RANDOM NUMBERS AND CHECKING THEM
9398  REM     AGAINST THE VALUE OF E--THE PROBABILITY OF A CUSTOMER
9400  REM     ENTERING THE BANK.  IF HE DID ENTER(IF THE SELECTED VALUE
9402  REM     IS LESS THAN E), THE COMPUTER THEN DETERMINES IF THE PERSON
9404  REM     WITHDREW ANY MONEY.  IT DOES THIS IN THE SAME MANNER. 
9406  REM     THE COMPUTER SELECTS A RANDOM NUMBER AND COMPARES IT
9408  REM     WITH T--THE P(WITHDRAW/ENTER THE BANK).
9410  NEXT I
9412  GOTO 9374
9414  IF RND(A0) <= T THEN 9422
9416  LET D=COS(6.28138*RND(A0))*S*SQR(-2*LOG(RND(A0)))+M
9418  LET A[I]=A[I]+D
9420  GOTO 9410
9422  LET W=COS(6.28138*RND(A0))*S*SQR(-2*LOG(RND(A0)))+M
9424  LET A[I]=A[I]-W
9426  IF A[I]>0 THEN 9436
9428  REM     IF THE WITHDRAWAL IS LARGER THAN THE BALANCE, THE PERSON
9430  REM     WILL ONLY WITHDRAWAL THE MONEY HE HAS IN HIS ACCOUNT.
9432  REM     HIS ACCOUNT WILL THEN BE ZERO.
9434  LET A[I]=0
9436  IF A[I]>M[I] THEN 9410
9438  LET M[I]=A[I]
9440  GOTO 9410
9442  PRINT TAB(31);"QUARTER";C/60
9444  PRINT "CUSTOMER";TAB(16);"BALANCE";TAB(30);"INTEREST"
9446  FOR I=1 TO N
9448  LET Z[I]=R/4*M[I]
9450  REM     THE INTEREST WAS JUST CALCULATED.
9452  LET P=P+Z[I]
9454  LET A[I]=A[I]+Z[I]
9456  LET M[I]=A[I]
9458  NEXT I
9460  GOSUB 9498
9462  GOTO 9378
9464  PRINT TAB(31);"MONTH";C/20
9466  PRINT "CUSTOMER";TAB(16);"BALANCE";TAB(43);"CUSTOMER";TAB(59);"BALANCE"
9468  GOSUB 9472
9470  GOTO 9378
9472  LET A5=0
9474  FOR I=1 TO INT(N/2+.5)
9476  LET A5=A5+A[I+(INT(N/2+.5))]+A[I]
9478  PRINT I,INT(100*(A[I]+.005))/100," ",
9480  IF INT(N/2+.5) <> I THEN 9484
9482  IF N/2 <> INT(N/2+.5) THEN 9486
9484  PRINT I+(INT(N/2+.5)),INT(100*(A[I+(INT(N/2+.5))]+.005))/100
9486  NEXT I
9488  PRINT 
9490  PRINT "TOTAL";A5
9492  PRINT 
9494  PRINT 
9496  RETURN 
9498  LET A6=0
9500  FOR I=1 TO N
9502  LET A6=A6+A[I]
9504  PRINT I,INT(100*(A[I]+.005))/100,Z[I]
9506  NEXT I
9508  PRINT 
9510  PRINT "TOTAL IN BANK";A6
9512  PRINT "TOTAL CUMULATIVE INTEREST";P
9514  PRINT 
9516  PRINT 
9518  RETURN 
9810  DATA 100,100,100,100,100,100,100,100,100,100,100,100,100,100
9900  DATA 100,100,100,100,100,100,100,100,100,100,100,100,100,100
9920  DATA 100,100,100,100,100,100,100,100,100,100,100,100,100,100
9930  DATA 100,100,100,100,100,100,100,100
9940  REM     REVISED AND COMPILED BY CHAR  HORR
9950  END 
