В программе используется очень удобное свойство множеств: при включении в множество элемента последний будет содержаться в нём только один раз. Остаётся только посчитать сколько элементов в множестве.
program N77549590;
{$APPTYPE CONSOLE}
const
cmin = 'a';
cmax = 'z';
var
a: array of array of char;
s: set of char;
i, j, n, m, k: byte;
c: char;
begin
randomize;
n := random(10) + 1;
m := random(35) + 1;
setlength(a, n, m);
writeln('Символьная матрица ', n, 'x', m, ':');
for i := 0 to n - 1 do
begin
for j := 0 to m - 1 do
begin
a[i, j] := chr(random(ord(cmax) - ord(cmin) + 1) + ord(cmin));
write(a[i, j]:2)
end;
writeln
end;
s := [ ];
k := 0;
for i := 0 to n - 1 do
for j := 0 to m - 1 do
include(s, a[i, j]); // или s := s + [a[i, j]];
writeln(#13#10'Различные элементы: ');
for c := cmin to cmax do
if c in s then
begin
write(c:2);
inc(k) // или k := k + 1
end;
writeln(#13#10'Всего различных элементов: ', k);
readln;
finalize(a)
end.
P.S. Если у вас Delphi одной из последних версий, то будут проблемы с AnsiChar/WideChar, т. к. char теперь считается UTF-16. Придётся явно преобразовывать Char в AnsiChar и обратно.
