![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.08.2011
Сообщений: 27
|
![]()
Привет всем!
Задали задачку: проверить правильность закрывания кавычек и скобок. Т.е, например, такая последовательность правильная: "()", а такая - неправильная: (')' Никак не могу сообразить алгоритм, по которому можно проверить правильность. Подскажите, пожалуйста. Только очень большая просьба - не пишите сюда код. Просто помогите, плизз, с алгоритмом. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
Стек, булевый флажок, идем по строчке, когда видим ( запихиваем в стек, когда видим ' смотрим флажок, если флажок не установлен, суем ' в стек и устанавливаем флажок, если флажок уже установлен смотрим что на вершине стека (долнжа быть ') сбрасываем флажок и удаляем из стека. Когда видим ) почти то же самое, только без флажка - просто проверяем что на вершине стека - должно быть ( - удаляем из стека и так на каждый символ в строчке. Если на вершине стека не то, что нам надо, тогда выдаем ошибку и прекращаем работу.
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 16.08.2011
Сообщений: 27
|
![]()
Хм, интересно... Спасибо, буду пробовать
![]() |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]()
Начните с того, что опишите алгоритм пронумероваными шагами, с описанием что делать на каждом шагу. Старайтес разбивать на простенькие шаги, которые дальше уже распадаются на совсем примитивные операции (например шаг 25 - увеличить указатель на единицу или шаг 17 если указаталеь указывает на ноль, значит заканчиваем работу)
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 16.08.2011
Сообщений: 27
|
![]()
Спасибо за совет. Такой подход действительно способствует пониманию
![]() Сейчас напишем... ![]() |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,367
|
![]()
Могу предложить поискать в разделе "Паскаль":
"Искать в этом разделе" - ищем текст "Правильность скобок" Это конечно не Си, но там описаны алгоритмы и есть ссылка на литературу. Да и с Паскаля перевести - интерес для сравнительного изучения языков ![]() Как то так ....
Как-то так, ...
|
![]() |
![]() |
![]() |
#7 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]()
валерий предложил слишком сложное решение, да еще и со стеком и разными флажками )
лучше заведи один единственный счетчик, когда встретишь открывающую скобку - увеличивай - когда закрывающую уменьшай. Если в какой-то момент счетчик принял отрицательное значение - значит скобки стоят неверно. Если строка закончилась, а счетчик не равен нулю - скобки тоже стоят неверно. В противном случае все расставлено верно ) как то так: Код:
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 16.08.2011
Сообщений: 27
|
![]()
ViktorR, вариант интересный, но времени у меня всего лишь до понедельника
![]() rrrFer, да, спасибо, я это уже пробовал. но вот в таком варианте все равно программа отработает некорректно: ((())))( и плюс я (виноват!) не совсем точно описал суть задачи: мне еще нужно учитывать и кавычки. хотя с кавычками я разберусь, основные трудности у меня возникают как раз со скобками |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
а вы при уходе в минус скобок сразу трубите об ошибке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,368
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проверить правильность расстановки круглых и квадратных скобок в выражениях | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 06.07.2012 11:50 |
Программа, которая определяет правильность расстановок скобок (, [, {, ), }, ] | sidestep | Общие вопросы C/C++ | 14 | 04.04.2012 15:36 |
Проверить на правильность задачу | sam5213 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 23.12.2010 18:28 |
Нужно проверить на правильность программу | Killdgedan | Помощь студентам | 3 | 26.05.2009 00:45 |
Проверить равенство числа открывающих и закрывающих круглых скобок | 010 | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 18.05.2008 00:27 |