THE PAST MASTER CLUB
CRITICAL PATH.HTM




path


path1


path2


path3


path4


path5


path6


path7


path8


path9

align=center>

10 ''PATH.BAS COPYRIGHTED 1990 NICK K. VAN VLIET TRANSLATED OCT/99 �
20 Q = 1: R = Q + Q: P = R + Q: S = P + R: L = S + R: F = Q - Q: d = R * P
H = P * L: W = P * P: E = R * S: WW = H + E: T = P + Q
V = L + Q: EQ = E + Q: ER = E + R: EP = E + P: ET = E + T: EL = E + L
EW = E + W: EE = E + E: u = EE + V: G = Q
30 N = QR: OO = E * E: O = Q / OO: COLOR EQ, Q, Q: CLS : COLOR EQ, P
40 PRINT "CODEBREAKER "; : COLOR F, 4: PRINT " NICK VAN VLIET "; : COLOR 15, S
50 PRINT " "; : PRINT DATE$; " "; : PRINT TIME$; " "; : COLOR 15, F
60 PRINT " CRITICAL-PATH ": COLOR 15, Q
70 LOCATE R, Q: INPUT "No. OF NODES ? ", N$
'DYNAMIC$
80 N = VAL(N$) - Q
90 INPUT "WORK ON SATURDAY: (/N) ? ", V$
IF V$ = "n" OR V$ = "N" THEN V$ = "N" ELSE V$ = "Y"
100 INPUT "No. OF DAYS TO COMPLETION ? ", C$
110 '' INPUT "DATES REQUIRED (/N) ? ",A$
120 '' IF A$="n" OR A$="N" THEN A$="N" :GOTO 180 '
130 a$ = "Y": PRINT "STARTING DATE"
140 INPUT "YEAR ? ", IY
150 IF iy < 1901 THEN GOTO 140
160 INPUT "MONTH (1-12) ? ", IM
170 IF im < Q OR im > ER THEN GOTO 160
180 GOSUB 1570
190 LOCATE V, 30: PRINT u$
200 LOCATE V, Q: COLOR F, P: id = Q: PRINT : PRINT " "; u$; TAB(P * V); iy: COLOR R:
GOSUB 1630
210 LOCATE EE + Q, Q: COLOR P * S, Q: PRINT "DAY TO START (1-" + STR$(DL) + ")"; :
INPUT " ? ", ID
220 IF id < Q OR id > DL THEN GOTO 210
230 GOSUB 1570: LOCATE V, Q: COLOR F, P: PRINT : PRINT " "; u$; TAB(P * V); iy: COLOR R:
GOSUB 1630
240 LOCATE EE + Q, Q: PRINT : COLOR P * S, Q:
INPUT "WOULD YOU LIKE TO SEE AN EXAMPLE (/N) ? ", W$
250 IF W$ = "n" OR W$ = "N" THEN
W$ = "N": INPUT "IS EVERYTHING CORRECT (/N) ?", u$:
IF u$ = "n" OR u$ = "N" THEN RUN
ELSE
W$ = "Y": : u$ = "Y": N = EQ 'FOR THE EXAMPLE
END IF
260 CLS : DIM P(N + Q, N): DIM O(N + Q, N): DIM T(N + Q, N): DIM S(N + Q, N)
IF W$ = "n" OR W$ = "N" THEN GOTO 290
270 GOSUB 1380
280 GOTO 300
290 GOSUB 1150
300 FOR I = F TO N: FOR j = F TO N: P(I, j) = O(j, I): NEXT: P(I, I) = Q: NEXT
310 DIM d(N, N): FOR I = F TO N: FOR j = F TO N: a = F: FOR K = F TO N: a = a + P(I, K) * P(K, j):
NEXT: d(I, j) = -(a <> F): NEXT: NEXT
320 FOR I = F TO N: FOR j = F TO N: a = F: FOR K = F TO N: a = a + d(I, K) * d(K, j): NEXT:
P(I, j) = -(a <> F): NEXT: NEXT: FOR j = F TO N: P(N + Q, j) = j + Q: NEXT
330 FOR I = F TO N: FOR j = F TO N: d(I, j) = F: NEXT: NEXT: B = F: X = F
340 C = F: FOR I = F TO N: y = F: a = F: FOR j = F TO N: a = a + P(I, j):
IF (a = Q AND P(I, j) = Q) THEN y = P(N + Q, j)
350 NEXT: IF a <> Q THEN GOTO 370
360 d(B, C) = y: X = (X AND X >= C) + (C AND X < C): C = C + Q
370 NEXT: FOR K = F TO C - Q: FOR j = F TO N: IF d(B, K) = P(N + Q, j) THEN GOTO 390
380 NEXT: GOTO 400
390 FOR I = F TO N + Q: FOR y = j TO N - Q: P(I, y) = P(I, y + Q): NEXT: P(I, N) = F: NEXT
400 NEXT K: BB = B - Q: B = B + Q: IF a THEN GOTO 340
410 COLOR 15, 5, 5: '' SCREEN 0,0,0:
CLS : PRINT "LEVELS NO DECENDENTS": PRINT : DIM E(BB, X): DIM y(L, N)
420 FOR I = F TO BB: PRINT I + Q; TAB(T); "> ";
430 FOR j = F TO X: E(I, j) = d(I, j): IF d(I, j) <> F THEN PRINT "-"; d(I, j);
440 NEXT: PRINT : NEXT: BEEP: FOR I = F TO N: FOR j = F TO N
d(I, j) = O(I, j): P(I, j) = O(I, j): NEXT: NEXT
450 P(N + Q, F) = Q: FOR I = F TO N: FOR j = F TO N
P(I, j) = F: d(I, j) = O(I, j): NEXT: NEXT
460 B = F: FOR I = F TO N: IF P(N + Q, I) = F THEN GOTO 500
470 FOR j = F TO N: IF O(I, j) = F AND d(I, j) = F THEN GOTO 490
480 P(I, j) = T(I, j) + P(N + Q, I): d(I, j) = F
490 NEXT j
500 NEXT I
FOR j = F TO N: IF P(N + Q, j) > F THEN GOTO 550
510 a = F: FOR I = F TO N: a = a + d(I, j): NEXT
IF a > F THEN B = Q: GOTO 550
520 y = F: FOR I = F TO N: X = P(I, j)
IF X > y THEN
y(F, j) = I + Q:y(Q, j) = j + Q: y(R, j) = I + Q: P(N + Q, j) = X
y(P, j) = j + Q: y(S, j) = S(I, j):y(T, j) = X: y = X
END IF
530 NEXT I
540 a = F: FOR I = F TO N: a = a + d(I, j): NEXT
IF a > F THEN B = Q
550 NEXT j: IF B > F THEN GOTO 460
560 FOR I = F TO d: y(I, F) = Q: NEXT
570 B = F: FOR I = Q TO N - Q: a = F: FOR j = Q TO N
IF y(Q, I) = y(F, j) THEN a = Q
580 NEXT: IF FIX(a + .1) > F THEN GOTO 600
590 B = Q: y(F, I) = F: y(Q, I) = F: y(S, I) = F: y(T, I) = F: y(d, I) = F
600 NEXT I: IF FIX(B + .1) > F THEN GOTO 570
610 '' PRINT:FOR I=F TO N:PRINT Y(F,I);"->";Y(Q,I);" ";:NEXT :PRINT
620 a = Q: y(d, F) = Q: PRINT : PRINT "CRITICAL PATH": PRINT : PRINT a;
630 FOR I = Q TO N: IF y(F, I) = a THEN B = y(Q, I): GOTO 650
640 NEXT: GOTO 690
650 FOR j = Q TO N: IF y(F, j) = B THEN GOTO 680
660 NEXT: GOTO 690
670 GOTO 690
680 GOSUB 1120: GOTO 630
690 PRINT "->"; B
700 X = F: FOR I = F TO N: X = X + y(S, I): NEXT: IF X = F THEN X = Q
710 X = SQR(X): X = INT((VAL(C$) - y(T, N) + Q) / X + O)
720 PRINT : PRINT "PROBABILTY OF REALIZATION OF COMPLETION DATE IN "; C$;
PRINT " DAYS = "; X; " OR IN "; y(T, N); "DAYS."
730 PRINT : PRINT : INPUT "PRESS ENTER TO CONTINUE.", u$: COLOR 15, 5, 5: CLS
740 FOR I = F TO N: y = F: a = F: IF y(d, I) = I + Q THEN GOTO 810
750 FOR j = F TO N: IF O(I, j) = F THEN GOTO 800
760 IF j + Q = y(d, j) THEN GOTO 780
770 GOTO 800
780 X = P(N + Q, j) - T(I, j): IF y <= F THEN y = X
790 y = (y AND y <= X) + (X AND y > X)
800 NEXT j: y(T, I) = y
810 NEXT I
820 a = F: FOR I = F TO N: IF y(T, I) = F THEN y(L, a) = I: a = a + Q
830 NEXT I
840 B = F: y = F: FOR K = F TO a - Q: I = y(L, K): IF y(T, I) <> F THEN GOTO 890
850 B = Q: FOR j = F TO N: IF O(I, j) = F OR y(T, j) = F THEN GOTO 880
860 X = y(T, j) - T(I, j): IF y <= F THEN y = X
870 y = (y AND y <= X) + (X AND y > X)
880 NEXT j: IF y <> F THEN y(T, I) = y
890 NEXT K: IF B THEN GOTO 840
900 B$ = "": C$ = "1MTWHFS": IF V$ = "N" THEN MID$(C$, L, Q) = "1"
910 y = y(T, N) + R: DD = FIX(y / S + Q): DIM X(y, P)
920 FOR I = F TO DD + R: B$ = B$ + C$: NEXT
930 X = LEN(B$): B$ = MID$(B$, G, X)
940 FOR I = F TO y: X(I, F) = id: X(I, Q) = im: X(I, R) = iy
950 j = LEN(B$): B$ = MID$(B$, R, j)
960 GOSUB 1570: id = id + Q: im = im - (id > DL): iy = iy - (im > ER): id = id + DL * (id > DL):
im = im + ER * (im = EP): GOSUB 1570
970 IF ASC(B$) < d * E THEN GOTO 950
980 NEXT: COLOR 15, 2, 5: PRINT
990 CLS : PRINT " N"; TAB(LN); "PATH"; TAB(LN + M * R); " Ti "; :
IF a$ = "y" OR a$ = "Y" THEN PRINT " DATES";
1000 PRINT TAB(LN + M * E); " (*Ti)"; : IF a$ = "y" OR a$ = "Y" THEN PRINT " DATES";
1010 PRINT : PRINT : CP = F: FOR I = F TO N: a = P(N + Q, I) - Q: PRINT I + Q; TAB(LN); :
IF y(d, I) THEN PRINT y(d, I);
1020 IF y(T, I) = P(N + Q, I) AND y(d, I) = F THEN COLOR 21: PRINT "CP"; : CP = Q: COLOR P * S
1030 B = y(T, I) - Q: PRINT TAB(LN + M * R); a; :
IF a$ = "y" OR a$ = "Y" THEN PRINT " :"; X(a, F); "/"; X(a, Q); "/"; X(a, R);
1040 PRINT TAB(LN + M * E); B; :
IF a$ = "y" OR a$ = "Y" THEN PRINT " :"; X(B, F); "/"; X(B, Q); "/"; X(B, R);
1050 PRINT : NEXT: PRINT :
IF CP THEN
PRINT : PRINT " EXTRA CRITICAL PATHS:"; : COLOR 21: PRINT " CP ": COLOR P * S:
PRINT
END IF
1060 PRINT : PRINT : INPUT " PRESS ENTER TO CONTINUE.", u$:
CLS : PRINT : PRINT " (i,j)"; TAB(LN + M + P); "Tij"; TAB(LN + M * T); "(Tij)";
PRINT TAB(LN + M * V); " cTij"; :
IF a$ = "y" OR a$ = "Y" THEN PRINT " MAX. DELAY DATES @ ELEMENT.";
1070 PRINT : PRINT : FOR I = F TO N: FOR j = F TO N:
IF O(I, j) THEN
a = T(I, j): B = y(T, j) - a - Q: PRINT I; ","; j; TAB(LN + M + R); a; TAB(LN + M * T); "("; :
PRINT P(N + Q, j) - P(N + Q, I) - a; ")"; : PRINT TAB(LN + M * V); B; :
IF a$ = "y" OR a$ = "Y" THEN PRINT " :"; X(B, F); "/"; X(B, Q); "/"; X(B, R)
END IF
1080 NEXT: NEXT: PRINT :
PRINT " (i,j)"; TAB(LN + M + P); "Tij"; TAB(LN + M * T); "(Tij)"; TAB(LN + M * V); " cTij";
IF a$ = "y" OR a$ = "Y" THEN PRINT " MAX. DELAY DATES @ ELEMENT.";
1090 PRINT : PRINT : INPUT "PRESS ENTER TO CONTINUE.", u$:
a = P(N + Q, N) - Q: id = X(a, F): im = X(a, Q): iy = X(a, R): GOSUB 1570: COLOR P * S, S, S:
PRINT : CLS
1100 PRINT "JOB DONE": PRINT : PRINT "COMPLETION DATE":
LOCATE V, Q: COLOR 0, 3: PRINT : PRINT u$; TAB(P * V); iy: COLOR 2: GOSUB 1630:
PRINT : PRINT : INPUT "CONTINUE "; u$
1110 GOTO 1830



