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