Программа проверяет расстановку правильности скобок с помощью занесения в стек, но проверяет почему то не верно,а вроде все так, посмотрите ошибка где может или по другому реализовать нужно??
Код | Program Skobki; Type EXST = ^ST; ST = record Data : char; Next : EXST; end; Var a : string; f : boolean; i : integer; Procedure writeStack(Var x1 : EXST; c : char); Var u : EXST; Begin new(u); {создание нового элемента стека} u^.Data := c; u^.Next := x1; x1 := u; {созданный элемент определить как вершину стека} End; Procedure DelStack(Var x1 : EXST); {процедура удаления верхнего элемента стека} Var u : EXST; Begin u := x1; x1 := x1^.Next; dispose(u); End; Procedure Solve(a : string); {проверка правильности расстановки скобок} Var Stack : EXST; Begin Stack := Nil; i := 1; while (i<=Length(a)) and f do begin if (a[i]='(') or (a[i]='{') or (a[i]='[') then writeStack(Stack , a[i]) else if (a[i]=')') or (a[i]='}') or (a[i]=']') then if (Stack <> Nil) And (Ord(a[i]) - Ord(Stack ^.Data) <= 2) then DelStack(Stack) else f := False; Inc(i); end; end; Begin writeln('Введите строку'); readln(a); f := True; if a<>'' then begin Solve(a); if f then writeln('Все скобки расставлены верно') else writeln('Скобка ',a[i-1],' закрыта преждевременно'); end else writeln('Строка пуста'); readln; End.
|
|