Есть простой способ подсчета парности скобок. Инициализируем счетчик нулем, а затем читаем строку. Если встречается открывающая скобка, в счетчик посылается +1, если закрывающая, то -1. После просмотра всей строки нулевое значение счетчика скажет нам о равенстве скобок, а ненулевое покажет количество лишних скобок. Каких именно - покажет знак.
Попутно замечу, что подобные подсчеты не гарантирует проверки синтаксической правильности расстановки скобок, например, выражение )a+b( синтаксически неверно, но в нем "правильное" количество скобок.
var
i,k:integer;
s:string;
begin
Write('Введите строку: '); Readln(s);
k:=0;
for i:=1 to Length(s) do
case s[i] of
'(':Inc(k);
')':Dec(k)
end;
if k=0 then Writeln('Скобки парные')
else
begin
Write('Обнаружено непарных ');
if k>0 then Write('открывающих') else Write('закрывающих');
Writeln(' скобок: ',abs(k))
end
end.
Тестовое решение:
Введите строку: (3*k+1/(c-5)*a;
Обнаружено непарных открывающих скобок: 1