Brackets - открий грешката - Софтуерен университет

Brackets - открий грешката - Софтуерен университет

+ Нов въпрос
daskalov.iv avatar daskalov.iv 17 Точки

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

Здравейте.

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

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

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

Ето го кода: 

https://pastebin.com/nH8guhH7

 

Тагове:
0
C++ Fundamentals
MartinBG avatar MartinBG 585 Точки
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
MartinBG avatar MartinBG 585 Точки

А условието какво е?

0
daskalov.iv avatar daskalov.iv 17 Точки

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.

0