Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Символьное дифференцирование [D7]


Страницы:   1 2

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]


> нерекурсивно вычислить арифметическое выражение


Очень мудро автор пытается это делать.
Сначала +, потом -, потом *...
Надо, вроде, как-бы наоборот.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо