Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitriy Nesmachny                    2:5020/2065.609 07 Oct 2001  10:33:04
 To : Evgeniy Jirnov
 Subject : Паpсинг yнаpных опеpатоpов
 -------------------------------------------------------------------------------- 
 
 
 Пятница 28 Сен 2001 16:23:38, Evgeniy Jirnov -> Andrew V Sovgir:
 
  EJ>>> там и как... А как сделать такое: Tg(Sin(2+2)+Cos(3+2))
  AS>> Я бы для начала советовал почитать об обpатной польской
  AS>> нотации.
  AS>> Скоpее всего, тогда все бyдет понятно.
 
 EJ> 2All: Кстати ни у кого нет алгоритма преобразования из
 EJ> обычной записи в
 EJ> польскую?
 
 1. на входе у тебя строка выражения со скобками, операторами и пр.
 2. заводишь стек для операций и буфер для выходной строки
 3. начинаешь считывать входную строку с первого символа
 4. если это число - пихаешь его в выходную строку
    если это "(" - пихаешь ее в стек
    если это ")" - выталкиваешь операции из стека в строку пока не встретишь
 "(", ее тоже изымаешь из стека, хотя в строку не отправляешь
    если это конец строки то все что есть на стеке выпихиваешь в строку и выход.
    если это операция - проверяешь что на стеке:
      4.1 если стек пуст или на вершине "(" - пихаешь операцию в стек
      4.2 если приоритет операции на вершине стека >= той, которую ты
 рассматриваешь - выпихиваешь одну операцию из стека в выходную строку и гоуту 4
 5. гоуту 3     
 
   Пример: tg (sin (2+2)+cos(2+3))
   tg   в стек
   (    в стек
   sin  в стек
   (    в стек
   2    в строку
   +    в стек
   2    в строку
   )    + из стека в строку, ( в стеке уничтожить
   +    приоритет + < чем у sin, значит sin в строку, + в стек
   cos  приоритет cos > чем у +, значит cos в стек
   (    в стек
   2    в строку
   +    в стек
   3    в строку
   )    + из стека в строку (до первой скобки)
   )    cos, + из стека в строку (до второй скобки)
   eol  конец строки: все из стека в строку, там только tg
 
   результат: 2 2 + sin 2 3 + cos + tg
   считать так: проходишь по строке, все числа в стек, встретив операцию
 изымаешь из стека нужное число операндов, выполняешь операцию и результат
 кладешь на стек. В конце на стеке будет результат.
 С уважением, Dmitriy.
 
 --- Lara Croft v.4.50
  * Origin: #21004011014001FF2AEDB0C9 ;-) (2:5020/2065.609)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Парсинг унарных операторов   Evgeniy Jirnov   22 Sep 2001 12:19:44 
 Парсинг унарных операторов   Yuri Khan   23 Sep 2001 09:30:57 
 Re: Парсинг унарных операторов   Pavel Fomin   23 Sep 2001 10:05:08 
 Паpсинг yнаpных опеpатоpов   Andrew V Sovgir   23 Sep 2001 21:53:42 
 Паpсинг yнаpных опеpатоpов   Evgeniy Jirnov   28 Sep 2001 17:23:38 
 Re: Паpсинг yнаpных опеpатоpов   Alexey Desyatnik   29 Sep 2001 09:28:30 
 Паpсинг yнаpных опеpатоpов   Dmitriy Nesmachny   07 Oct 2001 10:33:04 
 Паpсинг yнаpных опеpатоpов   Evgeniy Jirnov   18 Oct 2001 11:31:36 
 Паpсинг yнаpных опеpатоpов   Dmitriy Nesmachny   21 Oct 2001 11:13:12 
 Re: Паpсинг yнаpных опеpатоpов   Vadim Goncharov   25 Sep 2001 22:23:14 
Архивное /ru.algorithms/5356045df1b0.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional