Написать исходный код в pascal-е. решить по обработке строковых данных с использованием подпрограмм: в строке, среди знаков могут встречаться открывающие и закрывающие скобки. проверить с подпрограммы равенство числа открывающихся скобок числу закрывающихся.

gbhj76 gbhj76    1   30.06.2019 15:20    0

Ответы
pyankova06 pyankova06  02.10.2020 16:19
Есть простой подсчета парности скобок. Инициализируем счетчик нулем, а затем читаем строку. Если встречается открывающая скобка, в счетчик посылается +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
ПОКАЗАТЬ ОТВЕТЫ
liza1392 liza1392  02.10.2020 16:19
Var
  str:string;
  i, n9, n0:integer;

begin
  readln(str);
  for i:=1 to Length(str) do
    if str[i] = '(' then
      n9 := n9 + 1
    else
      if str[i] = ')' then
        n0 := n0 + 1;
  if n9 = n0 then
    writeln('Число открывающихся скобок равно числу закрывающихся')
  else
    writeln('Число открывающихся скобок не равно числу закрывающихся');
end.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика