program sujet_9h30;
uses WinCrt;
type tab = array [1..20] of integer;
procedure remplir(var t : tab ; var n : integer);
var v : longint;
e, i : integer;
begin repeat
Write('Donner le nombre d''éléments [5..20] : ');
Readln(n);
until (n >= 5) and (n <= 20);
for i:=1 to n do begin
repeat
Write('T[',i,']= ');
Readln(t[i]);
until (t[i] > 0);
end;
end;
function derangement(t : tab ; n : integer):boolean;
var i, j, p : integer;
test : boolean;
begin
test := true;
i := 1;
while (test=true) and (i <= n) do begin
j := 1;
p := 0;
while (p = 0) and (j <= n) do begin
if (t[j] = i) then p := j else j := j + 1;
end;
test := (p <> 0) and (p <> i);
i := i + 1;
end;
derangement := test;
end;
var t : tab;
n : integer;
begin
Remplir(t, n);
if derangement(t, n) then
Writeln('t est un dérangement') else
Writeln('t n''est pas un dérangement');
end.