Дана строка, выяснить является ли строка палиндромом - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Дана строка, выяснить является ли строка полиндромом. Код необходимо сделать с помощью стэка. Заранее спасибо за помощь)

Решение задачи: «Дана строка, выяснить является ли строка палиндромом»

textual
Листинг программы
uses crt;
type pstack=^stack;         {стек}
     stack=record
       nomber:char;
       next: pstack;
     end;
var ptop: pstack;   {вершина стека}
    s:string;
    i,n,k: integer;
    f:boolean;
procedure push (chto: char); {добавление в конце стека}
var p: pstack;
begin
     new(p);
     p^.nomber:=chto;
     p^.next:=ptop;
     ptop:=p;
end;
function pop : char; {удаление из вершины стека}
var p: pstack;
begin
     p:=ptop;
     pop:=p^.nomber;
     ptop:=p^.next;
     dispose(p);
end;
 
begin
clrscr;
ptop:=nil;
writeln('Введите строку');
readln(s);
n:=length(s);
k:=length(s) div 2;
i:=1;
while i<=k do  {ввод первой половины символов в стек}
 begin
  push(s[i]);
  i:=i+1;
 end;
f:=true; {пусть палиндром}
for i:=1 to k do {смотрим вторую половину строки}
if pop<>s[n-k+i] then f:=false; {если удаленное из стека не совпадает
                                    с прочитанным символом, не палиндром}
if f then write('Палиндром'){если все совпало}
else write('Не палиндром');
readln
end.

Объяснение кода листинга программы

  1. Создается тип данных pstack, который представляет собой структуру данных стек.
  2. Создается переменная ptop типа pstack, которая будет представлять вершину стека.
  3. Создается переменная s типа string, которая будет хранить введенную пользователем строку.
  4. Создаются три переменные i, n и k типа integer, которые будут использоваться для работы со строкой.
  5. Создается переменная f типа boolean, которая будет использоваться для проверки, является ли строка палиндромом.
  6. Определяются две процедуры push и pop, которые будут использоваться для работы со стеком.
  7. В основной части программы происходит следующее:
    • Выводится сообщение Введите строку.
    • Пользователю предлагается ввести строку, которую он вводит в переменную s.
    • Вычисляется значение переменной k, которая представляет собой половину длины строки.
    • Инициализируется переменная i со значением 1.
    • Запускается цикл while i<=k do, который будет выполняться до тех пор, пока значение переменной i меньше или равно значению переменной k.
    • Внутри цикла происходит следующая операция:
      • В стек push добавляется символ из строки s[i].
      • Значение переменной i увеличивается на 1.
    • Переменная f устанавливается в значение true, предполагая, что строка является палиндромом.
    • Запускается цикл for i:=1 to k do, который будет выполняться от 1 до половины длины строки.
    • Внутри цикла происходит следующая операция:
      • Если значение переменной i меньше или равно значению переменной k, то значение переменной f устанавливается в значение false, предполагая, что строка не является палиндромом.
    • Если значение переменной f остается равным true, то выводится сообщение Палиндром.
    • Если значение переменной f становится равным false, то выводится сообщение Не палиндром.
    • После окончания цикла for происходит вывод сообщения readln.

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы