CONST Maxk = 5; TYPE Typ = Array[1..Maxk] OF INTEGER; VAR K : INTEGER; I,J, M : INTEGER; L1, L2 : INTEGER; B : Array(. 1..Maxk, 0..10, 1..Maxk.) OF INTEGER; Us : Array(.1..10.) OF INTEGER; V : Typ; Fs : TEXT; PROCEDURE Extend ( T : INTEGER); VAR Q,R : INTEGER; P : INTEGER; BEGIN Inc(Us(.T.)); { Produit } P := 1; FOR R:=1 TO K DO IF R <> T THEN P := P * ( Us(.R.) + 1); B(.T, Us(.T.), T .) := Us(.T.) * P; { Base } FOR Q:=1 TO K DO IF Q <> T THEN BEGIN P := 1; FOR R:=Q+1 TO K DO IF R <> T THEN P := P * ( Us(.R.) + 1 ); B(.T,Us(.T.), Q.) := P; { Facteur Multiplicatif } END; END; FUNCTION Adresse ( V : Typ ) : INTEGER; VAR Max, I, S, T : INTEGER; BEGIN Max := B(. 1, V(.1.), 1.) ; T := 1; FOR I := 2 TO K DO IF B(.I, V(.I.), I.) > Max THEN BEGIN T:=I; Max := B(.I, V(.I.), I.) END; S := 0; FOR I:=1 TO K DO IF I <> T THEN S := S + B(. T, V(.T.), I.) * V(.I.); Adresse := B(. T, V(.T.), T.) + S; END; BEGIN ASSIGN(Fs, 'Fsort.Pas'); REWRITE(Fs); WRITE('Dimension:');READ(K); FOR I:=1 TO 10 DO Us(.I.) := 0; { Initialiser Bi(O) } FOR I:=1 TO K DO FOR J :=1 TO K DO IF I = J THEN B(. I, 0, J.) := 0 ELSE B(.I,0, J.) := 1; { Exemple Pour K = 2} Extend(1); Extend(1); Extend(2); Extend(2); Extend(1); Extend(2); Extend(1); Extend(1); Extend(2); {exemple Pour K = 3 Extend(1); Extend(2); Extend(3); Extend(1); Extend(2); Extend(3); Extend(1); Extend(2); Extend(3); } FOR I := 1 TO K DO BEGIN WRITE(Fs,' B',I,':'); FOR L2 := 1 TO K DO BEGIN; WRITELN(Fs); WRITE ( Fs, L2, ' : '); FOR L1 := 0 TO Us(.I.) DO WRITE( Fs, B(.I,L1, L2.), ' '); END; WRITELN(Fs); END; Case K OF 3 : FOR I:=0 TO Us[1] DO FOR J:=0 TO Us[2] DO FOR M:= 0 TO Us[3] DO BEGIN V(.1.) := I; V(.2.) := J; V(.3.) := M; WRITELN(Fs, 'Adresse(',I, ',',J,',',M ,')=', Adresse(V) ); END; 2 : FOR I:=0 TO Us[1] DO FOR J:=0 TO Us[2] DO BEGIN V(.1.) := I; V(.2.) := J; WRITELN(Fs, 'Adresse(',I, ',',J,')=', Adresse(V) ); END; END; CLOSE(Fs); END. Exemple 1 : k=2 ; E= 1, 1, 2, 2, 1, 2, 1, 1, 2 B1: 1 : 0 1 2 9 16 20 2 : 1 1 1 1 1 1 B2: 1 : 1 1 1 1 1 2 : 0 3 6 12 24 Adresse(0,0)=0 Adresse(0,1)=3 Adresse(0,2)=6 Adresse(0,3)=12 Adresse(0,4)=24 Adresse(1,0)=1 Adresse(1,1)=4 Adresse(1,2)=7 Adresse(1,3)=13 Adresse(1,4)=25 Adresse(2,0)=2 Adresse(2,1)=5 Adresse(2,2)=8 Adresse(2,3)=14 Adresse(2,4)=26 Adresse(3,0)=9 Adresse(3,1)=10 Adresse(3,2)=11 Adresse(3,3)=15 Adresse(3,4)=27 Adresse(4,0)=16 Adresse(4,1)=17 Adresse(4,2)=18 Adresse(4,3)=19 Adresse(4,4)=28 Adresse(5,0)=20 Adresse(5,1)=21 Adresse(5,2)=22 Adresse(5,3)=23 Adresse(5,4)=2 Exemple 2 : k=3; E=1, 2, 3, 1, 2, 3, 1, 2, 3 B1: 1 : 0 1 8 27 2 : 1 1 2 3 3 : 1 1 1 1 B2: 1 : 1 1 2 3 2 : 0 2 12 36 3 : 1 1 1 1 B3: 1 : 1 2 3 4 2 : 1 1 1 1 3 : 0 4 18 48 Adresse(0,0,0)=0 Adresse(0,0,1)=4 Adresse(0,0,2)=18 Adresse(0,0,3)=48 Adresse(0,1,0)=2 Adresse(0,1,1)=5 Adresse(0,1,2)=19 Adresse(0,1,3)=49 Adresse(0,2,0)=12 Adresse(0,2,1)=13 Adresse(0,2,2)=20 Adresse(0,2,3)=50 Adresse(0,3,0)=36 Adresse(0,3,1)=37 Adresse(0,3,2)=38 Adresse(0,3,3)=51 Adresse(1,0,0)=1 Adresse(1,0,1)=6 Adresse(1,0,2)=21 Adresse(1,0,3)=52 Adresse(1,1,0)=3 Adresse(1,1,1)=7 Adresse(1,1,2)=22 Adresse(1,1,3)=53 Adresse(1,2,0)=14 Adresse(1,2,1)=15 Adresse(1,2,2)=23 Adresse(1,2,3)=54 Adresse(1,3,0)=39 Adresse(1,3,1)=40 Adresse(1,3,2)=41 Adresse(1,3,3)=55 Adresse(2,0,0)=8 Adresse(2,0,1)=9 Adresse(2,0,2)=24 Adresse(2,0,3)=56 Adresse(2,1,0)=10 Adresse(2,1,1)=11 Adresse(2,1,2)=25 Adresse(2,1,3)=57 Adresse(2,2,0)=16 Adresse(2,2,1)=17 Adresse(2,2,2)=26 Adresse(2,2,3)=58 Adresse(2,3,0)=42 Adresse(2,3,1)=43 Adresse(2,3,2)=44 Adresse(2,3,3)=59 Adresse(3,0,0)=27 Adresse(3,0,1)=28 Adresse(3,0,2)=29 Adresse(3,0,3)=60 Adresse(3,1,0)=30 Adresse(3,1,1)=31 Adresse(3,1,2)=32 Adresse(3,1,3)=61 Adresse(3,2,0)=33 Adresse(3,2,1)=34 Adresse(3,2,2)=35 Adresse(3,2,3)=62 Adresse(3,3,0)=45 Adresse(3,3,1)=46 Adresse(3,3,2)=47 Adresse(3,3,3)=63