• Предмет: Информатика
  • Автор: Громматей
  • Вопрос задан 1 год назад

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

В строке, среди знаков могут встречаться открывающие и закрывающие скобки. Проверить с помощью подпрограммы равенство числа открывающихся скобок числу закрывающихся.

Ответы

Ответ дал: xDmitryINFO
0
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.
Ответ дал: Аноним
0
Есть простой способ подсчета парности скобок. Инициализируем счетчик нулем, а затем читаем строку. Если встречается открывающая скобка, в счетчик посылается +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

Вас заинтересует