вот сама задача:
1. Скобки
Составить обработку, которая проверяет корректность баланса скобок в арифметическом выражении, т.е.
что скобки установлены верно и правильно их вхождение, то есть если скобки так расположены [({})] , то это правильное вхождение, а вот [([) - неверное.
Входной параметр - Строка - арифметическое выражение;
Выходной параметр - "Верно"\"Не верно".
Использовать метод "Вычислить" нельзя
Вот как я решал!Но почему то не работает и ошибки нет
&НаКлиенте
Процедура ПроверитьСкобки(Команда)
стр = объект.Выражение;
ТекстОшибки = "";
ПозицияОшибки=0;
СкобкиРасставленыКорректно(Стр, ТекстОшибки , ПозицияОшибки);
КонецПроцедуры
&НаКлиенте
Функция СкобкиРасставленыКорректно(Стр, ТекстОшибки = "", ПозицияОшибки=0)
Перем к, с, ч, Стек;
ч=0;
Стек = "";
Для к = 1 По СтрДлина(Стр) Цикл
с = Сред(Стр, к, 1);
ч = Найти("({[", с);
Если ч > 0 Тогда
Стек = Сред(")}]", ч, 1) + Стек;
ИначеЕсли Найти(")}]", с) > 0 Тогда
Если Стек = "" Тогда
ПозицияОшибки = к;
ТекстОшибки = "Неверная закрывающая скобка: " + Лев(Стр, к - 1) + " """ + Сред(Стр, к, 1) + """ " + Сред(Стр, к + 1);
Возврат Ложь;
КонецЕсли;
Ожидается = Лев(Стек, 1);
Если Ожидается <> с Тогда
ПозицияОшибки = к;
ТекстОшибки = "Неверная закрывающая скобка: " + Лев(Стр, к - 1) + " """ + Сред(Стр, к, 1) + """ " + Сред(Стр, к + 1) + ". Ожидается """ + Ожидается + """ ";
Возврат Ложь;
КонецЕсли;
Стек = Сред(Стек, 2);
КонецЕсли;
КонецЦикла;
Если СтрДлина(Стек) > 0 Тогда
ПозицияОшибки = СтрДлина(Стр) + 1;
ТекстОшибки = "Отсутствует закрывающие скобки: " + Стек;
Возврат Ложь;
КонецЕсли;
ПозицияОшибки = 0;
ТекстОшибки = "Правильно";
Возврат Истина;
КонецФункции