Анализ условия позволяет сделать вывод о том, что нам понадобится не только процедура
получения перевернутого числа, но подпрограмма, проверяющая является ли число
палиндромом. Алгоритм решения задачи может быть следующим:
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 шагу.