Задача со скобкаим #787701


#0 by Sv4org
Составить обработку, которая проверяет корректность баланса скобок в арифметическом выражении, т.е. что скобки установлены верно и правильно их вхождение, то есть если скобки так расположены [({})] , то это правильное вхождение, а вот [([) - неверное. Входной параметр - Строка - арифметическое выражение; Выходной параметр - "Верно""Не верно". Использовать метод "Вычислить" нельзя.
#1 by Sv4org
Подскажите пожалуйста как это решить
#2 by МимохожийОднако
Перебирай последовательно и считай скобки.
#3 by butterbean
Перебирай посимвольно и запоминай в массив открытые скобки, и убирай их оттуда по мере того, как попадутся закрытые
#4 by Fragster
2000 рублей
#5 by Garykom
Задача имеет много решений, правильные это нечто вроде можно восходящий. А тупое это
#6 by Garykom
+ сорри за очепятки
#7 by Garykom
Гы кто ответит не запуская сколько у меня всего ошибок в и сколько разных видов ошибок?
#8 by Sv4org
Ну суть примерно понял, вот что получилось, не знаю правильно или нет Подскажите только как сделать это в обработке? какие реквизиты нужны или ТЧ? Как это вообще должно работать?
#9 by НП
Строгое решение состоит в преобразовании в польскую (постфиксную) запись. Все это широко обсуждалось лет 50 тому назад. В книге Генератор компиляторов  У Маккимана и др. на стр. 52 в разделе "Деревья, стеки и польская запись приводится" теоретической обоснование компиляции арифметического выражения.
#10 by NorthWind
рекурсия. Сканируем строку слева направо. Когда обнаруживается открывающаяся скобка - вызываем себя же, передавая номер следующего после открывающейся скобки символа и тип этой скобки (квадратная, круглая и т.д.). Соответственно сканируем уже начиная с этого символа и т.д. Выход из процедуры на уровень выше происходит, когда встретится закрывающая скобка такого же типа, как была передана, или когда строка окончится. . Еще должна быть глобальная по отношению к процедуре переменная типа "счетчика ссылок". Изначально она инициализируется нулем. Встретили открывающую скобку - увеличиваем на 1, закрывающую - уменьшили на 1. . Если выражение корректно, то по окончании сканирования значение этой переменной будет 0. Если скобки расположены криво или их количество не соответствует действительности, то значение будет ненулевое.
#11 by NorthWind
польскую запись есть смысл мутить, если нужно делать полноценный разбор выражений с арифметическими и прочими действиями. Если просто посчитать скобки и корректность их открытия-закрытия - то достаточно .
#12 by Fragster
Зачем рекурсия? Цикл и стек из массива.
#13 by NorthWind
Если бояться переполнения стека, то таки да :)
#14 by NorthWind
хотя можно просто поставить ограничение на количество вложений скобок
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С