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