Advertisement
Chris2o2

[APS] evaluatePostfix

Nov 24th, 2022 (edited)
393
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.90 KB | None | 0 0
  1. /*
  2. Да се напише алгоритам кој ќе врши евалуација на израз во постфикс нотација.
  3. На влез се чита низа од знаци за изразот (стринг), а на излез се печати вредноста на изразот по евалуацијата.
  4. Име на класата (Java): PostFixEvaluation
  5. */
  6. import java.io.BufferedReader;
  7. import java.io.InputStreamReader;
  8. import java.util.NoSuchElementException;
  9.  
  10. interface Stack<E> {
  11.  
  12.     // Elementi na stekot se objekti od proizvolen tip.
  13.  
  14.     // Metodi za pristap:
  15.  
  16.     public boolean isEmpty ();
  17.         // Vrakja true ako i samo ako stekot e prazen.
  18.  
  19.     public E peek ();
  20.         // Go vrakja elementot na vrvot od stekot.
  21.  
  22.     // Metodi za transformacija:
  23.  
  24.     public void clear ();
  25.         // Go prazni stekot.
  26.  
  27.     public void push (E x);
  28.         // Go dodava x na vrvot na stekot.
  29.  
  30.     public E pop ();
  31.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  32. }
  33.  
  34. class ArrayStack<E> implements Stack<E> {
  35.     private E[] elems;
  36.     private int depth;
  37.  
  38.     @SuppressWarnings("unchecked")
  39.     public ArrayStack (int maxDepth) {
  40.         // Konstrukcija na nov, prazen stek.
  41.         elems = (E[]) new Object[maxDepth];
  42.         depth = 0;
  43.     }
  44.  
  45.  
  46.     public boolean isEmpty () {
  47.         // Vrakja true ako i samo ako stekot e prazen.
  48.         return (depth == 0);
  49.     }
  50.  
  51.  
  52.     public E peek () {
  53.         // Go vrakja elementot na vrvot od stekot.
  54.         if (depth == 0)
  55.             throw new NoSuchElementException();
  56.         return elems[depth-1];
  57.     }
  58.  
  59.  
  60.     public void clear () {
  61.         // Go prazni stekot.
  62.         for (int i = 0; i < depth; i++)  elems[i] = null;
  63.         depth = 0;
  64.     }
  65.  
  66.  
  67.     public void push (E x) {
  68.         // Go dodava x na vrvot na stekot.
  69.         elems[depth++] = x;
  70.     }
  71.  
  72.  
  73.     public E pop () {
  74.         // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  75.         if (depth == 0)
  76.             throw new NoSuchElementException();
  77.         E topmost = elems[--depth];
  78.         elems[depth] = null;
  79.         return topmost;
  80.     }
  81. }
  82.  
  83. public class PostFixEvaluation {
  84.    
  85.      static int evaluate(int op1, int op2, char ch) {
  86.         switch (ch) {
  87.             case '*': return op2 * op1;
  88.             case '/': return op2 / op1;
  89.             case '+': return op2 + op1;
  90.             case '-': return op2 - op1;
  91.             default : return 0;
  92.         }
  93.     }
  94.  
  95.  
  96.     static int evaluatePostfix(char [] izraz, int n)
  97.     {
  98.         ArrayStack<String> e = new ArrayStack<String>(n);
  99.         char ch=0;
  100.         int op1,op2,result=0;
  101.         int i=0;
  102.         while(i<n)
  103.         {
  104.             if(izraz[i]=='+' || izraz[i]=='-' || izraz[i]=='/' || izraz[i]=='*')
  105.             {
  106.                 ch=izraz[i];
  107.                 op1 =Integer.parseInt(e.pop());
  108.                 op2 =Integer.parseInt(e.pop());
  109.                 result=evaluate(op1,op2,ch);
  110.                 e.push(Integer.toString(result));
  111.             }
  112.  
  113.             else
  114.             {
  115.                 final StringBuilder number= new StringBuilder();
  116.                 if(Character.isDigit(izraz[i]))
  117.                 {
  118.                     while (izraz[i] != ' ')
  119.                     {
  120.                         number.append(izraz[i]);
  121.                         i++;
  122.                     }
  123.  
  124.                     e.push(number.toString());
  125.                     continue;
  126.                 }
  127.             }
  128.             i++;
  129.         }
  130.  
  131.  
  132.         return result;
  133. }
  134.     public static void main(String[] args) throws Exception{
  135.          
  136.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  137.        
  138.         String expression = br.readLine();
  139.         char exp[] = expression.toCharArray();
  140.        
  141.         int rez = evaluatePostfix(exp, exp.length);
  142.         System.out.println(rez);
  143.        
  144.         br.close();
  145.  
  146.     }
  147.  
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement