Произвести проверку соблюдения баланса операторов REPEAT
UNTIL в тексте программы на языке Паскаль. Использовать программный стек.
Код:
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); {Проверка баланса repeat-until}
Var
Stack : EXST;
Begin
Stack := Nil;
i := 1;
while (i<=Length(a)) and f do
begin
if (a[i]='repeat')
then
writeStack(Stack , a[i])
else
if (a[i]='until')
then
if (Stack <> Nil) And (Ord(a[i]) - Ord(Stack ^.Data) <= 2)
then
DelStack(Stack)
else
f := False;
Inc(i);
end;
end;
Begin
writeln('Vvedite stroky');
readln(a);
f := True;
if a<>''
then
begin
Solve(a);
if f
then
writeln('Balans')
else
writeln('Net balansa');
end
else
writeln('Строка пуста');
readln;
End.