Определение различных цифр, входящих в число

Задача: 

Какие различные цифры входят в целое число.

Описание переменных: 

n – анализируемое число;
digits – массив различных цифр, из которых состоит число n;
q_digits – количество цифр в массиве;
digit – извлеченная из числа цифра;
flag – проверка наличия цифры в массиве (если цифра в массиве уже есть, то она не будет в него добавлена.

Алгоритм решения задачи: 
  1. Избавляемся от знака числа с помощью функции abs.
  2. Обнуляем количество цифр в массиве (изначально массив пуст).
  3. После извлечения очередной цифры числа с конца (n mod 10) предполагаем, что ее еще нет в массиве (flag:= false).
  4. Перебираются элементы массива цифр. Если текущая извлеченная цифра уже есть в нем, то меняем значение флага. Для первой извлеченной цифры данный цикл не работает, что правильно.
  5. Если флаг остался в значении false, то увеличиваем количество цифр в массиве на единицу и записываем очередную цифру в массив.
  6. Избавляемся от последней цифры числа (n div 10).
  7. Цифры в массив записаны в обратном порядке. Для их вывода на экран в порядке следования в числе следует использовать вариант цикла for с downto.
Программа на языке Паскаль: 

var
    n: longint;
    digits: array[1..10] of byte;
    q_digits: byte;
    digit: byte;
    i: byte;
    flag: boolean;
begin
    write('Input number: ');
    readln(n);
    if n < 0 then
        n:= abs(n);
    q_digits:= 0;
    repeat
        digit:= n mod 10;
        flag:= false;
        for i:=1 to q_digits do
            if digit = digits[i] then begin
                flag:= true;
                break
            end;
        if flag = false then begin
            q_digits:= q_digits + 1;
            digits[q_digits]:= digit;
        end;
        n:= n div 10
    until n = 0;
    for i:=q_digits downto 1 do
        write(digits[i]:3);
readln
end.

Комментарии

Зачем так трудно?

Зачем такие коды? я один не понимаю?
можно же проще:
1)

var s:string;
i,l:integer;
begin
readln(s);
if s[1]='-' then delete(s,1,1);
l:=length(s);
for i:=1 to l do
write(s[i],' ');
end.

2)
var a,i:integer;
b:array[0..100] of integer;
begin
readln(a);
a:=abs(a);
while a<>0 do
begin
b[i]:=a mod 10;
a:=a div 10;
i:=i+1;
end;
for a:=i-1 downto 0 do
write(b[a],' ');
end.

Ваши программы не определяют

Ваши программы не определяют различные цифры входящие в число. Они просто раскладывают число на цифры.
Если, например, дано 55404, то ваша программа выведет: 5, 5, 4, 0, 4. А надо вывести только 5, 4, 0.

так определяет

var
  s:string;
  i,j:byte;
 
begin
  readln(s);    //ввод строки
 
   //цикл земены повторяющихся цифр пробелами
  for i:=1 to length(s) - 1 do 
    begin
      for j:= i + 1 to length(s) - 1 do
         if s[i] = s[j] then s[j]:= ' ';  
         //если s[i] символ включен во множество [0..9], то вывод на экран
      if (s[i] in ['0'..'9']) then write(s[i]);
    end; 
end.

вывод(Writeln)

а как потом вывести все это не в виде обычных чисел в строчку, а с подписью и в столбик?

Не выполнено условие задачи.

То ли ночь на дворе и я чего-то не понял, или здесь не совсем правильно решена задача по условию. Надо вывести ТОЛЬКО РАЗЛИЧНЫЕ цифры. Те, что повторяются выводить не надо. Я для этого отсортировал массив и сравнивал каждый элемент массива со следующим, если они не равны, то вывести на экран.
вот мое решение:

program zadacha1;
TYPE
        mas=ARRAY[1..10] of byte;
var
        n:longint;
        a:mas;
        i,j,m,buf:byte;
        ind: boolean;
BEGIN
    write ('Введите число >> ');
    readLN(n);
 
    if n<0 then n:=abs(n);
 
Begin
i:=1;
 while n>0 DO
 begin                           //заполняем массив
     m:= n mod 10;
     n:= n div 10;
     a[i]:=m;
     i:=i+1;                    // считаем колличество элеменов в массиве
 end;
End;
 
REPEAT                       //сортируем массив
ind:=true;
for j:=1 to i-2 DO
if a[j]>a[j+1] then
        begin
            buf:=a[j];
            a[j]:=a[j+1];
            a[j+1]:=buf;
            ind:=false
        end;
UNTIL ind;
 
for j:=1 to i-1 DO               //выводим на экран числа, которые не повторяются
  if a[j]<>a[j+1] then write(a[j],' ');
READLN
END.

Мне кажется, что команда

Мне кажется, что команда break лишняя

Нет. проверила и все

Нет. проверила и все правильно. Ничего лишнего)*