1  REM  ****  HP BASIC PROGRAM LIBRARY  *******************************
2  REM
3  REM        ISOMER:  DRILL ON NAMING ALKANE
4  REM
5  REM        36261  REV A  --  2/73
6  REM
7  REM  ****  CONTRIBUTED PROGRAM  ************************************
8  REM
9  M0=100
10  REM  THIS PROGRAM WILL GENERATE A WORKSHEET OF ALKANES WITH SIMPLE
15  REM ALKYL SIDE CHAINS.  THE LARGEST ALKANES IT WILL GENERATE WILL
20  REM BE DECANES.  SINCE ETHANE AND METHANE ARE TRIVIAL T NAME, THIS
25  REM PROGRAM WILL NOT GENERATE THEM.  TEN ALKANES ARE GENERATED AND
30  REM PRINTED, THEN A ROW OF ASTERIXES, AND THEN THE NAMES OF THE 
35  REM ALKANES.  THE STUDENT IS TO FOLD THE PRINTOUT ON THE ROW OF 
40  REM OF ASTERIXES SO THAT THE NAMES ARE NOT VISIBLE.  THEN AFTER HE
45  REM NAMES THE ALKANES HE CHECKS THE ANSWERS WITH THOSE GIVEN AT THE
50  REM BOTTOM.
55  REM
60  REM CARBON HAS FOUR BONDS AVAILABLE, AND IT IS ASSUMED THAT ANY
65  REM NOT SHOWN ARE WITH HYDROGENS, WHICH ARE NOT PRINTED.
70  REM
75  REM
80  REM PROGRAM BY PHILLIP SHORT
85  REM
90  REM   BURNSVILLE SENIOR IGH SCHOOL
95  DIM E[20,11]
100  PRINT TAB(15)"ALKANES WITH SIMPLE ALKYL SIDECHAINS"'13'10'10
105  DIM A[2,20],B[2,20],C[20,20],B$[10],C$[11],D$[72]
110  FILES ISO-1
115  PRINT '13'10'10"HOW MANY HYDROCARBONS DO YOU WANT PRINTED";
120  INPUT Z0
125  IF Z0>10 THEN 140
130  PRINT '10'10'10
135  GOTO 150
140  PRINT '13'10" THIS NUMBER MUST BE LESS THAN OR EQUAL TO 10."'13'10
145  GOTO 115
150  LET C$="12345678910"
155  FOR Z=1 TO Z0
160  PRINT "( ";C$[Z,Z+INT(LOG(Z+.3)/LOG(10))];" )"
165  PRINT 
170  N=INT(RND(1)*8)+3
175  IF N/2=INT(N/2) THEN 195
180  M1=INT(N/2)+1
185  M=2*(M1-1)^2
190  GOTO 200
195  M=2*((N/2-1)*N/2)
200  LET M=INT((M+1)*RND(1))
205  MAT A=ZER[2,N]
210  MAT D=ZER[2,N]
215  X2=X3=0
220  M9=0
225  FOR X=1 TO M
230  S1=INT((N-2)*RND(1))+2
235  IF A[2,S1]#0 THEN 230
240  X1=(S1) MIN (N-S1+1)
245  X1=X1-1
250  X1=(X1) MIN (M)
255  A=1
260  IF A[A,S1]=0 THEN 270
265  A=2
270  D[A,S1]=A[A,S1]=INT(1+X1*RND(1))
275  IF D[2,S1] <= D[1,S1] THEN 295
280  K0=D[2,S1]
285  D[2,S1]=D[1,S1]
290  D[1,S1]=K0
295  IF A=2 THEN 310
300  X2=(X2) MAX (A[A,S1])
305  GOTO 315
310  X3=(X3) MAX (A[A,S1])
315  M=M-A[A,S1]
320  M9=M9+1
325  IF M9=2*N-4 OR M=0 OR M9=M0 THEN 335
330  NEXT X
335  T1=T2=0
340  FOR A=1 TO N
345  FOR B=1 TO 2
350  T1=T1+(A*A[B,A])^2
355  T2=T2+(A*A[B,N+1-A])^2
360  NEXT B
365  NEXT A
370  IF T1 <= T2 THEN 425
375  FOR A=1 TO INT(N/2)
380  FOR B=1 TO 2
385  K0=A[B,N+1-A]
390  K=D[B,N+1-A]
395  A[B,N+1-A]=A[B,A]
400  D[B,N+1-A]=D[B,A]
405  A[B,A]=K0
410  D[B,A]=K
415  NEXT B
420  NEXT A
425  IF Z=1 THEN 475
430  FOR A=1 TO Z-1
435  IF E[2*A-1,11]#N THEN 470
440  FOR B=1 TO N
445  FOR C=1 TO 2
450  IF E[2*A-2+C,B]#D[C,B] THEN 4470
455  NEXT C
460  NEXT B
465  GOTO 170
470  NEXT A
475  E[2*Z-1,11]=N
480  FOR A=1 TO N
485  FOR B=1 TO 2
490  E[2*Z-2+B,A]=D[B,A]
495  NEXT B
500  NEXT A
505  A=1
510  LET B$="^   C   "
513  LET A=1
515  FOR X=X2 TO 1 STEP -1
520  GOSUB 590
525  GOSUB 580
530  NEXT X
535  FOR X=1 TO N-1
540  PRINT "C-";
545  NEXT X
550  PRINT "C"
553  LET A=2
555  FOR X=1 TO X3
560  GOSUB 580
565  GOSUB 590
570  NEXT X
575  GOTO 780
580  LET B=1
585  GOTO 595
590  LET B=5
595  FOR Y=1 TO N-1
600  PRINT B$[B+2*(A[A,Y]<X),B+1+2*(A[A,Y]<X)];
605  NEXT Y
610  PRINT 
615  RETURN 
730  FOR B=1 TO V
735  READ B$
740  NEXT B
745  W=LEN(B$)
750  D$[T,T+W-1]=B$
755  T=T+W
760  RETURN 
765  DATA "","DI","TRI","TETRA","PENTA","HEXA","HEPTA","OCTA","NONA","DECA"
770  DATA "UNDECA","DODECA","TRIDECA","TETRADECA","PENTADECA","HEXADECA"
775  DATA "METH","ETH","PROP","BUT","PENT","HEX","HEPT","OCT","NON","DEC"
780  T=1
785  U=0
790  FOR A=1 TO (X2) MAX (X3)
795  V=0
800  FOR B=1 TO N
805  FOR C=1 TO 2
810  IF A[C,B]#A THEN 865
815  IF U=0 OR V#0 THEN 830
820  D$[T,T]="-"
825  T=T+1
830  U=1
835  V=V+1
840  IF V=1 THEN 855
845  D$[T,T]=","
850  T=T+1
855  D$[T,T]=C$[B,B]
860  T=T+1
865  NEXT C
870  NEXT B
875  IF V=0 THEN 945
880  D$[T,T]="-"
885  T=T+1
890  RESTORE 765
895  GOSUB 730
900  V=A
905  RESTORE 775
910  GOSUB 730
915  D$[T,T+1]="YL"
920  T=T+2
925  IF A=(X2) MAX (X3) THEN 950
930  PRINT #1;D$
935  D$=B$[2,1]
940  T=1
945  NEXT A
950  V=N
955  RESTORE 775
960  GOSUB 730
965  D$[T,T+4]="ANE"'13'10
970  PRINT #1;D$
975  D$=B$[2,1]
980  PRINT '10'10'10
985  NEXT Z
990  PRINT '10'10"***********************FOLD UNDER*****************************"
995  PRINT '13'10'10
1000  READ #1,1
1005  N=1
1010  PRINT "( 1 )   ";
1015  T=0
1020  GOTO 1045
1025  T=0
1030  N=N+1
1035  IF N=Z0+1 THEN 1075
1040  PRINT '13'10"( ";C$[N,N+INT(LOG(N+.1)/LOG(10))];" )   ";
1045  READ #1;D$
1050  T=T+LEN(D$)
1055  IF T>60 THEN 1085
1060  PRINT D$;
1065  IF D$[LEN(D$),LEN(D$)]='10 THEN 1025
1070  IF TYP(-1)#3 THEN 1045
1075  PRINT '13'10'10"**************************************************************"
1080  END 
1085  T=LEN(D$)
1090  PRINT "";TAB(10);
1095  GOTO 1050
1100  END 