1120 '' 4000
1130 PRINT "->"; B; : IF I > N OR j > N THEN RETURN
1140 y(d, a - Q) = a: y(d, B - Q) = B: a = B: B = y(Q, j): y(d, B - Q) = B: RETURN



1150 '' 5000
1160 CLS
1170 PRINT "No. OF NODES ? "; N
1180 LN = R * LEN(N$) + R
1190 INPUT "DIRECT INPUT OR MINIMAL AND MAXIMAL INPUT (D/M) ? ", C$
1200 CLS : COLOR EQ, Q: PRINT "T(i,j) "; : COLOR 15, 1:
PRINT " ie.BRANCH i+1 to j+1 = 10 days.": PRINT :
INPUT "INPUT i ", I: IF I < F OR I > N THEN GOTO 1200
1210 PRINT : INPUT "INPUT j ", j: IF j = I OR j < F OR j > N THEN GOTO 1200
1220 IF C$ = "D" GOTO 1320
1230 PRINT : INPUT "MINIMAL DURATION ? ", a
1240 IF a THEN O(I, j) = 1: ELSE GOTO 1200
1250 PRINT : INPUT "MAXIMAL DURATION ? ", B
1260 PRINT : INPUT "PROBABLE DURATION ? ", C
1270 T(I, j) = (a + T * B + C) / d: S(I, j) = (B - a) * (B - a) / d / d
1280 PRINT : PRINT "T("; I; ","; j; ")="; T(I, j); " S("; I; ","; j; ")="; S(I, j); " O(";
PRINT I; ","; j; ")="; O(I, j)
1290 PRINT : PRINT : COLOR P * S, Q:
PRINT "ARE YOU DONE (Y/N) ? or VIEW MATRIX (V) ? "; : INPUT "", u$
1300 IF u$ = "Y" THEN : CLS : RETURN: ELSE IF u$ = "V" THEN GOSUB 1350
1310 GOTO 1200
1320 PRINT : PRINT "INPUT T("; I; ","; j; ") "; : INPUT "", a
1330 IF a THEN T(I, j) = a: O(I, j) = Q: ELSE GOTO 1200
1340 PRINT : PRINT "T("; I; ","; j; ")="; T(I, j); " O("; I; ","; j; ")="; O(I, j):
GOTO 1290
1350 CLS : PRINT "( i,j)", "Tij", "Sij", "O(ij)": PRINT : FOR I = F TO N:
IF I <> F AND I = 5 * (INT(I / 5)) THEN INPUT "PRESS ENTER TO CONTINUE.", u$
1360 FOR j = F TO N: IF O(I, j) THEN PRINT "("; I; ","; j; ")", T(I, j), S(I, j), O(I, j)
1370 NEXT: FOR K = F TO E: NEXT: NEXT: COLOR P * S: PRINT "(I,J)", "TIJ", "SIJ", "OIJ":
PRINT : PRINT "NOTE: USE DAY VALUES FOR CALENDAR": PRINT :
INPUT "PRESS ENTER TO CONTINUE.", u$: CLS : RETURN



