Afin d'auditer son système informatique une société décide d'évaluer les mots de passe de ses employés. Pour ce faire on doit remplir une matrice qui contient les mots de passe cryptés. Un mot de passe est composé de 8 caractères. Le procédé d'évaluation passe par les étapes suivantes :

  1. Remplir une matrice M. On distribue les caractères du mot de passe dans chaque ligne de la matrice.
  2. Pour décrypter les mots de passe on procède à un tri de la matrice en ordre croissant par colonne.


Exemple :

Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
m	3	A	O	s	M	*	$
$	2	u	L	o	r	1	a
1	o	B	l	y	s	a	]
[	*	B	n	i	7	3	2

Après le tri des colonnes, la matrice devient :

Code X : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$	*	A	L	I	7	*	$
1	2	B	O	o	M	1	2
[	3	B	l	s	s	3	]
m	o	u	n	y	r	a	a

J'ai proposé cette solution mais ça ne va pas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
program tp;
uses wincrt;
type 
 
	mat=array[1..10,1..10]of char;
tab=array[1..100] of char;
var
t:tab;
 
	m:mat;
	n,c,k:integer;
 
 
	var
		i,j:integer;
    begin
		writeln('n=');
		readln(n);
repeat    
		writeln('c=');
		readln(c);
until(c<=8);    
		for i:=1 to n do
			begin
			for j:=1 to c do
begin
				writeln('m[',i,j,']=');
		readln(m[i,j]);
end;
end;
end;
procedure tri(var t:tab;k:integer);
var i:integer;
temp:char;
    permuter:boolean;
begin
     repeat
           permuter:=false;
           for i:=1 to n-1 do
           begin
                if ord(t[i])>ord(t[i+1]) then
                begin
                     temp:=t[i];
                     t[i]:=t[i+1];
                     t[i+1]:=temp;
permuter:=true;
                end;
           end;
 
     until (permuter=false);
end;
procedure affiche_t(t:tab;k:integer);
	var
		i:integer;
    begin
		for i:=1 to k do
begin
 
				              writeln(t[i]);
 
end;
            end;
 procedure regrouper (var m:mat; var n,c:integer;t:tab;k:integer);
		var
			l,i,j:integer;
		begin
			l:=0;
 
				for i:=1 to n do
		               begin
 
			             for j:=1 to c do
begin
l:=l+1;
								m[j,i]:=t[l];
 
                        end;
                end;
end;    
procedure eclater(m:mat;n,c:integer;var t:tab;var k:integer);
var
i,j:integer;
	begin
 
 
				for i:=1 to n do
begin
 
			k:=0;
             					for j:=1 to c do
                  begin
                                    k:=k+1;
								 t[k]:=m[j,i];
 
 
writeln(t[k]);
end;
tri(t,k);
writeln('tableau n',i,'apres tri');
   affiche_t(t,k);    
regrouper(m,n,c,t,k);
 
 
            end;
 
 
      end;
 
 
 
 
 
 
procedure affiche_m(m:mat;n,c:integer);
	var
		i,j:integer;
    begin
		for i:=1 to n do
begin
			for j:=1 to c do
				              write(M[i,j]);
				              writeln;
end;
            end;
 
 
 
 
begin
 
	remplir(m,n,c);
	affiche_m(m,n,c);
	eclater(m,n,c,t,k);
 
	affiche_m(m,n,c);
 
 
end.