Софтуерно Инженерство
Loading...
daskalov.iv avatar daskalov.iv 17 Точки

Brackets - открий грешката

Здравейте.

Това е задачката с вложените скоби { [ ( ) ] }

Не мога да си открия грешката, въртях условията как ли не, нещо ми убягва.

Ще помоля за малко съдействие.

Ето го кода: 

https://pastebin.com/nH8guhH7

 

Тагове:
0
C++ Fundamentals
MartinBG avatar MartinBG 802 Точки
Best Answer

При бърз пеглед на решението по зададеното условие, виждам няколко проблема:

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. Решението с броячи за типовете скоби не е подходящо за решаване на тази задача, защото - както демонстрирах с примера по-горе, не се пази информация за последователността, в която се появяват тези скоби.

Класическото решение на този тип задача е с използването на стек, като в тази тема съм качил едно примерно решение, което може да се адаптира към тази задача (трябва да се добави проверката за правилна йерархия на типовете скоби).

 

Упех!

0
06/01/2018 13:51:42