![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 14.10.2013
Сообщений: 4
|
![]()
Задачи с применением стека
Проверка расстановки скобок a) Дана последовательность круглых, фигурных и квадратных скобок. Необходимо проверить правильность данной последовательности. Например, {}[(){}] - правильная последовательность, {[}] - неправильная. б) Убедитесь, что ваша программа также распознает последовательности типа (((()) и (())))) как неправильные. Усовершенствуйте программу так, чтобы символы отличные от скобок, не влияли на результат обработки. АТД - Стек Представление - Массив ![]() |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,367
|
![]()
Тема тут уже обсуждалась. Надо поискать.
Но если лень искать тут, то могу порекомендовать найти книгу: А.Шень, Программирование, Теоремы и задачи, Москва, МЦНМО, 2004 - эта версия у меня. Там на стр.97 изложен алгоритм решения. Идея: 1. Закодировать скобки по следующему правилу: Код:
3. При обнаружении закрывающейся скобки лезем в стек. Если стек пуст - ошибка. 4. Считанный из стека код сравниваем с кодом закрывающейся скобки. Если неравно - ошибка. Сравнение - через сложение или типа: Код:
Как-то так, ...
Как-то так, ...
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
![]()
Ну
1) нисходящий рекурсивный анализ 2) как уже сказали, динамика со стеком.. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
а что интересного в этой задаче?
заводим стек. перебираем по одному символы в строке, если встретили скобочку - если она открывающая - поместили её в стек, если она закрывающая, вытащили элемент с верхушки стека и проверили, что вытащилась скобка того же типа, что и открывающаяся (круглая, квадратная, фигурная), только ОТКРЫВАЮЩАЯ. Если тип скобок не совпал - выдаём ОШИБКУ (последовательность неправильная) и прекращаем цикл. Если успешно дошли до конца набора символов (строки), проверяем, пустой ли стек. Если пустой - БИНГО! Последовательность правильная, если стек после строки не пустой - ошибка (последовательность неправильная). Всё. ups!// я опоздал со своим ответом. Уже верные ответы даны! |
![]() |
![]() |
![]() |
#5 |
Регистрация: 14.10.2013
Сообщений: 4
|
![]()
Книгу нашёл спасибо) постараюсь разобраться
ну все равно спасибо за ответ, мб и твои вклады пригодяться) _________ Не надо плодить подряд несколько коротких сообщений! Это нарушение правил... для того, чтобы через минуту/другую дописать сообщение, не надо создавать ещё один новый пост. нажимайте на предыдущем кнопку "Редактировать" ("Правка") и дописывайте в своё сообщение, что Вы хотели добавить! Модератор Последний раз редактировалось Serge_Bliznykov; 14.10.2013 в 22:42. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Интересная задача | makskovalko | Помощь студентам | 5 | 22.02.2013 22:11 |
Интересная задача | makskovalko | Помощь студентам | 5 | 19.12.2012 10:34 |
Интересная задача! - | DannerDOS.kz | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 16.12.2008 14:04 |
Интересная задача | Ser | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 27.02.2008 00:19 |