uses crt;
const nmax=20;
var c:array[1..nmax,1..nmax] of integer;
b:array[1..nmax*nmax] of integer;
m,p,i,j,k:byte;
n,x:integer;
begin
clrscr;
randomize;
repeat
write('Количество строк до ',nmax,' m=');
readln(m);
until m in [1..nmax];
repeat
write('Количество столбцов до ',nmax,' p=');
readln(p);
until p in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to m do
begin
for j:=1 to p do
begin
c[i,j]:=random(20);
write(c[i,j]:4);
end;
writeln;
end;
{развернем матрицу в линейный массив}
n:=0;
for i:=1 to m do
for j:=1 to p do
begin
n:=n+1;
b[n]:=c[i,j];
end;
{отсортируем по возрастанию, можно по убыванию}
for i:=1 to n-1 do
for j:=i+1 to n do
if b[i]>b[j] then
begin
x:=b[i];
b[i]:=b[j];
b[j]:=x;
end;
{ищем разные повторяющиеся}
k:=0;
for i:=2 to n do
if(b[i]=b[i-1])and(b[i]<>b[i+1])then k:=k+1;
write('Разных повторяющихся элементов=',k);
readln
end.