uses crt;
var n:longint;
k,p:byte;
m:set of byte;
begin
clrscr;
write('n=');
readln(n);
m:=[];p:=0;
while n>0 do
begin
k:=n mod 10;
if not (k in m)then
begin
include(m,k);
p:=p+1;
end;
n:=n div 10;
end;
write('В числе разных цифр=',p);
readln
end.
Следующий вариант
uses crt;
var s:string;
m:set of char;
k,i:byte;
begin
clrscr;
repeat
k:=0;
writeln('Введите натуральное число:');
readln(s);
for i:=1 to length(s) do
if not(s[i] in ['0'..'9']) then k:=1;
if k=1 then writeln('Это не натуральное число, повторите ввод');
until k=0;
m:=[];k:=0;
for i:=1 to length(s) do
if not(s[i] in m) then
begin
k:=k+1;
m:=m+[s[i]];
end;
write('Количество различных симолов в строке равно ',k);
readln
end.