Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.60
matrix
Сообщений: n/a
#1

польская инверсная запись. Помогите с алгоритмом. - C++

28.11.2007, 18:30. Просмотров 6133. Ответов 1
Метки нет (Все метки)

Не знаю как организовать алгоритм польской инверсной записи на С++. Если кто-то знает помогите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2007, 18:30     польская инверсная запись. Помогите с алгоритмом.
Посмотрите здесь:

C++ Польская запись
польская запись C++
C++ Польская инверсная запись числа С++
C++ люди добрые! нужно программа инверсная запись чисел, запись из инверсной в обычную
Обратная польская запись C++
Обратная польская запись C++
C++ Обратная польская запись
Польская инверсная нотация C++
Префиксная польская запись C++
C++ Обратная польская запись
Программа построения ПОЛИЗ(польская инверсная запись) C++
Обратная польская запись C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mik-a-el
CyberForum Owner
56926 / 36676 / 231
Регистрация: 10.04.2006
Сообщений: 12,643
28.11.2007, 18:39     польская инверсная запись. Помогите с алгоритмом. #2
Пример:
Одной из форм представления выражений является польская инверсная запись, задающая выражение так, что операции в нем записываются в порядке выполнения, а операнды находятся непосредственно перед операцией.

Например, выражение

(6+8)*5-6/2

в польской инверсной записи имеет вид

6 8 + 5 * 6 2 / -

Особенность такой записи состоит в том, что значение выражения можно вычислить за один просмотр записи слева направо, используя стек, который до этого должен быть пуст. Каждое новое число заносится в стек, а операции выполняются над верхними элементами стека, заменяя эти элементы результатом операции. Для приведенного выражения динамика изменения стека будет иметь вид

S = < >; <6>; <6,8>; <14>; <14,5>; <70>;
<70,6>; <70,6,2>; <70,3>; <67>.

Ниже приведена функция eval, которая вычисляет значение выражения, заданного в массиве m в форме польской инверсной записи, причем m[i]>0 означает неотрицательное число, а значения m[i]<0 - операции. В качестве кодировки операций сложения, вычитания, умножения и деления выбраны отрицательные числа -1, -2, -3, -4. Для организации последовательного хранения стека используется внутренний массив stack. Параметрами функции являются входной массив a и его длина l.

Код
    float eval (float *m, int l)
    { int p,n,i;
      float stack[50],c;
       for(i=0; i < l ;i++)
       if ((n=m[i])<0)
         {  c=st[p--];
            switch(n)
            { case -1:  stack[p]+=c;  break;
              case -2:  stack[p]-=c;  break;
              case -3:  stack[p]*=c;  break;
              case -4:  stack[p]/=c;
            }
         }
       else stack[++p]=n;
       return(stack[p]);
    }
Yandex
Объявления
28.11.2007, 18:39     польская инверсная запись. Помогите с алгоритмом.
Ответ Создать тему
Опции темы

Текущее время: 21:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru