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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 22:38   #1
kalosha-stepa
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 25
Печаль Стек

Написать программу, проверяющую своевременность закрытия скобок вида (, ), [, ], {, }

вот часть проги почти вся но есть недочеты например если(((()) он говорит правильная, а если (())))- наоборот неправильная

Код:
program z2;

type
  stack = ^Elem;
  Elem = record
    data: char;
    next: stack;
  end;

var
  head: stack; s: string; f: boolean;n: char;

procedure WriteStack(var head: Stack; n: char);
var
  temp: stack;
begin
  new(temp);
  temp^.data := n;
  temp^.next := head;
  head := temp;
end;

procedure ReadStack(var head: stack; n: char);
var
  temp: stack;
begin
  n := head^.data;
  temp := head;
  head := head^.next;
  dispose(temp);
end;

function Free(head: stack): boolean;
begin
  if(head = nil) then Free := true
  else Free := false;
end;

procedure Solve(a: string; var p: boolean);
var
  head: stack; i: integer; Ch: char;
begin
  Head := nil;
  p := true;
  i := 1;
  while(i <= length(a)) and p do 
  begin
    if a[i] in ['(', '{', '['] then WriteStack(head, a[i])
    else begin;
      if not Free(head) then begin
        ReadStack(head, ch);
        if (ord(ch) - ord(a[i])) > 2 then p := false;
      end
      else p := false;
    end;
    inc(i);
  end;

begin
  writeln('введите строку');
  readln(s);
  if (s <> '') then begin
    Solve(s, f);
    if f then writeln('строка записана правильно')
    else writeln('в строке есть ошибка');
  end
  else writeln('строка пустая');
  writeln;
  Writestack(head, n);
  Readstack(head, n);
  Free(head);
end.
+добавить условие на проверку букв в строке если они есть не выдавать ошибку
Заранее спасиб



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

Последний раз редактировалось Serge_Bliznykov; 13.11.2012 в 16:52.
kalosha-stepa вне форума Ответить с цитированием
Старый 13.11.2012, 16:39   #2
grandmixer
Пользователь
 
Аватар для grandmixer
 
Регистрация: 30.10.2012
Сообщений: 31
По умолчанию

проверяй все открытые скобки и увеличивай переменную 1
потом тоже самое с закрытыми и увеличивай переменную 2
если не совпали то не правильно
grandmixer вне форума Ответить с цитированием
Старый 13.11.2012, 16:42   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

grandmixer, а если ([)]?
http://programmersforum.ru/showthread.php?t=178071 - похожая задачка (только обсуждение).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.11.2012 в 16:50.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек vadiprog Помощь студентам 1 13.12.2011 23:51
Стек Darknes Общие вопросы C/C++ 2 11.04.2011 23:30
Стек [ICQ] Помощь студентам 5 02.05.2010 13:44
стек в с++ Aleksa_ks Помощь студентам 0 02.05.2010 12:12