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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2012, 16:51   #1
NinaSSS
Пользователь
 
Регистрация: 30.10.2012
Сообщений: 34
По умолчанию Динамическая очередь в паскале

Пожалуйста помогите. Задача стоит так: В динамическую очередь записать математическую формулу, вывести ее и проверить баланс расстановки скобок. Кое что сделала. Проблема в том, что после того как вызываешь процедуру вывода на экран, процедура поиска баланса скобок начинает работать не верно. И наоборот при вызове процедуры проверки баланса скобок, не выводится формула. Заранее всем спасибо!!!!Вот что у меня получилось
Код:
uses crt;
const n=7;
type pnode=^node;
node=record
s:string;
p:pnode;end;
var beg,fin:pnode;i,vv:integer; s,ot:string; ss:array[1..10] of string;

procedure first ;
 var p:pnode;
begin   writeln('vvedite dannie');
new(beg); writeln('vvedite simvol formuli'); readln(s);
 beg^.p:=nil;beg^.s:=s;
fin:=beg;
end;
 procedure add ;
 var p:pnode;
   begin
  writeln('vvedite dannie') ;
for i:=1 to 5 do begin   writeln('vvedite simvol formuli'); readln(s);
new(p); p^.p:=nil; fin^.p:=p; fin:=p;
p^.s:=s;
  end;
end;

procedure get;
var p:pnode;
begin
write(beg^.s,'  '); p:=beg; beg:=beg^.p;
 dispose(p);
 if beg=nil then fin:=nil
 end;
procedure scob;
var k,k1:integer; p:pnode;
begin k:=0; k1:=0;
while beg<>nil do begin
if beg^.s='(' then begin k:=k+1;end;
if beg^.s=')' then  begin k1:=k1+1; end;
 beg:=beg^.p; end;
  writeln('k=',k);
  writeln('k1=',k1);
if k=k1 then writeln('баланс скобок соблюден') else
writeln('баланс скобок не соблюден') ;
end;
 begin  clrscr;
   repeat
 writeln('vvedite deistvie');readln(vv);
   case vv of
 1:first;
 2:add;
3: while beg<>nil do begin
 get;
 end;
 4:scob; end;

 writeln('prodolzit?'); readln(ot); until (ot='n')
 end.
Прошу прощения в исходнике естественно смайликов нет



_________
что в исходном коде не было "смайликов", код нужно оформлять по правилам форума:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.10.2012 в 17:04.
NinaSSS вне форума Ответить с цитированием
Старый 31.10.2012, 22:49   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

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

ДОБАВЛЕНО.
В выражение типа ))0(( баланс скобок соблюден, ежели так не надо, то на форуме есть примеры на тему баланса скобок
Изображения
Тип файла: jpg исключены.jpg (42.4 Кб, 42 просмотров)

Последний раз редактировалось eoln; 31.10.2012 в 22:55.
eoln вне форума Ответить с цитированием
Старый 01.11.2012, 11:45   #3
NinaSSS
Пользователь
 
Регистрация: 30.10.2012
Сообщений: 34
По умолчанию

eoln огромное вам СПАСИБО!!!!!
NinaSSS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с++ очередь zubber94 Помощь студентам 8 25.07.2012 00:01
Pascal (turbo) Динамическая память (список, очередь, стек) Trol_ko Помощь студентам 5 14.09.2011 13:27
динамическая память на паскале Pihan Помощь студентам 3 17.07.2009 15:01