9000 REM SUBMITTED BY DSAA 9001 REM CPATH: CRITICAL PATH ANALYSIS 9008 PRINT '* CRITICAL PATH *' 9012 DIM N(75),L(75),P(150),S(150),T(150),K(150),R(150) 9014 DIM E(75) 9018 REM N(I) IS THE NUMBER OF EVENT I 9020 REM E(I) IS THE EARLIEST TIME FOR EVENT I 9022 REM L(I) IS THE LATEST TIME FOR EVENT I 9024 REM N1 IS THE NUMBER OF EVENTS 9026 REM P(I) IS THE EVENT PRECEEDING ACTIVITY I 9028 REM S(I) IS THE NUMBER OF THE EVENT SUCEEDING EVENT I 9030 REM T(I) IS THE TIME TO COMPLETE ACTIVITY I 9032 REM R(I) IS THE NUMBER OF THE ITH RANKED ACTIVITY 9034 REM N2 IS THE NUMBER OF ACTIVITIES 9036 REM C IS THE MINIMUM TIME TO COMPLETE THE PROJECT 9046 GOTO 9110 9060 REM READ ACTIVITIES 9062 GOSUB 9152 9064 REM RANK ACTIVITIES ON ASCENDING PREDECESSOR NUMBER 9066 N5=0 9068 GOSUB 9194 9070 REM FIND EARLY EVENT TIMES 9072 GOSUB 9236 9074 REM FIND LATE EVENT TIMES 9076 GOSUB 9274 9078 REM PRINT EVENT TIMES 9080 GOSUB 9316 9082 REM PRINT ACTIVITY TIMES 9084 GOSUB 9348 9086 REM RETURN TO READ A NEW PROBLEM 9088 PRINT 9090 PRINT 9092 PRINT "*********************************************************" 9094 PRINT 9096 PRINT 9098 PRINT 'DO YOU HAVE ANOTHER PROBLEM? ("Y" FOR YES, "N" FOR NO)"; 9100 INPUT I$ 9102 IF I$='N' THEN 9999 9104 PRINT 9106 GOTO 9038 9108 MAT N=ZER 9110 REM SUBROUTINE TO READ EVENT TIMES 9111 A=0 9112 PRINT 9116 PRINT 'HOW MANY EVENTS DO YOU HAVE'; 9118 INPUT N1 9124 IF N1<=75 THEN 9132 9126 PRINT 'SORRY, I CAN ONLY HANDLE 75 EVENTS. TRY A VALUE < 75.' 9130 GOTO 9118 9132 FOR I=1 TO N1 9134 E(I)=0 9136 L(I)=0 9144 GOTO 9394 9146 INPUT N(I) 9148 NEXT I 9150 GOTO 9060 9152 A=0 9154 PRINT 9156 REM SUBROUTINE TO READ ACTIVITIES 9160 PRINT 'HOW MANY ACTIVITIES DO YOU HAVE'; 9162 INPUT N2 9168 IF N2<=150 THEN 9176 9170 PRINT 'SORRY, I CAN ONLY HANDLE 150 ACTIVITIES. TRY A VALUE < 150.' 9174 GOTO 9162 9176 FOR I=1 TO N2 9180 GOTO 9414 9182 INPUT P(I),S(I),T(I) 9183 IF P(I)>S(I) THEN 9454 9184 GOTO 9188 9187 IF P(I)>S(I) THEN9454 9188 NEXT I 9190 A=0 9192 RETURN 9194 REM SUBROUTINE TO ASSIGN RANKS TO ACTIVITIES 9196 REM IF N5=0, RANK ON ASCENDING ORDER OF PREDECESSOR 9198 REM IF N5=1, RANK ON DESCENDING ORDER OF SUCCESSOR 9200 FOR I=1 TO N2 9202 R(I)=I 9204 NEXT I 9206 N9=N2 9208 N9=N9-1 9210 N8=0 9212 FOR I=1 TO N9 9214 IF N5=1 THEN 9220 9216 IF P(R(I))<=P(R(I+1))THEN 9230 9218 GOTO 9222 9220 IF S(R(I))>=S(R(I+1)) THEN 9230 9222 R1=R(I) 9224 R(I)=R(I+1) 9226 R(I+1)=R1 9228 N8=1 9230 NEXT I 9232 IF N8=1 THEN 9208 9234 RETURN 9236 REM SUBROUTINE TO FIND EARLY EVENT TIMES 9238 FOR I=1 TO N2 9240 N3=P(R(I)) 9242 GOSUB 9260 9244 I1=K 9246 N3=S(R(I)) 9248 GOSUB 9260 9250 I2=K 9252 IF E(I2)>=E(I1)+T(R(I)) THEN 9256 9254 E(I2)=E(I1)+T(R(I)) 9256 NEXT I 9258 RETURN 9260 REM SUBROUTINE TO FIND INTERNAL NUMBER (I) OF EVENT N3 9262 FOR K=1 TO N1 9264 IF N(K)=N3 THEN 9272 9266 NEXT K 9268 PRINT 'SORRY, YOU DIDNT TELL ME ABOUT EVENT',N3 9270 STOP 9272 RETURN 9274 REM SUBROUTINE TO FIND LATE EVENT TIMES 9276 REM RANK ACTIVITIES IN DESCENDING ORDER OF SUCCESSORS 9278 N5=1 9280 GOSUB 9194 9282 FOR I=1 TO N2 9284 N3=S(R(I)) 9286 GOSUB 9260 9288 I1=K 9290 N3=P(R(I)) 9292 GOSUB 9260 9294 I2=K 9296 IF L(I2)>=L(I1)+T(R(I)) THEN 9300 9298 L(I2)=L(I1)+T(R(I)) 9300 NEXT I 9302 N3=S(R(1)) 9304 GOSUB 9260 9306 C=E(K) 9308 FOR I=1 TO N1 9310 L(I)=C-L(I) 9312 NEXT I 9314 RETURN 9316 PRINT 9318 PRINT 9320 PRINT '*********************************************************' 9322 REM SUBROUTINE TO PRINT EVENT TIMES 9324 PRINT 9326 PRINT ' ','*** EVENT TIMES ***' 9328 PRINT 9330 PRINT ' EVENT ','EARLIEST TIME','LATEST TIME' 9332 PRINT 9334 FOR I=1 TO N1 9336 IF E(I)=L(I) THEN 9342 9338 PRINT N(I),E(I),L(I) 9340 GOTO 9344 9342 PRINT N(I),E(I),L(I),'CRITICAL PATH' 9344 NEXT I 9346 RETURN 9348 REM 9350 PRINT '----------' 9352 PRINT 9354 PRINT ' ','*** ACTIVITY TIMES ***' 9356 PRINT 9358 PRINT 'PREDECESSOR','SUCCESSOR','ACTUAL TIME','MAXIMUM TIME' 9360 PRINT 9362 FOR I=1 TO N2 9364 N3=P(I) 9366 GOSUB 9260 9368 I1=K 9370 N3=S(I) 9372 GOSUB 9260 9374 I2=K 9376 D=L(I2)-E(I1) 9378 IF T(I)=D THEN 9384 9380 PRINT P(I),S(I),T(I),D 9382 GOTO 9386 9384 PRINT P(I),S(I),T(I),D;TAB(59);'CRITICAL PATH' 9386 NEXT I 9388 RETURN 9390 REM TEST DATA FOR BCP 9394 IF A=1 THEN 9404 9396 IF A=2 THEN 9410 9398 A=1 9400 PRINT 'ENTER THE ID NUMBER OF THE FIRST EVENT'; 9402 GOTO 9146 9404 A=2 9406 PRINT 'THE ID NUMBER OF THE NEXT EVENT'; 9408 GOTO 9146 9410 PRINT 'NEXT'; 9412 GOTO 9146 9414 IF A=1 THEN 9426 9416 IF A=2 THEN 9432 9418 A=1 9420 PRINT 'FOR THE FIRST ACTIVITY, ENTER THE NUMBER OF THE EVENT PRECEEDING IT,' 9422 PRINT 'THE NUMBER OF THE EVENT SECCEEDING IT, AND THE TIME OF THE ACTIVITY.' 9424 GOTO 9182 9426 A=2 9428 PRINT 'FOR THE NEXT ACTIVITY'; 9430 GOTO 9182 9432 PRINT 'NEXT'; 9434 GOTO 9182 9454 PRINT 'SORRY, RUN ABORTED. YOU INDICATED EVENT ';P(I);'PRECEEDS ';S(I) 9456 PRINT 9457 PRINT 'THESE ARE NOT IN ASCENDING ORDER. ' 9460 GOTO 9098 9999 END