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.