Помощь - Поиск - Пользователи - Календарь
Полная версия: Построить все правильные скобочные выражения 2N
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dr1khem
Построить все правильные скобочные выражения 2N то есть те которые содержат по N правых и N левых скобок. Использовать рекурсию.


rocedure ShowVariant(s : string; a, b : integer);
begin
if (a=0) and (b=0) then begin Writeln(s); Exit; end;
if (a>0) and (b>=a) then ShowVariant(s+'(',a-1,b);
if b>0 then ShowVariant(s+')',a,b-1);
end;
var N : integer;
begin
N := 4;
ShowVariant('',N,N);
readln;
end.
Krjuger
А разве ключевое слово не ВСЕ правильные скобочные выражения?.Вы пытаетесь построить лишь 1 правильное скобочное выражение.
IUnknown
Вообще-то непонятно в чем вопрос. Программа запускается и строит ВСЕ правильные скобочные выражения (Krjuger, там же рекурсия, ага). Что топикстартеру надо было?
Dr1khem
Цитата(IUnknown @ 20.03.2012 18:34) *

Вообще-то непонятно в чем вопрос. Программа запускается и строит ВСЕ правильные скобочные выражения (Krjuger, там же рекурсия, ага). Что топикстартеру надо было?


Необходимо построить правильно скобочные выражения. (вводятся с клавиатуры). Например, Если есть открывающая скобка, то обязательно должна быть и закрывающая. Необходимо "сказать" программе, чтобы она из, к примеру, (() делала (()) (не хватало одной закрывающей скобки
IUnknown
Это не то, что сказано в первоначальном посте. Теперь вообще непонятно, к чему тут приведенный код.

Тебе нужна проверка на вложенность скобок, ищи по форуму, тут есть не меньше 5 способов такой проверки. А потом, после проверки, решаешь что делать. Если "неправильность" добавлением закрывающих скобок исправить не удастся (строка не разобрана до конца но стек пуст - значит, проблема типа '()())()', и добавление скобок с любой стороны ничего не даст, ибо ты не знаешь, где именно подразумевалась открытая скобка) - значит выдавать сообщение об ошибке. Если удастся (разобрали строку до конца, но в стеке остались открытые скобки) - значит дописываешь к введенной последовательности нужное число скобок.
Dr1khem
Цитата(IUnknown @ 22.03.2012 13:35) *

Это не то, что сказано в первоначальном посте. Теперь вообще непонятно, к чему тут приведенный код.

Тебе нужна проверка на вложенность скобок, ищи по форуму, тут есть не меньше 5 способов такой проверки. А потом, после проверки, решаешь что делать. Если "неправильность" добавлением закрывающих скобок исправить не удастся (строка не разобрана до конца но стек пуст - значит, проблема типа '()())()', и добавление скобок с любой стороны ничего не даст, ибо ты не знаешь, где именно подразумевалась открытая скобка) - значит выдавать сообщение об ошибке. Если удастся (разобрали строку до конца, но в стеке остались открытые скобки) - значит дописываешь к введенной последовательности нужное число скобок.


это примерный код а надо свой написать
Lapp
Цитата(Dr1khem @ 22.03.2012 14:53) *
это примерный код а надо свой написать

Кхм. Если нужно свой, то и пиши свой. Ты извини, но при всем своем умении мы не сможем написать тебе твой код (см. историю про норвежскую селедку в книге про капитана Врунгеля)).

Ты привел код, прекрасно решающий поставленную тобой задачу. Никаких разбалансов или других неправильностей он не делает. Причем, использует рекурсию (как и требуется). Или ты настолько ленив, что хочешь, чтоб кто-то другой тебе изменил чей-то в работающем код, чтоб он выглядел как твой, а сам ты при этом только копипастил?.. blink.gif А пописать за тебя не сходить?..
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.