![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Символьное дифференцирование [D7]
Ivan © (2012-04-08 14:39:00)Здравствуйте,уважаемые форумчани.Есть вопрос по структуре программного кода на символьное дифференцирование.Подпрограммы вроде все работают,а вот с блоком основной программы,что-то не получается у меня.Подскажите что я делаю не так.
Ivan (2012-04-20 10:19:00) [1]благодарю всех кто давал подсказки, как подступиться к данной задаче.
han_malign (2012-04-19 09:46:00) [2]А, не - таки три указателя на последнюю открытую, с обратным поиском предыдущей незакрытой(только по "своей" скобке, т.к. внутренние коллизии уже обработаны).
Коллизия ловится сразу на закрывающей...
Счетчики можно добавить уже для оптимизации.
han_malign (2012-04-19 09:15:00) [3]
> > Так стек для этой задачи и не нужен.
> Для трёх видов скобок?
- 6 - счетчиков((открытые+закрытые)*3) с обратным сканированием - O(N^2)...
Правда - то мне блазнится, что засад нет, то - что есть..., а додумывать лень, да и поработать в конце-концов надо...
jack128_ (2012-04-18 22:25:00) [4]
> > передавай символы скобок параметрами и вызови функцию
> три раза.
>
>
> ( [ { ] ) }
Да, лажает. Ну тогда можно массив из трех элементов завести, где будет храниться порядок в котором открываются разные виды скобок. Правда такой массив можно назвать стеком с фиксированной длинной -)
Inovet (2012-04-18 21:58:00) [5]> [29] Ivan (18.04.12 18:53)
> А как сделать так, чтобы можно было посмотреть промежуточные
> результаты выполнения символьного дифференцирования?
Так же как начальный и конечный - обходом дерева.
Ivan (2012-04-18 21:47:00) [6]Я не храню говнокод пятнадцатилетней давности :)
Иногда говнокод может в чём-то даже помочь)))))))))
А как насчёт промежуточных результатов дифференцирования. как тут быть?
Ega23 (2012-04-18 18:57:00) [7]
> .Если можно с исходником.(благодарю)
Смеёшься? Я не храню говнокод пятнадцатилетней давности :)
Ivan (2012-04-18 18:53:00) [8]Решил что буду работать с бинарным деревом.Всё переделаю. Наверняка кто -то делал же прогу на дифференцирование.
А я вот на первом курсе её без стека решил. Через опу. :)
Хотелось бы посмотреть как другие выполняли эту работу.Если можно с исходником.(благодарю)
В процессе продумывания плана моей работы возник вопрос. А как сделать так, чтобы можно было посмотреть промежуточные результаты выполнения символьного дифференцирования?
Ega23 (2012-04-18 16:45:00) [9]
> передавай символы скобок параметрами и вызови функцию три раза.
( [ { ] ) }
jack128_ (2012-04-18 16:35:00) [10]
> Это ты проверил открыто = закрыто. А как преобразовать (а
> + б) * (а - б)?
во что преобразовать?
Задача как стояла? проверить
> правильность расстановки скобок.
?? агло вроде решает эту задачу. либо приведи строку, на которой он лажает.
> Ega23 © (18.04.12 10:20) [26]
> Для трёх видов скобок?
передавай символы скобок параметрами и вызови функцию три раза.
Ega23 (2012-04-18 10:20:00) [11]
> Так стек для этой задачи и не нужен.
Для трёх видов скобок?
Inovet (2012-04-18 09:57:00) [12]> [24] jack128_ (18.04.12 09:46)
> Так стек для этой задачи и не нужен.
Это ты проверил открыто = закрыто. А как преобразовать (а + б) * (а - б)?
jack128_ (2012-04-18 09:46:00) [13]
> А я вот на первом курсе её без стека решил. Через опу. :
> )
Так стек для этой задачи и не нужен.
var
input: string;
..
OpenBracketCount: Integer;
begin
OpenBracketCount := 0;
for I := 1 to Length(Input) do
begin
case Input[I] of
'(': Inc(OpenBracketCount);
')': Dec(OpenBracketCount);
end;
if OpenBracketCount < 0 then
raise Exception.Create('ВНЕЗАПНО появилась закрывающая скобка');
end;
if OpenBracketCount <> 0 then
raise Exception.Create('Не хватает закрывающих скобок');
end;
Ega23 (2012-04-17 17:06:00) [14]
> Начни с простой задачки. Используя стек проверь правильность
> расстановки скобок.
А я вот на первом курсе её без стека решил. Через опу. :)
Pavia (2012-04-17 16:06:00) [15]PS. Во входной строке могут встречаться 3 вида скобок {}[]()
Pavia (2012-04-17 16:04:00) [16]Начни с простой задачки. Используя стек проверь правильность расстановки скобок.
Inovet (2012-04-16 23:25:00) [17]> [18] Ivan (16.04.12 20:21)
> ПОДСКАЖИТЕ,ПОЖ-СТА КАК?
Сначала распарсить исходное в дерево, потом сделать преобразования и вывести результат обходом дерева.
Ega23 (2012-04-16 21:04:00) [18]
> ВЫ можете мне подкинуть программный код хотя бы,чтобы я
> на чём-то ориентировался.
Изложи задачу внятно.
Ivan (2012-04-16 20:21:00) [19]>надо что-то там преобразовать в символьном виде, а он вычислять пытается.
ПОДСКАЖИТЕ,ПОЖ-СТА КАК?
ВЫ можете мне подкинуть программный код хотя бы,чтобы я на чём-то ориентировался.
oldman (2012-04-12 08:04:00) [20]
> нерекурсивно вычислить арифметическое выражение
Очень мудро автор пытается это делать.
Сначала +, потом -, потом *...
Надо, вроде, как-бы наоборот.