1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| CONST Nmax = 60; o = 5;
TYPE LstE = ARRAY[0..Nmax] OF LongInt;
VAR Lu, Lv, Lw: LstE;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Liste W
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
PROCEDURE InitListeW(L_u, L_v: LstE; VAR L_w: LstE);
CONST O2 = 2 * o;
VAR h, k: Byte; Lim: LongInt; Test: Bool;
BEGIN
L_w:= L_u; h:= 0; Lim:= L_u[0];
FOR k:= 0 TO (Nmax) DO
BEGIN
h:= L_v[k];
CASE h OF 1: E(0011); 101: E(0009);
2: E(0014); 202: E(0012)
ELSE E(0015) END;
Test:= ((L_v[k]=1) OR (L_v[k]=202));
IF ((L_u[k]>Lim) AND Test) THEN E(0210);
IF (k=Nmax) AND ((L_u[k]>L_u[k - 1]) AND (L_v[k]>Lim)) THEN
E(0010);
We(12 + O2, k + 5, Lw[k], o); IF (L_v[k]=202) THEN Lim:= L_u[k]
END
END;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Recherche des extremums
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
FUNCTION Tmax11(k: Byte; L_u: LstE): Bool;
BEGIN
Result:= ((L_u[k]>L_u[k - 1]) AND (L_u[k]>L_u[k + 1]))
END;
FUNCTION Tmax12(k: Byte; L_u: LstE): Bool;
VAR Test12: Bool;
BEGIN
Test12:= ((L_u[k]>L_u[k - 1]) AND (L_u[k]>L_u[k + 2]));
Result:= ((L_u[k]=L_u[k + 1]) AND Test12)
END;
FUNCTION Tmax21(k: Byte; L_u: LstE): Bool;
VAR Test21: Bool;
BEGIN
Test21:= ((L_u[k]>L_u[k - 2]) AND (L_u[k]>L_u[k + 1]));
Result:= ((L_u[k]=L_u[k - 1]) AND Test21)
END;
FUNCTION Tmin11(k: Byte; L_u: LstE): Bool;
BEGIN
Result:= ((L_u[k]<L_u[k - 1]) AND (L_u[k]<L_u[k + 1]))
END;
FUNCTION Tmin12(k: Byte; L_u: LstE): Bool;
VAR Test12: Bool;
BEGIN
Test12:= ((L_u[k]<L_u[k - 1]) AND (L_u[k]<L_u[k + 2]));
Result:= ((L_u[k]=L_u[k + 1]) AND Test12)
END;
FUNCTION Tmin21(k: Byte; L_u: LstE): Bool;
VAR Test21: Bool;
BEGIN
Test21:= ((L_u[k]<L_u[k - 2]) AND (L_u[k]<L_u[k + 1]));
Result:= ((L_u[k]=L_u[k - 1]) AND Test21)
END;
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Liste V
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
PROCEDURE Aff_UV(VAR L_v: LstE);
VAR k: Byte;
BEGIN
E(0013); Wt(5, 3, 'Lu Lv Lw');
FOR k:= 0 TO Nmax DO
BEGIN
CASE L_v[k] OF 001: E(0011);
002: E(0014);
101: E(0009);
202: E(0012)
ELSE E(0015) END;
We(2, k + 5, Lu[k], o); Write(' ', Lv[k]:o)
END
END;
PROCEDURE InitListeV(L_u: LstE; VAR L_v: LstE);
VAR k: Byte; Test1, Test2, Tmax, TmaxIJ, Tmin, TminIJ: Bool;
BEGIN
L_v[0]:= 0;
FOR k:= 1 TO (Nmax - 1) DO
BEGIN
CASE k OF 1: BEGIN
TminIJ:= Tmin12(k, Lu);
TmaxIJ:= Tmax12(k, Lu);
END;
(Nmax - 1): BEGIN
TminIJ:= Tmin21(k, Lu);
TmaxIJ:= Tmax21(k, Lu);
END
ELSE BEGIN
TminIJ:= (Tmin12(k, Lu) OR Tmin21(k, Lu));
TmaxIJ:= (Tmax12(k, Lu) OR Tmax21(k, Lu))
END END;
Tmin:= Tmin11(k, Lu) OR TminIJ;
Tmax:= Tmax11(k, Lu) OR TmaxIJ;
IF Tmin THEN L_v[k]:= 101
ELSE IF Tmax THEN L_v[k]:= 202
ELSE L_v[k]:= L_v[k - 1] MOD 100
END;
Test2:= (L_u[k]<Lu[k - 1]) AND (L_u[k - 1]<Lu[k - 2]);
Test1:= (L_u[k]>Lu[k - 1]) AND (L_u[k - 1]>Lu[k - 2]);
IF Test1 THEN L_v[Nmax]:= 1
ELSE IF Test2 THEN L_v[Nmax]:= 2
ELSE L_v[Nmax]:= 0
END;
// ... / ...
(*HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
Programme principal
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH*)
BEGIN
REPEAT
InitListeU(Lu); InitListeV(Lu, Lv);
Aff_UV(Lv); InitListeW(Lu, Lv, Lw); A_
UNTIL (1<0)
END. |