home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug055.arc / CRITPATH.BAS < prev    next >
BASIC Source File  |  1979-12-31  |  10KB  |  272 lines

  1. 10 '~~~~~~~~~~~~~~~~~~ PGM Titled 'CRITPATH' ~~~~~~~~~~~~~~~~~~
  2. 12 '
  3. 14 ' ~~~~~~~~~~~~~~~ Computing The Critical Path ~~~~~~~~~~~~~~
  4. 16 '
  5. 18 ' ~~~ From 'Byte' Page 378 Volume 7,Number 7, July 1982 ~~~
  6. 20 '
  7. 22 ' The PGM is written for Exidy Disc Basic which is identical
  8. 24 ' to MBASIC with the exception of the INKEY$ command, in
  9. 26 ' Exidy Disc Basic this is INPUT$.
  10. 28 '
  11. 30 CLEAR 1000: PRINT CHR$(12)
  12. 32 PRINT SPC(10)"CPM NORMAL AND CRASH TIME/COSTS"
  13. 34 PRINT SPC(10)"-------------------------------":PRINT
  14. 36 PRINT
  15. 38 INPUT"DISC SYSTEM OR TAPE (D/T) ";S$: PRINT
  16. 40 PRINT"NOTE BEGINNING EVENTS WILL BE SORTED IN NUMERICAL ORDER ":PRINT:INPUT"DIMENSIONS FOR ACTIVITIES ";D%:PRINT
  17. 42 DIM A$(D%,2),A(D%,13),SV(12),C$(10)
  18. 44 PRINT"INPUT MENU":PRINT
  19. 46 PRINT"     K     KEYBOARD"
  20. 48 PRINT"     D     DISK FILE"
  21. 50 PRINT"     R     READ STATEMENT":PRINT
  22. 52 INPUT"SELECTION ";IO$:PRINT
  23. 54 IF IO$<>"K" THEN 88
  24. 56 INPUT"NUMBER OF ACTIVITIES ";M%:EE=0
  25. 58 PRINT"IF THIS IS GOING TO BE WORK, YOU MUST NOW INPUT"
  26. 60 PRINT"UP TO";M%;"ACTIVITIES":PRINT
  27. 62 FOR I=1 TO M%
  28. 64 INPUT"ACTIVITY CODE ";A$(I,1):PRINT
  29. 66 INPUT"DESCRIPTION   ";A$(I,2):PRINT
  30. 68 INPUT"   START EVENT NUMBER ";A(I,1)
  31. 70 INPUT"   END   EVENT NUMBER ";A(I,2)
  32. 72 INPUT"    NORMAL TIME (hours)    ";A(I,3)
  33. 74 INPUT"      COST $. per hour     ";C0
  34. 76 INPUT"    CRASH TIME (hours)     ";A(I,5)
  35. 78 INPUT"      COST $. per hour     ";C1:PRINT:PRINT
  36. 80 A(I,4)=(A(I,3)*C0)
  37. 82 A(I,6)=(A(I,5)*C1)
  38. 84 NEXT I
  39. 86 GOTO 124
  40. 88 ' Loading Data To Disc
  41. 90 IF IO$<>"D" THEN 108
  42. 92 INPUT"Name of File : Disk ";B$:' Disk Input
  43. 94 OPEN "I",1,B$
  44. 96 INPUT #1,1,B$
  45. 98 FOR I=1 TO M%
  46. 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)
  47. 102 NEXT I
  48. 104 CLOSE 1
  49. 106 GOTO 124
  50. 108 IF IO$<>"R" THEN 44
  51. 110 READ M%,EE
  52. 112 FOR I=1 TO M% : ' Read Input
  53. 114 READ A$(I,1),A$(I,2),A(I,1),A(I,2),A(I,3),C0,A(I,5),C1
  54. 116 IF A$(I,1)="END" THEN 124
  55. 118 A(I,4)=(A(I,3)*C0)
  56. 120 A(I,6)=(A(I,5)*C1)
  57. 122 NEXT I
  58. 124 ' Prints Input Data for Verification
  59. 126 M=M%:TP=0:FOR I=1 TO M:IF A(I,2)>TP THEN TP=A(I,2)
  60. 128 NEXT I:EE=TP
  61. 130 FOR I=1 TO M -1
  62. 132 FOR J=I+1 TO M
  63. 134 IF A(I,1)<=A(J,1) THEN 140
  64. 136 FOR K=1 TO 12:SV(K)=A(I,K):A(I,K)=A(J,K):A(J,K)=SV(K):NEXT K
  65. 138 FOR K=1 TO 2:SV$(K)=A$(I,K):A$(I,K)=A$(J,K):A$(J,K)=SV$(K):NEXT K
  66. 140 NEXT J,I
  67. 142 XX=5:PRINT"Verification of Input":PRINT
  68. 144 Z1$="Code Description  Time     Early    Early   Last     Last     Slack"
  69. 146 Z2$="                  Used     Start    Finish  Start    Fin     Time"
  70. 148 Z3$="Code Description   Begin  End   Normal          Crash"
  71. 150 Z4$="                   Event Event   Time    Cost    Time   Cost"
  72. 152 PRINT "No.";Z3$
  73. 154 PRINT "   ";Z4$
  74. 156 K=0:PRINT
  75. 158 C$(4)="##  "
  76. 160 FOR I=1 TO M%
  77. 162 PRINT USING C$(4);I;
  78. 164 C$(1)=" ### "
  79. 166 C$(2)="\  \":C$(10)="\            \":C$(3)=" ####.##"
  80. 168 PRINT USING C$(2);A$(I,1);:PRINT USING C$(10);A$(I,2);
  81. 170 FOR J=1 TO 2
  82. 172 PRINT USING C$(1);A(I,J);:NEXT J
  83. 174 FOR J=3 TO 6
  84. 176 PRINT USING C$(3);A(I,J);:NEXT J
  85. 178 K=K+1:IF K>=13 THEN PRINT:PRINT:INPUT"Enter To Page ";DU$:K=0
  86. 180 PRINT:NEXT I
  87. 182 PRINT
  88. 184 INPUT"-2 To Add,  -1 To Continue Or Number To Change ";L:IF L=-1 THEN 198
  89. 186 IF L<>-2 THEN 190
  90. 188 L=M%+1:M%=L:N%=N%+1
  91. 190 PRINT"Input Code, Description, Begining Event Number":PRINT
  92. 192 PRINT"End Event      Number, Normal Time, Cost And Crash"
  93. 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)
  94. 196 GOTO 124
  95. 198 PRINT:INPUT"Hard Copy of Input Data (Y/N) ";P$
  96. 200 IF P$<>"Y" THEN 240
  97. 202 INPUT"Title ";T$:LPRINT"Title: ";T$
  98. 204 LPRINT
  99. 206 INPUT"Date ";T$:LPRINT"Date: ";T$
  100. 208 LPRINT
  101. 210 LPRINT"No.";Z3$
  102. 212 LPRINT"   ";Z4$
  103. 214 LPRINT
  104. 216 FOR I=1 TO M%
  105. 218 LPRINT USING C$(4);I;
  106. 220 LPRINT USING C$(2);A$(I,1);
  107. 222 LPRINT USING C$(10);A$(I,2);
  108. 224 FOR J=1 TO 2
  109. 226 LPRINT USING C$(1);A(I,J);:NEXT J
  110. 228 FOR J=3 TO 6
  111. 230 LPRINT USING C$(3);A(I,J);:NEXT J
  112. 232 LPRINT" "
  113. 234 NEXT I
  114. 236 ' Now The Work Begins - Beginning Event is 1 
  115. 238 ' Early Start =0 Forward Pass
  116. 240 PRINT:INPUT"Normal Time Or Full Crash Time (N/C) ";NC$
  117. 242 PRINT:IF NC$<>"N" AND NC$<>"C" THEN 240
  118. 244 FOR I=1 TO M%:IF NC$="N" THEN A(I,7)=A(I,3)
  119. 246 IF NC$="C" THEN A(I,7)=A(I,5)
  120. 248 NEXT I
  121. 250 FOR I=1 TO M%
  122. 252 IF A(I,1)=1 THEN A(I,8)=0:A(I,9)=A(I,7):GOTO 268
  123. 254 MAX=0!
  124. 256 FOR J=1 TO M%
  125. 258 IF A(J,2)<>A(I,1) THEN 264
  126. 260 IF A(J,9)>MAX THEN MAX=A(J,9)
  127. 262 A(I,8)=MAX
  128. 264 NEXT J
  129. 266 A(I,9)=A(I,8)+A(I,7)
  130. 268 NEXT I
  131. 270 ' Backward Pass
  132. 272 XM=0!
  133. 274 FOR I=M% TO 1 STEP -1
  134. 276 IF A(I,2)<>EE THEN 280
  135. 278 IF XM<A(I,9) THEN XM=A(I,9)
  136. 280 NEXT I
  137. 282 FOR I=M% TO 1 STEP -1
  138. 284 IF A(I,2)=EE THEN A(I,11)=XM:GOTO 298
  139. 286 MIM=99999!
  140. 288 FOR J=M% TO 1 STEP -1
  141. 290 IF A(I,2)<>A(J,1) THEN 296
  142. 292 IF A(J,10)<MIM THEN MIM=A(J,10)
  143. 294 A(I,11)=MIM
  144. 296 NEXT J
  145. 298 A(I,10)=A(I,11)-A(I,7)
  146. 300 NEXT I
  147. 302 ' Slack Variable Calculations
  148. 304 FOR I=1 TO M%
  149. 306 A(I,12)=A(I,11)-A(I,9)
  150. 308 NEXT I
  151. 310 K=0:' Print Output
  152. 312 PRINT"Code Description    Used   Early   Early   Last     Last   Slack"
  153. 314 PRINT"                    Time   Start   Fini    Start    Fini   Time"
  154. 316 PRINT
  155. 318 C$(5)="###.##"
  156. 320 C$(6)="  ###.##"
  157. 322 FOR I=1 TO M%
  158. 324 PRINT USING C$(2);A$(I,1);:PRINT USING C$(10);A$(I,2);
  159. 326 PRINT USING C$(5);A(I,7);
  160. 328 FOR J=8 TO 12:PRINT USING C$(6);A(I,J);:NEXT J
  161. 330 PRINT:K=K+1:IF K=13 THEN PRINT:INPUT"Enter To Page";DU$:PRINT:K=0
  162. 332 NEXT I
  163. 334 PRINT:INPUT"Hard Copy Of Results (Y/N) ";P$:IF P$<>"Y" THEN 358
  164. 336 IF NC$="C" THEN LPRINT:LPRINT "Full Crash Time Analysis"
  165. 338 LPRINT
  166. 340 LPRINT"Code Description    Used   Early   Early   Last     Last   Slack"
  167. 342 LPRINT"                    Time   Start   Finish  Start    Fini.  Time"
  168. 344 LPRINT
  169. 346 FOR I=1 TO M%
  170. 348 LPRINT USING C$(2);A$(I,1);
  171. 350 LPRINT USING C$(10);A$(I,2);
  172. 352 LPRINT USING C$(5);A(I,7);
  173. 354 FOR J=8 TO 12:LPRINT USING C$(6);A(I,J);:NEXT J
  174. 356 LPRINT" ":NEXT I
  175. 358 PRINT CHR$(12);"OUTPUT MENU":PRINT
  176. 360 PRINT"     C     COST AND TIME OF CRITICAL PATH"
  177. 362 PRINT"     D     DISK"
  178. 364 PRINT"     E     END"
  179. 366 PRINT"     R     RECYCLE"
  180. 368 PRINT"     S     SELECTIVE CRASHING":PRINT
  181. 370 INPUT"     SELECTION     ";OP$
  182. 372 PRINT:PRINT
  183. 374 IF OP$="R" THEN 124
  184. 376 IF OP$<>"S" THEN 436
  185. 378 IF NC$<>"N" THEN INPUT"CAN NOT CRASH FROM FULL CRASH - ENTER TO CONTINUE ";DU$:GOTO 358
  186. 380 CLEAR:PRINT"Selective Crashing -- Starts From Normal Run **"
  187. 382 PRINT:INPUT"New Run (Y/N) ";DU$
  188. 384 IF DU$="Y"THEN FOR I=1 TO M%:A(I,13)=0:A(I,7)=A(I,3):NEXT I
  189. 386 PRINT"No.Code Description   Select  Crash     Unit    Total"
  190. 388 PRINT"                       Time   Cost      Cost    Cost"
  191. 390 J=0:FOR I=1 TO M%:IF A(I,13)=0 AND A(I,12)>.00001 THEN 400
  192. 392 X=(A(I,6)-A(I,4))/(A(I,3)-A(I,5))
  193. 394 PRINT USING C1$;I;:PRINT USING C2$;A$(I,1);A$(I,2);
  194. 396 PRINT USING C3$;A(I,7);A(I,13);X;A(I,6)-A(I,4)
  195. 398 J=J+1:IF J=13 THEN J=0:INPUT"Enter To Page ";DU$
  196. 400 NEXT I
  197. 402 INPUT"-1 To Continue Or Number To Change ";IZ
  198. 404 IF IZ=-1 THEN 418
  199. 406 INPUT"Crash Dollars Over Normal Dollars ";CD
  200. 408 X=A(IZ,3)-A(IZ,5):TS=CD/((A(IZ,6)-A(IZ,4))/X)
  201. 410 IF TS>X THEN TS=X:INPUT"Wasted Money - Enter To Continue";DU$
  202. 412 A(IZ,13)=CD:A(IZ,7)=A(IZ,7)-TS
  203. 414 IF A(IZ,7)<A(IZ,5) THEN A(IZ,7)=A(IZ,5):INPUT"Over Crashed  --  Enter To Continue ";DU$
  204. 416 GOTO 386
  205. 418 INPUT"Hard Copy (Y/N) ";DU$:IF DU$="N" THEN 250
  206. 420 LPRINT"No.Code Description   Select  Crash    Unit   Total
  207. 422 LPRINT"                       Time    Cost    Cost   Cost"
  208. 424 J=0:FOR I=1 TO M%:IF A(I,13)=0 AND A(I,12)>.00001 THEN 434
  209. 426 X=(A(I,6)-A(I,4))/(A(I,3)-A(I,5))
  210. 428 LPRINT USING C1$;I;:LPRINT USING C2$;A$(I,1),A$(I,2);
  211. 430 LPRINT USING C3$;A(I,7),A(I,13),X,A(I,6)-A(I,4)
  212. 432 J=J+1:IF J=13 THEN J=0:INPUT"Enter To Continue ";DU$
  213. 434 NEXT I:GOTO 250
  214. 436 IF OP$<>"C" THEN 496
  215. 438 ' Identification Of Critical Path And Costs
  216. 440 CO=0:PATH$=" "::CX=0:CY=0:CZ=0:CP=0:CW=0
  217. 442 FOR I=1 TO M%:IF A(I,12)>.00001 THEN 448:'0 Defined As 0.0001 
  218. 444 CO=CO+A(I,3):PATH$=PATH$+" "+A$(I,1):CX=CX+A(I,4)
  219. 446 CY=CY+A(I,6):CZ=CZ+A(I,7):CP=CP+A(I,5):CW=CW+A(I,13)
  220. 448 NEXT I:C$(7)="$$###,###.##":IF NC$="C" THEN CW=CW-CX
  221. 450 PRINT"CRITICAL PATH";:PRINT PATH$:PRINT
  222. 452 PRINT"Time Of Critical Path            ";CZ
  223. 454 PRINT"Cost Of Critical Path            ";:PRINT USING C$(7);CW+CX
  224. 456 PRINT"Incremental Cost                 ";:PRINT USING C$(7);CW
  225. 458 PRINT"Normal Time Critical Path        ";CO
  226. 460 PRINT"Normal Cost Of Critical Path     ";:PRINT USING C$(7);CX
  227. 462 PRINT"Full Crash Time Of Critical Path ";CP
  228. 464 PRINT"Full Crash Cost Of Critical Path ";:PRINT USING C$(7);CY
  229. 466 PRINT
  230. 468 INPUT"Hard Copy (Y/N) ";P$:IF P$<>"Y" THEN 358
  231. 470 LPRINT" ":LPRINT"CRITICAL PATH ";PATH$
  232. 472 LPRINT
  233. 474 LPRINT"Time Of Critical Path . . . . . . . ";CZ
  234. 476 LPRINT"Cost Of Critical Path . . . . . . .         ";
  235. 478 LPRINT USING C$(7);CW+CX
  236. 480 LPRINT"Incremental Cost  . . . . . . . . .         ";
  237. 482 LPRINT USING C$(7);CW
  238. 484 LPRINT"Normal Time Critical Path . . . . . ";CO
  239. 486 LPRINT"Normal Cost Of Critical Path  . . .         ";
  240. 488 LPRINT USING C$(7);CX
  241. 490 LPRINT"Full Crash Time Of Critical Path. . ";CP
  242. 492 LPRINT"Full Crash Cost Of Critical Path. .         ";
  243. 494 LPRINT USING C$(7);CY:GOTO 358
  244. 496 IF OP$="E" THEN END
  245. 498 IF OP$<>"D" THEN 508
  246. 500 LINE INPUT"Name Of File : Disk ";X$:OPEN "O",1,X$
  247. 502 PRINT #1,M%,EE
  248. 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
  249. 506 CLOSE 1:GOTO 358
  250. 508 END
  251. 510 DATA 18,9
  252. 512 DATA A,"Acct.Papers",1,2,2,20,1,30
  253. 514 DATA Z,"Permits",2,7,5,50,4,80
  254. 516 DATA B,"Shop Bankers",1,3,4,40,3,60
  255. 518 DATA C,"Shop Real Est.",1,4,13,130,10,170
  256. 520 DATA D,"Market Study",2,3,4,40,3,50
  257. 522 DATA G,"Contractor",2,5,2.2,22,1.7,67
  258. 524 DATA F,"Insurance",2,6,1.3,13,.5,15
  259. 526 DATA H,"Art Plans",3,5,4,40,3,60
  260. 528 DATA E,"Cost Study",3,4,4,40,3,50
  261. 530 DATA I,"Land",4,5,11,110,10,130
  262. 532 DATA J,"Material",5,6,3,30,2,40
  263. 534 DATA K,"Plans",5,7,5,50,2,120
  264. 536 DATA L,"Survey",5,8,2,20,1,40
  265. 538 DATA M,"Buy Mat.# 1",6,8,7,30,4,40
  266. 540 DATA O,"Buy Mat.# 2",6,9,8,20,5,50
  267. 542 DATA N,"Layout",7,8,21,110,12,120
  268. 544 DATA P,"Foundation",8,9,9,30,6,60
  269. 546 DATA Q,"Hire Crew",2,7,9,2,20,1,30
  270. 20,5,50
  271. 542 DATA N,"Layout",7,8,21,110,12,120
  272. 544 DATA P,"Foundation",8