Прежде всего определим, что нам дано и что нужно найти. Даны нам два целых числа N и M. В результате получим набор чисел. Переменная i - счетчик цикла, ведь нам нужно анализировать все числа на промежутке от N до M. Поэтому можно воспользоваться циклом For. Переменную j будем использовать для нахождения цифр числа. Переменная sum используется на нахождения суммы цифр числа i.

    Рассмотрим, как работает программа. Предположим, что таких чисел на промежутке нет. Поэтому переменной Flag присваиваем значение False. Если будет найдено хотя бы одно такое число, то переменная Flag получит значение True. Раз могут быть как положительные, так и отрицательные числа, то мы работаем с модулем числа i и пропускаем число 0.

    В цикле While получаем последнюю цифру числа (используя операцию mod) и "отбрасываем" ее, получая целое количество десятков, находящихся в этом числе (при помощи операции div). Этот цикл заканчивается, когда значение переменной j (число десятков в числе после суммирования и "отбрасывания" единиц) станет равным 0.

    После нахождения суммы цифр числа i нужно определить, делится ли нацело это число на сумму своих цифр. Если это так, то число выводится на экран и флаг нахождения хотя бы одного числа (значение переменной Flag) меняется на противоположное. Если бы мы не использовали эту переменную, что при отсутствии таких чисел программа не выдала нам никакого результата, что, естественно, является ошибкой. Приведем текст программы:

Program Problem3; 
Var
  m,n,i,j:Integer;
  sum: Integer;
  Flag:Boolean;
Begin
  WriteLn('Задайте N и M');
  ReadLn(N,M);
  WriteLn('Числа, которые делятся на сумму своих цифр');
  Flag:=False; {Предположим, таких чисел нет}
  For i:=N To M Do {Цикл по числам из промежутка}
   If i<>0 Then {Нуль пропускаем}
     Begin
         {Будем работать только с положительными числами}
         If i<0 Then j:=-i Else j:=i;
         sum:=0; {Начальное значение суммы}
         {Будем суммировать остаток от деления числа на 10}
         {и отбрасывать последнюю цифру}
         While j<>0 Do
          Begin
            sum:=sum+(j mod 10); {Прибавили последнюю цифру числа}
            j:=j div 10; {"Удалили" из числа эту цифру}
          End;
         {Проверим делимость числа}
         If abs(i) mod sum = 0 Then
             Begin
              Write(i,' '); {Напечатали это число}
              Flag:=True; {Есть такие числа}
             End;
        {Переходим к проверке следующего числа}
     End;
  WriteLn;
  If Flag=False Then WriteLn('Таких чисел нет');
End.
Текст этой программы можно взять здесь.