1380 '' 6000
1390 a$ = "Y": M = T: N$ = "12": N = EQ: LN = d
1400 'DIM O(EQ, EQ): DIM T(EQ, EQ): DIM S(EQ, EQ)
1410 O(F, Q) = Q: O(F, R) = Q: O(F, P) = Q: O(Q, R) = Q: O(Q, T) = Q: O(Q, S) = Q: O(R, P) = Q: O(R, S) = Q:
O(R, L) = Q: O(R, V) = Q
1420 O(P, d) = Q: O(P, L) = Q: O(P, E) = Q: O(T, V) = Q: O(S, d) = Q: O(S, L) = Q: O(S, V) = Q: O(d, E) = Q:
O(L, d) = Q: O(L, V) = Q
1430 O(L, W) = Q: O(L, E) = Q: O(V, W) = Q: O(W, EQ) = Q: O(E, W) = Q: O(E, EQ) = Q
1440 T(F, Q) = W: T(F, R) = EP: T(F, P) = W: T(Q, R) = T: T(Q, T) = W: T(Q, S) = d: T(R, P) = L:
T(R, S) = E: T(R, L) = 6: T(R, V) = W
1450 T(P, d) = E: T(P, L) = W: T(P, E) = d: T(T, V) = P: T(S, d) = S: T(S, L) = P: T(S, V) = V: T(d, E) = T:
T(L, d) = V: T(L, V) = T
1460 T(L, W) = S: T(L, E) = EP: T(V, W) = S: T(W, EQ) = EP: T(E, W) = d: T(E, EQ) = EL
1470 GOSUB 1350: RETURN



