| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [Borland C++ 3.1] Проверка скобок в мат. выражении |
| Автор: Prophet 14.12.2007, 02:25 |
| Помогите пожалуйста. Начал программировать на Borland C++ недавно, а тут надо сделать программу, для создания которой моих знаний недостаточно. Алгоритм составить смог, а вот превратить его в код не в состоянии... Мне надо написать программу, позволяющую проверить корректность расстановки скобок в математическом выражении. Математическое выражение вводится с клавиатуры в виде строки символов (не более 30 символов). Проверка оформляется в виде подпрограммы, которая должна выдавать на экран сообщения вида: "соответствует", "пропущено 2 закрывающих скобки" |
| Автор: baldina 14.12.2007, 11:15 |
| Так какой алгоритм придумал? |
| Автор: Sharkfire 14.12.2007, 11:26 | ||
| Так нужен твой алгоритм, для портирования, как же так мы тебе поможен... ну вообщем то так: Писал не в компиляторе а пряма тут.
|
| Автор: zkv 14.12.2007, 11:35 |
| Sharkfire, недостаточно просто посчитать количество тех и других скобок и сравнить количество. Необходимо также проверять их порядок например последовательность ")(" - неправильная, хотя скобок закрывающих столько же, сколько и открывающих. Задача легко решается стеком, я выкладывал тут решение (в Центре помощи), просто кому-то влом искать. |
| Автор: xvr 14.12.2007, 16:14 | ||||
|
| Автор: Prophet 15.12.2007, 04:10 | ||
Спасибо большое. Я написал вот так вот в конечном итоге:
|
| Автор: xvr 15.12.2007, 11:20 | ||||
Два замечания: 1) В последнем if'е стоит присваивание вместо сравнения 2) Твоя программа не поймает случаев НЕПРАВИЛЬНОГО балансирования скобок. Например )a( для нее правильная расстановка скобок |
| Автор: Prophet 15.12.2007, 16:28 |
| xvr, Насчёт if всё правильно, так как тут уже не надо сравнения. Тут идёт вариант когда количество открывающих и закрывающих скобок одинаковое. Вот проблема с вариантом, когда выражение начинается с закрывающей скобки, действительно присутствует. |
| Автор: xvr 17.12.2007, 13:24 | ||||
Вообще то, когда видишь код
Возникает законное подозрение, что автор хотел написать if(x==y), тем более, что по логике программы это так и есть. То, что этот if работает и с присваиванием вместо сравнения - чистая случайность, на самом деле он вообще не нужен - нужно было просто написать printf("Sootvetstvuet\n"); Кроме того, этот код (с присваиванием) все равно не правильный - при нулевом количестве скобок ВООБЩЕ ничего выведено не будет. |