Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2011, 17:50   #1
torren108
Пользователь
 
Регистрация: 28.09.2011
Сообщений: 17
Печаль Проверка правильности расстановки круглых скобок.

Пропустил тему о стеках и очередях на парах, а сейчас по ней лабу нужно написать.
Задание: "С помощью стека проверьте правильность расставленных в данном арифметическом выражении круглых скобок". В учебнике темы нет, нагуглить по этому заданию смог только алгоритм Рутисхаузера, но совсем не понял, как облачить его в код.
Если кто-то не против помочь, покажите хотя бы часть кода для этого задания или даже целую программу и главное - объяснение, что и для чего там. Можно и просто ссылки на похожите задания. Написать мне это нужно на Си.
torren108 вне форума Ответить с цитированием
Старый 11.12.2011, 19:00   #2
RinatV
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 27
По умолчанию

смотришь каждый символ строки начиная с начала

если встречается символ ( то добавляешь его в стек
если встречается символ ) то смотришь не пустой ли стек, если не пустой идешь дальше, если пустой значит расстановка скобок неверная

как дойдешь до конца строки проверяешь пустой ли стек, если пустой то все хорошо, если нет то не хватает закрывающих т.е. провал
RinatV вне форума Ответить с цитированием
Старый 11.12.2011, 19:05   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Вообще стек здесь не нужен. Это все равно что стрелять из пушки по воробьям. Достаточного одного целого числа, так как конкретная скобка или ее конкретное местоположение для определение корректности не нужно.
Изначально берется число - 0. Открывающая скобка +1. Закрывающая скобка -1. Если во время обработки число скобок уйдет в минуса - значит выражение некорректно встретилась закрывающая скобка раньше открывающей. Ну и как было сказано выше - если после обработки выражения число более 0 значит остались незакрытые скобки.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.12.2011, 19:40   #4
torren108
Пользователь
 
Регистрация: 28.09.2011
Сообщений: 17
По умолчанию

Но задание ясно указано - использовать стек, что прискорбно.
Хотелось бы про конструкции стеков, объявление, параметры... в гугле все несколько перегружено как мне кажется
torren108 вне форума Ответить с цитированием
Старый 11.12.2011, 19:43   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

С помощью стека проверьте правильность расставленных в данном арифметическом выражении круглых скобок

Тут, возможно, все сложнее. К примеру, такое выражение неправильное: (5+3()), хотя скобки нормально закрываются. Для проверки такого выражения как раз и нужен стек или рекурсия. Но задачка будет несколько сложнее.
Arigato на форуме Ответить с цитированием
Старый 11.12.2011, 20:05   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Arigato, логика и здравый смысл говорит, что Вы правы. Но формально, если придираться, то
Цитата:
правильность расставленных в данном арифметическом выражении круглых скобок
для выражения
Код:
(5+3())
выпоняется. То есть неправильно составленное выражение и правильно расположенные скобки в неправильно составленном выражении это немного разное. Я баловался такими вещами , и формально скобки корректны. В общем-то цель задания - задел на разбор выражений. Но фишка в том, что сапми скобки не учавствуют в вычислениях. Но меняют их ход. И потому их наличие в стеке совершенно не обязательно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.12.2011 в 20:12.
Utkin вне форума Ответить с цитированием
Старый 11.12.2011, 20:11   #7
torren108
Пользователь
 
Регистрация: 28.09.2011
Сообщений: 17
По умолчанию

И все-таки, как это реализовать на Си?
torren108 вне форума Ответить с цитированием
Старый 11.12.2011, 20:15   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Utkin, смотря что понимать под правильным расставлением скобок. Если только порядок их следования и закрытие, то да. А ведь можно считать, что скобки неправильно расставлены, потому что появляются там, где их не должно быть.

torren108, открыть редактор кода и туда при помощи клавиатуры вбивать программу.
Arigato на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на колличество скобок! Lemo Помощь студентам 2 01.11.2009 15:16
Проверка правильности IP адреса Nester Помощь студентам 2 23.08.2009 14:39
Проверка правильности ввода. Whiplash Паскаль, Turbo Pascal, PascalABC.NET 6 14.11.2008 18:00
Проверить равенство числа открывающих и закрывающих круглых скобок 010 Паскаль, Turbo Pascal, PascalABC.NET 6 18.05.2008 00:27
Проверка правильности KORT Помощь студентам 3 23.04.2007 20:23