Напишите программу на Java для оценки выражения в постфиксной нотации - класс структур данных и алгоритмов - PullRequest
0 голосов
/ 17 октября 2018

Это присвоение класса структур данных и алгоритмов.Я не хочу ответа, мне просто нужна помощь в том, с чего начать.Учитель читает из книги, которая немного помогает, но не сильно.Ниже приведен базовый код с пробелом, который я должен заполнить. Спасибо за любую помощь, которую вы можете мне оказать.

Стеки используются компиляторами для оценки выражений и генерации кода машинного языка.Люди обычно пишут выражения типа 3 + 4 и 7/9, в которых оператор (+ или / здесь) записывается между его операндами.Это называется фиксированной записью.Чтобы вычислить сложное выражение inx, компилятор сначала преобразует выражение в постфиксную запись, в которой оператор записывается справа от двух его операндов.Предыдущие выражения в выражениях будут появляться в постфиксных обозначениях как 3 4 + и 7 9 /, соответственно.Вам необходимо написать программу на Java для оценки выражения в постфиксной записи и отображения результата.Предположим, что выражение ТОЛЬКО содержит круглые скобки, однозначные целые числа (как операнды) и следующие операторы: «+», «-», «*», «/», «%».Выражения в инфиксной записи приведены в файле InfExpressions.txt.Соответствующие выражения в нотации post-xf приведены в файле Post ‑ xExpressions.txt.Ваша программа должна прочитать выражения из файла Post ‑ xExpressions.txt, оценить каждое выражение post-x и отобразить результат в табличном отчете.Частичная Java-программа приведена в файле Post ‑ xEvaluator.java.Заполните отсутствующий код в Post ‑ xEvaluator.java, чтобы программа завершилась и работала правильно.Тестовый драйвер приведен в файле TestDriver.java.Вам необходимо создать пакет с именем labs.lab3, чтобы включить все классы.Пример вывода программы приведен в файле SampleOutput.txt.

Выражения с инфиксами:

1 + 2 - 3 + 4 - 5
1 * 2 * 3 / 2 / 3
1 + 2 * 3 - 4 / 2
1 * 2 + 3 - 4 / 5
1 + 2 * 4 % 3 + 4
( 1 + 2 ) * 3 - 4 / 2
5 * ( 4 + 3 ) - 2 / 1
( ( 1 + 2 ) * 3 - 4 ) / 2
( 5 + 4 % 3 - 2 ) / 2
1 + 2 * 4 / ( 2 + 2 )

Выражения с постфиксами:

1 2 + 3 - 4 + 5 -
1 2 * 3 * 2 / 3 /
1 2 3 * + 4 2 / -
1 2 * 3 + 4 5 / -
1 2 4 * 3 % + 4 +
1 2 + 3 * 4 2 / -
5 4 3 + * 2 1 / -
1 2 + 3 * 4 - 2 /
5 4 3 % + 2 - 2 /
1 2 4 * 2 2 + / +

Пример вывода:

Postfix Expression            Evaluation Result             
1 2 + 3 - 4 + 5 -             -1                            
1 2 * 3 * 2 / 3 /             1                             
1 2 3 * + 4 2 / -             5                             
1 2 * 3 + 4 5 / -             5                             
1 2 4 * 3 % + 4 +             7                             
1 2 + 3 * 4 2 / -             7                             
5 4 3 + * 2 1 / -             33                            
1 2 + 3 * 4 - 2 /             2                             
5 4 3 % + 2 - 2 /             2                             
1 2 4 * 2 2 + / +             3                    

Неполный код:

package labs.lab3;

import java.util.Stack;
import java.util.EmptyStackException;

public class PostfixEvaluator
{
    private Stack<Integer> stack;
    private String expression;

    public PostfixEvaluator(String e)
    {
        stack = new Stack<Integer>();
        expression = e;
    }

        // Evaluate the postfix expression and return the evaluation result
    public int Evaluate()
    {
      /* Missing code start here */



          /* Missing code end here */
    }

    // Perform an operation on the two operands
    public int Calculate(int operand1, int operand2, char operation)
    {
        int result = 0;

        switch (operation)
        {
        case '+':
            result = operand1 + operand2;
            break;
        case '-':
            result = operand1 - operand2;
            break;
        case '/':
            result = operand1 / operand2;
            break;
        case '*':
            result = operand1 * operand2;
            break;
        case '%':
            result = operand1 % operand2;
            break;
        }
        return result;
    }
}

1 Ответ

0 голосов
/ 18 октября 2018

Алгоритм вычисления выражения postfix довольно прост.Идея состоит в том, что вы помещаете операнды в стек, пока не встретите оператора.Затем вы вытаскиваете два операнда из стека, применяете операнд и помещаете результат обратно в стек.Когда вы закончите, окончательный результат находится в стеке.

Например, с учетом выражения постфикса 4 5 + 3 *:

  1. Прочитайте '4'.Это операнд, поэтому поместите его в стек.Стек содержит [4].
  2. Читайте '5'.Это операнд, поэтому поместите его в стек.Стек содержит [5,4].
  3. Читайте '+'.Это оператор.Поп 5 и 4 из стека.Стек содержит [].
  4. Добавьте 5 и 4, давая 9. Положите его в стек.Стек содержит [9].
  5. Читайте «3».Это операнд, поэтому поместите его в стек.Стек содержит [3,9].
  6. Читать '*'.Это оператор.Поп 3 и 9 из стека.Стек содержит [].
  7. Умножьте 9 и 3, давая 27. Поместите его в стек.Стек содержит [27].
  8. Вы достигли конца ввода.Вывести результат из стека.

Если в стеке в любое время недостаточно операндов, возникает ошибка.Если в конце ввода у вас в стеке более одного значения, возникает ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...