Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2013, 22:57   #1
Lizoveta
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 44
По умолчанию Паскаль, стек

Добрый вечер. Помогите, пожалуйста, дополнить задачу. Программа должна проверять является ли введенная
последовательность палиндромом. А у меня она только вводит последовательность и переворачивает.

Код:
uses crt;
type pstack=^stack;         {стек}
     stack=record
       nomber: integer;
       next: pstack;
     end;
var ptop: pstack;   {вершина стека}
    x,i,n: integer;

procedure push (chto: integer);        {добавление в конце стека}
var p: pstack;
begin
     new(p);
     p^.nomber:=chto;
     p^.next:=ptop;
     ptop:=p;
end;
                                       {удаление из вершины стека}
function pop : integer;
var p: pstack;
begin
     p:=ptop;
     pop:=p^.nomber;
     ptop:=p^.next;
     dispose(p);
end;

function stackempty: boolean;          {проверка на пустоту}
begin
     stackempty:=ptop=nil;
end;

begin                                            {тело программы}
clrscr;
     ptop:=nil;
     read(n);                                     {ввод переменной. Она обязательно 
                                                      четная и положительная}
     writeln;
     i:=1;
     while i<=n do                            {ввод N цифр - последовательность}
           begin
                read(x);
                push(x);
                i:=i+1;
           end;
     writeln;
     while not stackempty do              {вывод этой последовательности в 
                                                         обратном порядке}                                                                                                                                                                                                         
           begin
                write(pop);
           end;

end.

Последний раз редактировалось Stilet; 04.08.2013 в 09:46.
Lizoveta вне форума Ответить с цитированием
Старый 04.08.2013, 00:42   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Не очень ясно по поводу использования стека, а не строки, например, как предлагалось в решениях, ранее обсуждавшиеся - поищите, для интереса.

Вместе с тем, если уж стек - это неотвратимо, то предлагаю вводить в стек только половину последовательности.
При вводе второй части цифр, необходимо извлекать очередную цифру из стека и сравнивать с введенной. Если совпадение до последней введенной цифры и стек пуст, то все Ок, иначе ...



Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 04.08.2013, 12:15   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Примерно так, пустоту не проверяем, это само собой
Код:
uses crt;
type pstack=^stack;         {стек}
     stack=record
       nomber: integer;
       next: pstack;
     end;
var ptop: pstack;   {вершина стека}
    x,i,n,k: integer;
    f:boolean;
procedure push (chto: integer);        {добавление в конце стека}
var p: pstack;
begin
     new(p);
     p^.nomber:=chto;
     p^.next:=ptop;
     ptop:=p;
end;
                                       {удаление из вершины стека}
function pop : integer;
var p: pstack;
begin
     p:=ptop;
     pop:=p^.nomber;
     ptop:=p^.next;
     dispose(p);
end;

begin
ptop:=nil;
read(n); {ввод размера, неважно четное или нет}
k:=n div 2;
i:=1;
while i<=k do  {ввод первой половины цифр в стек}
 begin
  read(x);
  push(x);
  i:=i+1;
 end;
f:=true; {пусть палиндром}
if odd(n) then read(x); {если нечетное, то вводим середину, она не влияет на палиндром}
 for i:=1 to k do {вводим вторую половину чисел}
  begin
   read(x);
   if pop<>x then f:=false; {если удаленное из стека не совпадает введенным
                             числом, не палиндром}
  end;
if f then write('Палиндром'){если все совпало}
else write('Не палиндром')
end.
puporev вне форума Ответить с цитированием
Старый 04.08.2013, 21:05   #4
Lizoveta
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 44
По умолчанию

Спасибо большое!
Lizoveta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив - стек. Паскаль HailMe Помощь студентам 5 11.02.2013 15:44
Паскаль. Стек Rediska512 Помощь студентам 2 21.03.2012 09:59
ПАСКАЛЬ. СТЕК loki_man Паскаль, Turbo Pascal, PascalABC.NET 8 03.03.2012 03:56
Паскаль стек stacytwo Помощь студентам 3 27.10.2011 21:45
Паскаль Стек и сортировка MIKE11IPME Помощь студентам 1 12.11.2010 15:32