10  REM ****  HP TIME-SHARED BASIC PROGRAM LIBRARY  *******************
20  REM
30  REM            EQUIL1:  EQUILIBRIUM SYSTEMS
40  REM
50  REM            36308  (A833)  REV A --10/71
60  REM
70  REM ****  CONTRIBUTED PROGRAM  ************************************
80  REM EQUILI - COPYRIGHT 1971, POLYTECHNIC INSTITUTE OF BROOKLYN
90  REM EQUILIBRIUM SYSTEM, JOHN MARCHISOTTO 
100  REM REVISED 8/20/70 (D. PESSEL)
110  DIM D[20],E[20],F[20],W[3]
120  LET D1=0
130  LET E1=0
140  LET F1=0
150  PRINT "THIS PROGRAM WILL INVESTIGATE THE EQUILIBRIUM SYSTEM"
160  PRINT 
170  PRINT "            2HI = H2 + I2"
180  PRINT 
190  PRINT "WHAT IS THE EQUILIBRIUM CONSTANT";
200  INPUT K
210  IF K >= 0 THEN 240
220  PRINT "THE EQUILIBRIUM CONSTANT MUST BE NON-NEGATIVE."
230  GOTO 190
240  PRINT "WHAT IS THE INITIAL CONCENTRATION OF HI";
250  INPUT C
260  IF C >= 0 THEN 290
270  PRINT "THE INITIAL CONCENTRATION OF HI MUST BE NON-NEGATIVE."
280  GOTO 240
290  PRINT 
300  PRINT "WOULD YOU LIKE THE RESULTS PLOTTED (1), TABULATED (2)"
310  PRINT "OR BOTH (3) (TYPE THE APPROPRIATE NUMBER)";
320  INPUT Q1
330  IF Q1<2 THEN 400
340  PRINT 
350  PRINT 
360  PRINT "INIT. I2"," EQUIL. H2"," EQUIL. I2"," EQUIL. HI"
370  PRINT "--------"," ---------"," ---------"," ---------"
380  PRINT "INIT. HI"," INIT. HI"," INIT. HI"," INIT. HI"
390  PRINT 
400  LET A=4*K
410  LET B=1-A
420  FOR X=1 TO 16
430  LET X1=X-1
440  LET D[X]=(-(A+X1)+SQR((A+X1)^2+A*B))/(2*B)
450  LET E[X]=X1+D[X]
460  LET F[X]=1-2*D[X]
470  IF Q1<2 THEN 490
480  PRINT X1,D[X],E[X],F[X]
490  IF D[X]<D1 THEN 510
500  LET D1=D[X]
510  IF E[X]<E1 THEN 530
520  LET E1=E[X]
530  IF F[X]<F1 THEN 550
540  LET F1=F[X]
550  NEXT X
560  IF Q1 <> 2 THEN 650
570  PRINT 
580  PRINT "*****"
590  PRINT 
600  PRINT "WOULD YOU LIKE ANOTHER RUN (1-YES, 0-NO)";
610  INPUT Q2
620  IF Q2>0 THEN 190
630  STOP 
640  REM PLOTTING ROUTINE FOR THREE CURVES
650  PRINT 
660  PRINT 
670  PRINT "A: (EQUIL. H2)/(INIT. HI)      MAXIMUM IS "D1
680  PRINT "B: (EQUIL. I2)/(INIT. HI)      MAXIMUM IS "E1
690  PRINT "C: (EQUIL. HI)/(INIT. HI)      MAXIMUM IS "F1
700  PRINT 
710  PRINT "INIT. I2";TAB(26);"A - B - C"
720  PRINT "--------  0        25        50        75       100";
730  PRINT "   % OF MAXIMUM"
740  PRINT "INIT. HI  I---------I---------I---------I---------I"
750  FOR X=1 TO 16
760  PRINT TAB(5);X-1;TAB(10);"I";
770  LET W[1]=INT(40*D[X]/D1+.5)
780  LET W[2]=INT(40*E[X]/E1+.5)
790  LET W[3]=INT(40*F[X]/F1+.5)
800  REM  FIND WHICH IS SMALLEST, THEN PRINT IT AND MAXIMIZE IT 
810  FOR Q=1 TO 3
820  LET K1=1.E+20
830  FOR I=1 TO 3
840  IF W[I]>K1 THEN 860
850  LET K1=W[I]
860  NEXT I
870  PRINT TAB(K1+10);
880  FOR I=1 TO 3
890  IF ABS(W[I]-K1)<.0001 THEN 920
900  NEXT I
910  STOP 
920  IF I <> 1 THEN 950
930  PRINT "A";
940  GOTO 1000
950  IF I <> 2 THEN 980
960  PRINT "B";
970  GOTO 1000
980  IF I <> 3 THEN 910
990  PRINT "C";
1000  LET W[I]=1.E+25
1010  NEXT Q
1020  PRINT " "
1030  NEXT X
1040  PRINT 
1050  PRINT 
1060  GOTO 580
1070  END 
