Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для videolord
49 / 15 / 2
Регистрация: 20.02.2011
Сообщений: 152

Обратная польская нотация

25.04.2011, 20:03. Показов 7922. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.util.LinkedList;
public class PPN {
  static boolean isDelim(char c) {
  return c == ' ';
  }
  static boolean isOperator(char c) {
  return c == '+' || c == '-' || c == '*' || c == '/' || c == '%';
  }
  static int priority(char op) {
    switch (op) {
    case '+':
    case '-':
      return 1;
    case '*':
    case '/':
    case '%':
      return 2;
    default:
      return -1;
    }
  }
  static void processOperator(LinkedList<Integer> st, char op) {
    int r = st.removeLast();
    int l = st.removeLast();
    switch (op) {
    case '+':
      st.add(l + r);
      break;
    case '-':
      st.add(l - r);
      break;
    case '*':
      st.add(l * r);
      break;
    case '/':
      st.add(l / r);
      break;
    case '%':
      st.add(l % r);
      break;
    }
  }
    public static int eval(String s) {
    LinkedList<Integer> st = new LinkedList<Integer>();
    LinkedList<Character> op = new LinkedList<Character>();
    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);
      if (isDelim(c))
        continue;
      if (c == '(')
        op.add('(');
      else if (c == ')') {
       while (op.getLast() != '(')
        processOperator(st,op.removeLast());       
        op.removeLast();     
      } else if (isOperator(c)) {
        while (!op.isEmpty() && priority(op.getLast()) >= priority(c))
        processOperator(st, op.removeLast());
        op.add(c);      
      } else {
        String operand = "";
        while (i < s.length() && Character.isDigit(s.charAt(i)))
        operand += s.charAt(i++);        
        --i;        
        st.add(Integer.parseInt(operand));
      }
    }    
    while (!op.isEmpty())
      processOperator(st, op.removeLast());
    return st.get(0);
  }
 
  public static void main(String[] args) throws Exception {
    String exp = "7+(5*2*8)";
   System.out.println(eval(exp));
  
  }
}
3
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.04.2011, 20:03
Ответы с готовыми решениями:

Обратная польская нотация
Всем привет, хотел написать программу которая бы преобразовывала формулу в обратную польскую нотацию, но она не работает. Подскажите, где...

Обратная польская запись
Доброго времени суток,делаю постфиксный калькулятор.Основан на алгоритме Дейкстры,приведение к обратной польской нотации - ОПН и вычисление...

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2011, 20:03
Помогаю со студенческими работами здесь

Польская запись на java
Здравствуйте, пример польской записи, вы бы не могли помочь мне разобрать в коде, прокомментировать его пожалуйста static boolean...

Ошибка в калькуляторе (польская запись)
Здравствуйте,собственно есть такой код,который вычисляет значение выражения import java.util.LinkedList; /** * */ ...

Обратная польская нотация
Как имея вид выражения в записи обратной польской нотации правильно расставить скобки?

Обратная Польская Нотация
Пытался реализовать ОПН....ничего не вышло,обращаюсь за помощью: в чем ошибка(и)? #include &lt;iostream&gt; using namespace std; ...

Обратная Польская Нотация
помогите перевести в опн, реализация не нужна, просто описание самих действий на доступном языке. выражение такое: ((2+1)/1+(8*1-5)*6+3) ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru