Анализ условия позволяет сделать вывод о том, что нам понадобится не только процедура получения перевернутого числа, но подпрограмма, проверяющая является ли число палиндромом. Алгоритм решения задачи может быть следующим:
1) возьмем начальное число;
2) количество шагов положим равное нулю;
3) если это число палиндром - перейти к шагу 7;
4) получить перевернутое число и прибавить его к первоначальному;
5) количество шагов увеличить на единицу;
6) перейти к шагу 3;
7) вывести получившееся число и количество шагов.

    Приведем текст программы:

Program Problem43_3;
Var
  X,Kol:Word;
Function Pal (f:Word):Boolean;
{Функция определяет, является ли число палиндромом.}
{Входные параметры - число типа Word.}
{Выходной параметр - True (число палиндром),
{False - в противном случае.}
Var
  S,S1:String[10];
  i:Byte;
Begin
  Str(f,S);{Переведем число в строку.}
  {Получение числа "наоборот".}
  S1:='';
  For i:=Length(S) DownTo 1 Do
     S1:=S1+S[i];
  If S=S1 Then Pal:=True {Это палиндром.}
  Else Pal:=False; {Это не палиндром.}
End;
Function Naoborot (f:Word):Word;
{Функция возвращает "перевернутое" число.}
{Входные параметры - число типа Word.}
{Выходной параметр - число типа Word.}
Var
  S,S1:String[10];
  i:Byte;
  n:Integer;
  g:Word;
Begin
  Str(f,S);{Переведем число в строку.}
  {Получение числа "наоборот".}
  S1:='';
  For i:=Length(S) DownTo 1 Do
     S1:=S1+S[i];
  {Переведем полученную строку в число.}
  Val(S1,g,n);
  Naoborot:=g;
End;
  {Основной блок программы.}
Begin
  WriteLn('Задайте произвольное натуральное число X');
  ReadLn(X);
  Kol:=0; {Количество шагов.}
  While Not Pal(X) Do
    Begin
       {Переворачиваем и складываем с исходным числом.}
       X:=X+Naoborot(X);
       Kol:=Kol+1; {Количество шагов увеличиваем на 1}
    End;
  WriteLn('Получилось число: ',X);
  WriteLn('Количество шагов: ',Kol);
End.
Текст этой программы можно взять здесь.

    Внимательный анализ текста программы позволяет увидеть повторяющийся код в приведенных функциях:


  .    .    .    .
  S1:='';
  For i:=Length(S) DownTo 1 Do
     S1:=S1+S[i];
  .    .    .    .
Причем функция Naoborot может использоваться как вспомогательная для функции Pal. Перепишем текст программы так, чтобы избежать дублирования кода:

Program Problem43_4;
Var
  X,Kol:Word;
{Предварительное описание подпрограммы.}
Function Naoborot (f:Word):Word;Forward;
Function Pal (f:Word):Boolean;
{Функция определяет, является ли число палиндромом.}
{Входные параметры - число типа Word.}
{Выходной параметр - True (число палиндром),}
{False - в противном случае.}
Begin
  If Naoborot(f)=f Then Pal:=True {Это палиндром.}
  Else Pal:=False; {Это не палиндром.}
End;
Function Naoborot (f:Word):Word;
{Функция возвращает "перевернутое" число.}
{Входные параметры - число типа Word.}
{Выходной параметр - число типа Word.}
Var
  S,S1:String[10];
  i:Byte;
  n:Integer;
  g:Word;
Begin
  Str(f,S);{Переведем число в строку.}
  {Получение числа "наоборот".}
  S1:='';
  For i:=Length(S) DownTo 1 Do
     S1:=S1+S[i];
  {Переведем полученную строку в число.}
  Val(S1,g,n);
  Naoborot:=g;
End;
  {Основной блок программы.}
Begin
  WriteLn('Задайте произвольное натуральное число X');
  ReadLn(X);
  Kol:=0; {Количество шагов.}
  While Not Pal(X) Do
    Begin
       {Переворачиваем и складываем с исходным числом.}
       X:=X+Naoborot(X);
       Kol:=Kol+1; {Количество шагов увеличиваем на 1}
    End;
  WriteLn('Получилось число: ',X);
  WriteLn('Количество шагов: ',Kol);
End.
Текст этой программы можно взять здесь.

    Обратите внимание на то, что здесь необходимо предварительное описание функции Naoborot. Дело в том, что эта функция используется в теле функции Pal, которая расположена раньше функции Naoborot. Поэтому необходимо "сообщить" функции Pal характеристики функции Naoborot. Если вы хотите убрать предварительное описание функции Naoborot, то нужно поменять их местами: сначала поместить текст функции Naoborot, а затем текст функции Pal. Для получения более полной информации советуем обратиться к 42 шагу.