Предмет: Информатика,
автор: Громматей
Написать исходный код в Pascal-е.
Решить задачу по обработке строковых данных с использованием подпрограмм:
В строке, среди знаков могут встречаться открывающие и закрывающие скобки. Проверить с помощью подпрограммы равенство числа открывающихся скобок числу закрывающихся.
Ответы
Автор ответа:
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.
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
Попутно замечу, что подобные подсчеты не гарантирует проверки синтаксической правильности расстановки скобок, например, выражение )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
Похожие вопросы
Предмет: Английский язык,
автор: polina681
Предмет: Русский язык,
автор: Ism12
Предмет: Русский язык,
автор: aleksey1618s
Предмет: Математика,
автор: jdjsjdjdjsks
Предмет: Алгебра,
автор: chingismendibaev48