1480 CLS
1490 FOR I = F TO N: FOR j = F TO N: PRINT TAB(j * P + Q); O(I, j); : NEXT: NEXT
1500 FOR I = F TO N: FOR j = F TO N: PRINT TAB(j * T + Q); T(I, j); : NEXT: NEXT
1510 COLOR 15
1520 RETURN



1530 '' 7000
1540 N = EQ: V$ = "Y": M = P: C$ = "66": a$ = "Y": iy = 1990: im = P: id = S: G = R
1550 '' GOSUB 8000
1560 GOTO 260



1570 '' 8000
1580 IF a$ = "N" OR a$ = "n" THEN RETURN
1590 u$ = ">8><><>><><>": X = im: Z = iy - u * FIX(iy / u + O)
IZ = T * FIX(Z / T + O)
DL = ASC(MID$(u$, X, Q)) / R - (im = R AND Z = IZ)
1600 u$ = "JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY A"
u$ = u$ + "UGUST SEPTEMBEROCTOBER NOVEMBER DECEMBER "
1610 u$ = MID$(u$, (X - Q) * W + Q, W)
1620 RETURN



1630 PRINT CHR$(201); : FOR I = Q TO d: FOR j = Q TO P: PRINT CHR$(205);
NEXT: PRINT CHR$(203); : NEXT: FOR j = Q TO P: PRINT CHR$(205); : NEXT
1640 PRINT CHR$(187): PRINT CHR$(199);
COLOR 4: PRINT "SUN"; : COLOR 2:
PRINT CHR$(199); : COLOR 15: PRINT "MON"; : COLOR 2: PRINT CHR$(199);
1650 COLOR 15: PRINT "TUE"; : COLOR 2: PRINT CHR$(199);
COLOR 15: PRINT "WED"; :
COLOR 2: PRINT CHR$(199);
COLOR 15: PRINT "THU"; : COLOR 2
1660 PRINT CHR$(199);
COLOR 15: PRINT "FRI"; : COLOR 2: PRINT CHR$(199);
COLOR 15 + EQ * (V$ <> "Y"): PRINT "SAT"; : COLOR 2: PRINT CHR$(199)
1670 PRINT CHR$(204); : FOR I = Q TO d: FOR j = Q TO P: PRINT CHR$(205);
NEXT: PRINT CHR$(202); : NEXT: FOR j = Q TO P: PRINT CHR$(205);
NEXT: PRINT CHR$(185)
1680 G = -(X = Q OR X = E) - R * (X = S) - P * (X = V) - T * (X = R OR X = P OR X = EQ) - S * (X = d)
G = G - d * (X = W OR X = ER) - L * (X = T OR X = L)
1690 u$ = "MABCKFGAIDEFNBCDLGABJEFGHCDE"
1700 u$ = MID$(u$, Z + Q, Q)
1710 G = G - R + (Z = IZ AND (X = Q OR X = R)) - (u$ = "A" OR u$ = "N")
G = G - R * (u$ = "B" OR u$ = "H")
G = G - P * (u$ = "C" OR u$ = "I")
1720 G = G - T * (u$ = "D" OR u$ = "J") - S * (u$ = "E" OR u$ = "K")
G = G - d * (u$ = "F" OR u$ = "L")
G = G - L * (u$ = "G" OR u$ = "M") + L * L
1730 G = G - L * INT(G / L + O) + Q
1740 K = Q
1750 FOR I = Q TO d: PRINT CHR$(199); : COLOR 15: FOR j = Q TO L:
a = L * (I - Q) + j: B = F - I * (K = id): H = F - (j - Q) * (K = id)
1760 COLOR 15: IF K = id THEN COLOR 16
1770 IF a >= G AND K <= DL THEN
PRINT TAB((j - Q) * T + P + (K >= E)); STR$(K); : COLOR 15
END IF
1780 K = K - (a >= G): NEXT: COLOR 2: PRINT TAB(29); CHR$(199)
IF K > DL THEN I = I + Q: GOTO 1800
1790 NEXT
1800 LOCATE ER + I, Q: PRINT CHR$(200); : FOR I = Q TO P * W: PRINT CHR$(205); : NEXT:
PRINT CHR$(188)
1810 COLOR 15
1820 RETURN



