Завдання № 38. Перевірити, чи є натуральне число паліндромом » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

Завдання № 38. Перевірити, чи є натуральне число паліндромом

Завдання № 38. Перевірити, чи є натуральне число паліндромом
Формулювання. Дано натуральне число n. Перевірити, чи представляє собою паліндром його десяткова запис.
Рішення. Завдання є загальним випадком завдання 9. Щоб вирішити її, необхідно розділити число n на дві половини однакової довжини, відкинути серединну цифру в разі непарної довжини n і перевірити рівність однієї з частин реверсної записи іншій частині.
Так як нам заздалегідь невідома десяткова розрядність n, ми можемо порахувати її з допо-могою наступного циклу (докладніше це описувалося в попередній задачі):

a: = n;
digits: = 0;
while a <> 0 do begin
  a: = a div 10;
  inc (digits)
end;

Тепер розглянемо варіанти перевірки числа на паліндром разом з розбором на прикладі.
Нехай дано число непарної довжини, наприклад, 79597. Ми можемо відокремити його праву поло-вину 97, провівши ряд послідовних поділів з взяттям залишку в циклі з digits div 2 повто-реній. При цьому необхідно відразу сформувати її реверс в змінну right (ми робили це в задачі 31):
right: = 0;
for i: = 1 to digits div 2 do begin
  right: = right * 10;
  right: = right + n mod 10;
  n: = n div 10
end;

Так як число непарне, потрібно відкинути його центральну цифру 5, після чого у змінній n (рівній 79) міститиметься ліва половина числа, а в змінній right (також рівній 79) - його перевернута права половина. Вони рівні, отже, відповідь позитивна.
Той же порядок дій застосовується і для чисел парної довжини, однак тепер нам не потрібно нічого відкидати після накопичення реверсної лівій частині числа в змінну right, оскільки в числах парної довжини немає серединної цифри. Наприклад, дано число 1551: переворачі-ваем праву половину числа 51 (отримаємо 15) і порівнюємо її з лівою половиною: 15 = 15, відповідь позитивна.
Ці припущення говорять про те, що необхідна перевірка довжини числа n на непарність і, со-відповідально, відкидання серединної цифри в разі непарності:
if odd (digits) then n: = n div 10;

Код:


  1. program CheckPalindrome;
  2. var
  3. n, a, right: longint;
  4. digits, i: byte;
  5. begin
  6. readln(n);
  7. a := n;
  8. digits := 0;
  9. while a <> 0 do begin
  10. a := a div 10;
  11. inc(digits)
  12. end;
  13. right := 0;
  14. for i := 1 to digits div 2 do begin
  15. right := right * 10;
  16.   right := right + n mod 10;
  17.   n := n div 10
  18. end;
  19. if odd(digits) then n := n div 10;
  20. writeln(n = right)
  21. end.

0038.-CheckPalindrome.rar [755 b] (cкачувань: 8)

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 39. Перевірити, чи є натурал... Попередня сторінка » Завдання № 37. Перевірити, чи є натурал...