Дана строка, выяснить является ли строка палиндромом - 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.
Объяснение кода листинга программы
- Создается тип данных
pstack, который представляет собой структуру данныхстек. - Создается переменная
ptopтипаpstack, которая будет представлять вершину стека. - Создается переменная
sтипаstring, которая будет хранить введенную пользователем строку. - Создаются три переменные
i,nиkтипаinteger, которые будут использоваться для работы со строкой. - Создается переменная
fтипаboolean, которая будет использоваться для проверки, является ли строка палиндромом. - Определяются две процедуры
pushиpop, которые будут использоваться для работы со стеком. - В основной части программы происходит следующее:
- Выводится сообщение
Введите строку. - Пользователю предлагается ввести строку, которую он вводит в переменную
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.
- Выводится сообщение