home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug055.arc
/
CRITPATH.BAS
< prev
next >
Wrap
BASIC Source File
|
1979-12-31
|
10KB
|
272 lines
10 '~~~~~~~~~~~~~~~~~~ PGM Titled 'CRITPATH' ~~~~~~~~~~~~~~~~~~
12 '
14 ' ~~~~~~~~~~~~~~~ Computing The Critical Path ~~~~~~~~~~~~~~
16 '
18 ' ~~~ From 'Byte' Page 378 Volume 7,Number 7, July 1982 ~~~
20 '
22 ' The PGM is written for Exidy Disc Basic which is identical
24 ' to MBASIC with the exception of the INKEY$ command, in
26 ' Exidy Disc Basic this is INPUT$.
28 '
30 CLEAR 1000: PRINT CHR$(12)
32 PRINT SPC(10)"CPM NORMAL AND CRASH TIME/COSTS"
34 PRINT SPC(10)"-------------------------------":PRINT
36 PRINT
38 INPUT"DISC SYSTEM OR TAPE (D/T) ";S$: PRINT
40 PRINT"NOTE BEGINNING EVENTS WILL BE SORTED IN NUMERICAL ORDER ":PRINT:INPUT"DIMENSIONS FOR ACTIVITIES ";D%:PRINT
42 DIM A$(D%,2),A(D%,13),SV(12),C$(10)
44 PRINT"INPUT MENU":PRINT
46 PRINT" K KEYBOARD"
48 PRINT" D DISK FILE"
50 PRINT" R READ STATEMENT":PRINT
52 INPUT"SELECTION ";IO$:PRINT
54 IF IO$<>"K" THEN 88
56 INPUT"NUMBER OF ACTIVITIES ";M%:EE=0
58 PRINT"IF THIS IS GOING TO BE WORK, YOU MUST NOW INPUT"
60 PRINT"UP TO";M%;"ACTIVITIES":PRINT
62 FOR I=1 TO M%
64 INPUT"ACTIVITY CODE ";A$(I,1):PRINT
66 INPUT"DESCRIPTION ";A$(I,2):PRINT
68 INPUT" START EVENT NUMBER ";A(I,1)
70 INPUT" END EVENT NUMBER ";A(I,2)
72 INPUT" NORMAL TIME (hours) ";A(I,3)
74 INPUT" COST $. per hour ";C0
76 INPUT" CRASH TIME (hours) ";A(I,5)
78 INPUT" COST $. per hour ";C1:PRINT:PRINT
80 A(I,4)=(A(I,3)*C0)
82 A(I,6)=(A(I,5)*C1)
84 NEXT I
86 GOTO 124
88 ' Loading Data To Disc
90 IF IO$<>"D" THEN 108
92 INPUT"Name of File : Disk ";B$:' Disk Input
94 OPEN "I",1,B$
96 INPUT #1,1,B$
98 FOR I=1 TO M%
100 INPUT #1 A$(I,1),A$(I,2),A(I,1),A(I,2),A(I,3),A(I,$),A(I,5),A(I,6)
102 NEXT I
104 CLOSE 1
106 GOTO 124
108 IF IO$<>"R" THEN 44
110 READ M%,EE
112 FOR I=1 TO M% : ' Read Input
114 READ A$(I,1),A$(I,2),A(I,1),A(I,2),A(I,3),C0,A(I,5),C1
116 IF A$(I,1)="END" THEN 124
118 A(I,4)=(A(I,3)*C0)
120 A(I,6)=(A(I,5)*C1)
122 NEXT I
124 ' Prints Input Data for Verification
126 M=M%:TP=0:FOR I=1 TO M:IF A(I,2)>TP THEN TP=A(I,2)
128 NEXT I:EE=TP
130 FOR I=1 TO M -1
132 FOR J=I+1 TO M
134 IF A(I,1)<=A(J,1) THEN 140
136 FOR K=1 TO 12:SV(K)=A(I,K):A(I,K)=A(J,K):A(J,K)=SV(K):NEXT K
138 FOR K=1 TO 2:SV$(K)=A$(I,K):A$(I,K)=A$(J,K):A$(J,K)=SV$(K):NEXT K
140 NEXT J,I
142 XX=5:PRINT"Verification of Input":PRINT
144 Z1$="Code Description Time Early Early Last Last Slack"
146 Z2$=" Used Start Finish Start Fin Time"
148 Z3$="Code Description Begin End Normal Crash"
150 Z4$=" Event Event Time Cost Time Cost"
152 PRINT "No.";Z3$
154 PRINT " ";Z4$
156 K=0:PRINT
158 C$(4)="## "
160 FOR I=1 TO M%
162 PRINT USING C$(4);I;
164 C$(1)=" ### "
166 C$(2)="\ \":C$(10)="\ \":C$(3)=" ####.##"
168 PRINT USING C$(2);A$(I,1);:PRINT USING C$(10);A$(I,2);
170 FOR J=1 TO 2
172 PRINT USING C$(1);A(I,J);:NEXT J
174 FOR J=3 TO 6
176 PRINT USING C$(3);A(I,J);:NEXT J
178 K=K+1:IF K>=13 THEN PRINT:PRINT:INPUT"Enter To Page ";DU$:K=0
180 PRINT:NEXT I
182 PRINT
184 INPUT"-2 To Add, -1 To Continue Or Number To Change ";L:IF L=-1 THEN 198
186 IF L<>-2 THEN 190
188 L=M%+1:M%=L:N%=N%+1
190 PRINT"Input Code, Description, Begining Event Number":PRINT
192 PRINT"End Event Number, Normal Time, Cost And Crash"
194 PRINT:INPUT"Time And Cost ";A$(L,1),A$(L,2),A(L,1),A(L,2),A(L,3),A(L,4),A(L,5),A(L,6)
196 GOTO 124
198 PRINT:INPUT"Hard Copy of Input Data (Y/N) ";P$
200 IF P$<>"Y" THEN 240
202 INPUT"Title ";T$:LPRINT"Title: ";T$
204 LPRINT
206 INPUT"Date ";T$:LPRINT"Date: ";T$
208 LPRINT
210 LPRINT"No.";Z3$
212 LPRINT" ";Z4$
214 LPRINT
216 FOR I=1 TO M%
218 LPRINT USING C$(4);I;
220 LPRINT USING C$(2);A$(I,1);
222 LPRINT USING C$(10);A$(I,2);
224 FOR J=1 TO 2
226 LPRINT USING C$(1);A(I,J);:NEXT J
228 FOR J=3 TO 6
230 LPRINT USING C$(3);A(I,J);:NEXT J
232 LPRINT" "
234 NEXT I
236 ' Now The Work Begins - Beginning Event is 1
238 ' Early Start =0 Forward Pass
240 PRINT:INPUT"Normal Time Or Full Crash Time (N/C) ";NC$
242 PRINT:IF NC$<>"N" AND NC$<>"C" THEN 240
244 FOR I=1 TO M%:IF NC$="N" THEN A(I,7)=A(I,3)
246 IF NC$="C" THEN A(I,7)=A(I,5)
248 NEXT I
250 FOR I=1 TO M%
252 IF A(I,1)=1 THEN A(I,8)=0:A(I,9)=A(I,7):GOTO 268
254 MAX=0!
256 FOR J=1 TO M%
258 IF A(J,2)<>A(I,1) THEN 264
260 IF A(J,9)>MAX THEN MAX=A(J,9)
262 A(I,8)=MAX
264 NEXT J
266 A(I,9)=A(I,8)+A(I,7)
268 NEXT I
270 ' Backward Pass
272 XM=0!
274 FOR I=M% TO 1 STEP -1
276 IF A(I,2)<>EE THEN 280
278 IF XM<A(I,9) THEN XM=A(I,9)
280 NEXT I
282 FOR I=M% TO 1 STEP -1
284 IF A(I,2)=EE THEN A(I,11)=XM:GOTO 298
286 MIM=99999!
288 FOR J=M% TO 1 STEP -1
290 IF A(I,2)<>A(J,1) THEN 296
292 IF A(J,10)<MIM THEN MIM=A(J,10)
294 A(I,11)=MIM
296 NEXT J
298 A(I,10)=A(I,11)-A(I,7)
300 NEXT I
302 ' Slack Variable Calculations
304 FOR I=1 TO M%
306 A(I,12)=A(I,11)-A(I,9)
308 NEXT I
310 K=0:' Print Output
312 PRINT"Code Description Used Early Early Last Last Slack"
314 PRINT" Time Start Fini Start Fini Time"
316 PRINT
318 C$(5)="###.##"
320 C$(6)=" ###.##"
322 FOR I=1 TO M%
324 PRINT USING C$(2);A$(I,1);:PRINT USING C$(10);A$(I,2);
326 PRINT USING C$(5);A(I,7);
328 FOR J=8 TO 12:PRINT USING C$(6);A(I,J);:NEXT J
330 PRINT:K=K+1:IF K=13 THEN PRINT:INPUT"Enter To Page";DU$:PRINT:K=0
332 NEXT I
334 PRINT:INPUT"Hard Copy Of Results (Y/N) ";P$:IF P$<>"Y" THEN 358
336 IF NC$="C" THEN LPRINT:LPRINT "Full Crash Time Analysis"
338 LPRINT
340 LPRINT"Code Description Used Early Early Last Last Slack"
342 LPRINT" Time Start Finish Start Fini. Time"
344 LPRINT
346 FOR I=1 TO M%
348 LPRINT USING C$(2);A$(I,1);
350 LPRINT USING C$(10);A$(I,2);
352 LPRINT USING C$(5);A(I,7);
354 FOR J=8 TO 12:LPRINT USING C$(6);A(I,J);:NEXT J
356 LPRINT" ":NEXT I
358 PRINT CHR$(12);"OUTPUT MENU":PRINT
360 PRINT" C COST AND TIME OF CRITICAL PATH"
362 PRINT" D DISK"
364 PRINT" E END"
366 PRINT" R RECYCLE"
368 PRINT" S SELECTIVE CRASHING":PRINT
370 INPUT" SELECTION ";OP$
372 PRINT:PRINT
374 IF OP$="R" THEN 124
376 IF OP$<>"S" THEN 436
378 IF NC$<>"N" THEN INPUT"CAN NOT CRASH FROM FULL CRASH - ENTER TO CONTINUE ";DU$:GOTO 358
380 CLEAR:PRINT"Selective Crashing -- Starts From Normal Run **"
382 PRINT:INPUT"New Run (Y/N) ";DU$
384 IF DU$="Y"THEN FOR I=1 TO M%:A(I,13)=0:A(I,7)=A(I,3):NEXT I
386 PRINT"No.Code Description Select Crash Unit Total"
388 PRINT" Time Cost Cost Cost"
390 J=0:FOR I=1 TO M%:IF A(I,13)=0 AND A(I,12)>.00001 THEN 400
392 X=(A(I,6)-A(I,4))/(A(I,3)-A(I,5))
394 PRINT USING C1$;I;:PRINT USING C2$;A$(I,1);A$(I,2);
396 PRINT USING C3$;A(I,7);A(I,13);X;A(I,6)-A(I,4)
398 J=J+1:IF J=13 THEN J=0:INPUT"Enter To Page ";DU$
400 NEXT I
402 INPUT"-1 To Continue Or Number To Change ";IZ
404 IF IZ=-1 THEN 418
406 INPUT"Crash Dollars Over Normal Dollars ";CD
408 X=A(IZ,3)-A(IZ,5):TS=CD/((A(IZ,6)-A(IZ,4))/X)
410 IF TS>X THEN TS=X:INPUT"Wasted Money - Enter To Continue";DU$
412 A(IZ,13)=CD:A(IZ,7)=A(IZ,7)-TS
414 IF A(IZ,7)<A(IZ,5) THEN A(IZ,7)=A(IZ,5):INPUT"Over Crashed -- Enter To Continue ";DU$
416 GOTO 386
418 INPUT"Hard Copy (Y/N) ";DU$:IF DU$="N" THEN 250
420 LPRINT"No.Code Description Select Crash Unit Total
422 LPRINT" Time Cost Cost Cost"
424 J=0:FOR I=1 TO M%:IF A(I,13)=0 AND A(I,12)>.00001 THEN 434
426 X=(A(I,6)-A(I,4))/(A(I,3)-A(I,5))
428 LPRINT USING C1$;I;:LPRINT USING C2$;A$(I,1),A$(I,2);
430 LPRINT USING C3$;A(I,7),A(I,13),X,A(I,6)-A(I,4)
432 J=J+1:IF J=13 THEN J=0:INPUT"Enter To Continue ";DU$
434 NEXT I:GOTO 250
436 IF OP$<>"C" THEN 496
438 ' Identification Of Critical Path And Costs
440 CO=0:PATH$=" "::CX=0:CY=0:CZ=0:CP=0:CW=0
442 FOR I=1 TO M%:IF A(I,12)>.00001 THEN 448:'0 Defined As 0.0001
444 CO=CO+A(I,3):PATH$=PATH$+" "+A$(I,1):CX=CX+A(I,4)
446 CY=CY+A(I,6):CZ=CZ+A(I,7):CP=CP+A(I,5):CW=CW+A(I,13)
448 NEXT I:C$(7)="$$###,###.##":IF NC$="C" THEN CW=CW-CX
450 PRINT"CRITICAL PATH";:PRINT PATH$:PRINT
452 PRINT"Time Of Critical Path ";CZ
454 PRINT"Cost Of Critical Path ";:PRINT USING C$(7);CW+CX
456 PRINT"Incremental Cost ";:PRINT USING C$(7);CW
458 PRINT"Normal Time Critical Path ";CO
460 PRINT"Normal Cost Of Critical Path ";:PRINT USING C$(7);CX
462 PRINT"Full Crash Time Of Critical Path ";CP
464 PRINT"Full Crash Cost Of Critical Path ";:PRINT USING C$(7);CY
466 PRINT
468 INPUT"Hard Copy (Y/N) ";P$:IF P$<>"Y" THEN 358
470 LPRINT" ":LPRINT"CRITICAL PATH ";PATH$
472 LPRINT
474 LPRINT"Time Of Critical Path . . . . . . . ";CZ
476 LPRINT"Cost Of Critical Path . . . . . . . ";
478 LPRINT USING C$(7);CW+CX
480 LPRINT"Incremental Cost . . . . . . . . . ";
482 LPRINT USING C$(7);CW
484 LPRINT"Normal Time Critical Path . . . . . ";CO
486 LPRINT"Normal Cost Of Critical Path . . . ";
488 LPRINT USING C$(7);CX
490 LPRINT"Full Crash Time Of Critical Path. . ";CP
492 LPRINT"Full Crash Cost Of Critical Path. . ";
494 LPRINT USING C$(7);CY:GOTO 358
496 IF OP$="E" THEN END
498 IF OP$<>"D" THEN 508
500 LINE INPUT"Name Of File : Disk ";X$:OPEN "O",1,X$
502 PRINT #1,M%,EE
504 FOR I=1 TO M%:PRINT #1,CHR$(34);A$(I,1);CHR$(34);",";A$(I,2);CHR$(34);A(I,1);A(I,2);A(I,3);A(I,4);A(I,5);A(I,6):NEXT I
506 CLOSE 1:GOTO 358
508 END
510 DATA 18,9
512 DATA A,"Acct.Papers",1,2,2,20,1,30
514 DATA Z,"Permits",2,7,5,50,4,80
516 DATA B,"Shop Bankers",1,3,4,40,3,60
518 DATA C,"Shop Real Est.",1,4,13,130,10,170
520 DATA D,"Market Study",2,3,4,40,3,50
522 DATA G,"Contractor",2,5,2.2,22,1.7,67
524 DATA F,"Insurance",2,6,1.3,13,.5,15
526 DATA H,"Art Plans",3,5,4,40,3,60
528 DATA E,"Cost Study",3,4,4,40,3,50
530 DATA I,"Land",4,5,11,110,10,130
532 DATA J,"Material",5,6,3,30,2,40
534 DATA K,"Plans",5,7,5,50,2,120
536 DATA L,"Survey",5,8,2,20,1,40
538 DATA M,"Buy Mat.# 1",6,8,7,30,4,40
540 DATA O,"Buy Mat.# 2",6,9,8,20,5,50
542 DATA N,"Layout",7,8,21,110,12,120
544 DATA P,"Foundation",8,9,9,30,6,60
546 DATA Q,"Hire Crew",2,7,9,2,20,1,30
20,5,50
542 DATA N,"Layout",7,8,21,110,12,120
544 DATA P,"Foundation",8