1  REM ****  HP BASIC PROGRAM LIBRARY  ******************************
2  REM
3  REM       GCPM1: CRITICAL PATH ANALYSIS
4  REM
5  REM       36505 REV A
6  REM
7  REM ****  CONTRIBUTED PROGRAM  ***********************************
10  REM CPM1 - PERFORMS CRITICAL PATH ANALYSIS
30  REM J. MOORE (2/10/70)
40  REM
50  REM ENTER DATA AT LINE 8000. SEE WRITEUP FOR DETAILS
60  REM         INPUT DATA
70  REM WRITEUP  PROGRAM  DESCRIPTION
80  REM    N        N     NUMBER OF TASKS (<=45)
90  REM   SI        M     NO.OF SUCCESSOR TASKS TO TASK I
100  REM  KSI        J     NO.OF KTH SUCC. TO TASK I
110  REM  KTI     P(I,J)   TIME REQD. ON TASK I BEFORE TASK KSI
120  REM                      CAN BE STARTED
130  REM
200  DIM P[45,45],E[45],L[45]
210  MAT P=ZER
220  MAT E=ZER
230  MAT L=CON
235  REM
240  REM WE SET UP OUR PRECEDENCE MATRIX WITH THE TIMES INVOLVED
245  REM
260  READ N
270  FOR I=1 TO N-1
290  READ M
300  IF M=0 THEN 360
310  FOR K=1 TO M
320  READ J,P[I,J]
330  IF J <= I THEN 9000
350  NEXT K
360  NEXT I
370  REM OUR PRECEDENCE MATRIX WITH THE TIMES INVOLVED IS SET UP
380  REM NOW WE CALCULATE OUR EARLIEST AND LATEST STARTS
390  REM FOLLOWING THIS WE CAN FIND OUTR CRITICAL PATH(S)
400  REM FIRST WE FIND EARLIEST STARTS
410  PRINT 
411  PRINT 
412  PRINT 
413  PRINT "EVENT NUMBER","EARLIEST START","LATEST START","SLACK TIME"
414  FOR I=1 TO N-1
420  FOR J=I+1 TO N
430  IF P[I,J]=0 THEN 470
440  T1=E[I]+P[I,J]
450  IF E[J] >= T1 THEN 470
460  E[J]=T1
470  NEXT J
480  NEXT I
490  REM THE EARLIEST STARTS ARE NOW IN THE E ARRAY
500  MAT L=(E[N])*L
510  REM NOW WE CALCULATE THE LATEST STARTS
520  FOR J=N TO 2 STEP -1
530  FOR I=J-1 TO 1 STEP -1
540  IF P[I,J]=0 THEN 580
550  T1=L[J]-P[I,J]
560  IF T1 >= L[I] THEN 580
570  L[I]=T1
580  NEXT I
590  NEXT J
600  REM THE EARLIEST AND LATEST STARTS ARE NOW IN THE E AND L ARRAYS
650  FOR I=1 TO N
660  PRINT I,E[I],L[I],L[I]-E[I]
670  NEXT I
680  PRINT "THE TIME TO PROJECT COMPLETION IS: "E[N]
690  PRINT "THE JOBS ON THE CRITICAL PATH ARE:"
700  FOR I=1 TO N-1
710  IF E[I]<L[I] THEN 730
720  PRINT I">";
730  NEXT I
740  PRINT N
741  PRINT "ONE CRITICAL PATH THROUGH THE NETWORK IS:"
742  FOR I=1 TO N-1
743  IF E[I] <> L[I] THEN 746
744  I1=I
745  GOTO 747
746  NEXT I
747  PRINT I1">";
748  FOR J=N TO I1+1 STEP -1
749  IF E[J] <> L[J] THEN 753
750  IF P[I1,J]=0 THEN 753
751  I1=J
752  GOTO 754
753  NEXT J
754  IF I1=N THEN 757
755  PRINT I1">";
756  GOTO 748
757  PRINT N
759  PRINT 
760  PRINT 
770  PRINT 
780  PRINT "HOW MANY LINKS OF THE NETWORK DO YOU WISH TO CHANGE?"
790  INPUT N1
795  IF N1=0 THEN 9999
800  PRINT "FOR EACH LINK TYPE:FIRST JOB,SECOND JOB,TIME INVOLVED."
810  FOR K=1 TO N1
820  INPUT I,J,P1
830  IF I >= J THEN 870
840  P[I,J]=P1
850  NEXT K
855  MAT E=ZER
860  MAT L=CON
865  GOTO 410
870  PRINT "YOU HAVE JOB "J" TO BE COMPLETED BEFORE JOB "I;
880  PRINT ".THIS IS NOT ALLOWED."
890  PRINT "CHECK YOUR DATA AND BEGIN AGAIN."
900  GOTO 780
7900  GOTO 9999
9000  PRINT "YOU HAVE JOB "J" TO BE COMPLETED BEFORE JOB "I;
9010  PRINT ".THIS IS NOT ALLOWED."
9020  PRINT "CHECK YOUR DATA AND BEGIN AGAIN."
9999  END 