1830 '' 9000
1840 '' INPUT U$
1850 '' SCREEN 0,0,0
1860 CLS : PRINT "P(I,J)": FOR I = F TO N: PRINT TAB(I * T + S); I + Q;
NEXT: PRINT : FOR I = F TO N + Q: PRINT I + Q; : FOR j = F TO N
PRINT TAB(j * T + S); P(I, j); : NEXT: PRINT : NEXT
1870 INPUT u$
1880 CLS : PRINT "T(I,J)": FOR I = F TO N: PRINT TAB(I * T + S); I + Q;
NEXT: PRINT : FOR I = F TO N: PRINT I + Q; : FOR j = F TO N
PRINT TAB(j * T + S); T(I, j); : NEXT: PRINT : NEXT
1890 INPUT u$
1900 CLS : PRINT "O(I,J)": FOR I = F TO N: PRINT TAB(I * T + S); I + Q;
NEXT: PRINT : FOR I = F TO N: PRINT I + Q; : FOR j = F TO N
PRINT TAB(j * T + S); O(I, j); : NEXT: PRINT : NEXT
1910 INPUT u$
1920 CLS : PRINT "Y(I,J)": FOR I = F TO N: PRINT TAB(I * T + S); I + Q;
NEXT: PRINT : FOR I = F TO L: PRINT I + Q; : FOR j = F TO N
PRINT TAB(j * T + S); y(I, j); : NEXT: PRINT : NEXT
1930 INPUT u$: CHAIN "GAME"



1940 '' 9900
1950 '' COLOR 15,0,0:CLS
1960 '' SAVE"PATH"
1970 '' SCREEN 0,0,0
1980 '' SYSTEM

END


RETURN TO TOP
PREVIOUS MENU
RETURN TO PMC MENU
HOME PAGE
You are visitor no. to this page.
Hosted by www.Geocities.ws

1