Перевірити чи є задане число «паліндромом».

 Розв’язання: 
Спосіб, запропонований нижче підходить і до розв’язку задачі, сформулюваної у одному з попередніх розділів, а саме: перевірити чи є задане слово «паліндромом». Саме у такому формулюванні ми і розв’яжемо цю задачу. Для розв’язання задачі у першому формулюванні достатньо модифікувати описаний нижче алгоритм, змінивши в ньому типу величини, що вводиться з клавіатури з літерного на числовий, а потім добавити блок переводу числової величини у літерну. Цю модифікацію радимо вам здійснити самостійно, після знайомства з запропонованим способом.
    Власне кажучи, перейдемо до опису алгоритму розв’язку. Ми будемо порівнювати першу літеру (а точніше, символ) слова з останньою, потім другу з передостанньою і т.д. Причому дійшовши до середини, ми на цьому зупинимось. Якщо до середини всі порівнювані літери однакові, то слово – «поліндромом», інакше – «не поліндромом». Вже одним цим ми зменшили кількість перевірок вдвічі, крім того, ми можемо з впевненістю сказати, що наш спосіб розв’язання більш універсальний, ніж довільний з числових способів. Це пов’язано з тим, що кількість цифр у довільному числовому типі у мові Паскаль є обмеженою, тому дати відповідь на запитання чи є ціле число виду 53432157498051233215089475123435 паліндромом з застосуванням числових методів дуже важко, в той же час дати відповідь на запитання сформульоване так: чи є слово 53432157498051233215089475123435 паліндромом з використанням описаного методу не становить абсолютно ніяких труднощів, можете переконатись у цьому при тестуванні приведеної нижче програмної реалізації розв’язання поставленої задачі, ввівши дане число як слово для перевірки. Крім того рекомендуємо доповнити дану програму перевірки одного слова фрагментами для вилучення можливих початкових та кінцевих пропусків, це вам знадобиться при розв’язуванні задач, запропонованих для самостійного розв’язання.
program polindrom_string; var st   : string;     i, k : integer;     Ok   : boolean; begin   write(‘ Введiть слово: ’);
readln(st);   k := length(st); { щоб у циклі кожен раз не виконувати обчислення }   Ok := true;      {   вважаємо, що слово - паліндром }   i :=1;   while (i <= (k div 2)) and (Ok = true) do { поки не середина слова }   begin       { і припущення вірне }     if st[i] <> st [k-i+1] then Ok := false;  
{ якщо ж відповідні символи не однакові, то припущення хибне }     inc(i); { збільшили номер порівнюваних літер }   end;   if Ok = true then
writeln(‘ Введене слово - палiндром.’)   else
writeln (‘ Введене слово - не палiндром.’);   readln end.
Протестували запропоноване вище число? Якщо ні, то протестуйте, а ми відмітимо той важливий факт, що спосіб зведення розв’язку числових задач до розв’язання з застосуванням операцій з літерними величинами є досить поширеним і часто значно спрощує алгоритм розв’язку. 

Немає коментарів:

Дописати коментар