ОПЗ (обратная польская запись)

Тема в разделе "Общие вопросы по С и С++", создана пользователем Student_TRTU, 9 июн 2007.

  1. Student_TRTU

    Student_TRTU Гость

    Здравствуйте вот нашел в нете алгоритм ОПЗ и захотелось его освоить. Но не могу понять как можно сделать чтобы по данной ОПЗ решать примеры.
    Например:
    Нам в дана такая строчка 3-4*(1+2) после превода получилась вот такая запись 3412+*- как теперь из этой записи символы перевести в числа и операции и решить этот пример чтобы в итоге получилось
    -9.
     
  2. Pasha

    Pasha Гость

    Очень просто. идешь по строчке слева направо.
    Если число - ложишь его в стэк.
    Если операция - применяешь ее к 2-м верхним элементам стека, результат помещаешь обратно в стек
    Код (Text):
    Шаг Элемент Стэк
    1   3     3
    2   4     3 4
    3   1     3 4 1
    4   2     3 4 1 2
    5   +     3 4 3(1+2)
    6   *     3 12(4*3)
    7   -     -9(3-12)
     
  3. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    И не понимай слово запись буквально - конечно из строки "3412+*-" никак не выделишь числа - 4 числа там лежат или только 1? Польская запись определяет порядок значений, а не форматирование в строке. Если тебе надо именно в строку представить результат, разделяй значения хотя бы пробелом - чтобы можно было потом распарсить ее.
     
  4. Student_TRTU

    Student_TRTU Гость

    Большое спасибо!!! Все у меня получилось.
     

Поделиться этой страницей