Brackets - открий грешката
Здравейте.
Това е задачката с вложените скоби { [ ( ) ] }
Не мога да си открия грешката, въртях условията как ли не, нещо ми убягва.
Ще помоля за малко съдействие.
Ето го кода:
https://pastebin.com/nH8guhH7
Здравейте.
Това е задачката с вложените скоби { [ ( ) ] }
Не мога да си открия грешката, въртях условията как ли не, нещо ми убягва.
Ще помоля за малко съдействие.
Ето го кода:
https://pastebin.com/nH8guhH7
При бърз пеглед на решението по зададеното условие, виждам няколко проблема:
1. Функцията brackets може да не отпечата нищо в доста от сценариите, заради използването на retrun в switch-a (функцията прекъсва, без да стигне до частта в края, която печата резултата). Отделно е много лоша практика една функция да се занимава с повече от едно нещо. В този случай, освен за валидация на израза, тя е натоварена и с отпечатване на резултата. По-правилно е типа на функцията да бъде променен от void на bool, който да се използва в main за отпечатване на резултата.
2. Логиката за валидация на израза ще връща грешни резултати за изрази като {[]}, които са напълно валидни по условие, но не и според тази проверка:
if( square <= 0 || round > 0 || curly > 0) return;
В горният пример, когато проверката стигне до 3-тата скоба (]) ще имаме square == 1, round == 0, но curly == 1, което логиката на програмата третира като грешка.
Аналогично ще фейлне и за изрази като [()], {[()]}, [[()]] и т.н., но в други проверки.
3. Решението с броячи за типовете скоби не е подходящо за решаване на тази задача, защото - както демонстрирах с примера по-горе, не се пази информация за последователността, в която се появяват тези скоби.
Класическото решение на този тип задача е с използването на стек, като в тази тема съм качил едно примерно решение, което може да се адаптира към тази задача (трябва да се добави проверката за правилна йерархия на типовете скоби).
Упех!
А условието какво е?
Write a program which reads a single line from the console, containing brackets for a mathematical expression (only
the brackets will appear in the input), and determines whether the brackets in the expression are correct. There are
3 types of brackets – {}, [] and (). {} can contain {}, [] and () brackets. Square brackets [] can contain [] and
() brackets. Curved () brackets can contain only () brackets. Said simply, each type of brackets can contain the
same type of brackets inside, or a “lower” type of brackets (() is lower than [] which is lower than {}). If a bracket
of one type is opened, it needs to be closed before a bracket of another type is closed.