Advertisement
Guest User

Untitled

a guest
May 26th, 2015
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.66 KB | None | 0 0
  1. program polska;
  2.  
  3. const SIZE = 10;
  4. type
  5.     stack = array[0..SIZE] of integer;
  6.     opstack = array[0..SIZE] of char;
  7. var i, j, len, n, nStackPointer, opStackPointer:integer;
  8.     numberStack: stack;
  9.     operatorStack: opstack;
  10.     source : string;
  11.    
  12. //==============================================================================
  13. function evalExpression(var nStack, oStack: integer) : integer; forward;
  14.  
  15.  
  16. procedure fillStack;
  17. var i, temp: integer;
  18. begin
  19.   nStackPointer := 0;
  20.   opStackPointer := 0;
  21.   for i := len downto 1 do
  22.     case source[i] of
  23.     '+','-','*','/':
  24.         begin
  25.           operatorStack[opStackPointer] := source[i];
  26.           Inc(opStackPointer);
  27.           Temp := evalExpression(nStackPointer, opStackPointer);
  28.           numberStack[nStackPointer] := Temp;
  29.             Inc(nStackPointer);      
  30.         end;
  31.       '0'..'9':
  32.         begin
  33.           numberStack[nStackPointer] := Ord(source[i]) - Ord('0');
  34.           Inc(nStackPointer);
  35.         end;
  36.       end;
  37. end;
  38.  
  39. //==============================================================================
  40.  
  41. function evalExpression(var nStack, oStack : integer) : integer;
  42.     var result, i, j: integer;
  43.         tmp : char;
  44.     begin
  45.       i := numberStack[nStack - 1];
  46.       j := numberStack[nStack - 2];
  47.       tmp := operatorStack[oStack - 1];
  48.       Dec(nStack, 2);
  49.         Dec(oStack);
  50.       case tmp of
  51.         '*': result := i * j;
  52.         '+': result := i + j;
  53.         '-': result := i - j;
  54.         '/': result := i div j;
  55.       end;
  56.     evalExpression := result;
  57.     end;
  58. //===============================================================================
  59. begin
  60.   ReadLn(source);
  61.   len := Length(source);
  62.   fillStack;
  63.   writeln(numberStack[0]);
  64. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement