Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program polska;
- const SIZE = 10;
- type
- stack = array[0..SIZE] of integer;
- opstack = array[0..SIZE] of char;
- var i, j, len, n, nStackPointer, opStackPointer:integer;
- numberStack: stack;
- operatorStack: opstack;
- source : string;
- //==============================================================================
- function evalExpression(var nStack, oStack: integer) : integer; forward;
- procedure fillStack;
- var i, temp: integer;
- begin
- nStackPointer := 0;
- opStackPointer := 0;
- for i := len downto 1 do
- case source[i] of
- '+','-','*','/':
- begin
- operatorStack[opStackPointer] := source[i];
- Inc(opStackPointer);
- Temp := evalExpression(nStackPointer, opStackPointer);
- numberStack[nStackPointer] := Temp;
- Inc(nStackPointer);
- end;
- '0'..'9':
- begin
- numberStack[nStackPointer] := Ord(source[i]) - Ord('0');
- Inc(nStackPointer);
- end;
- end;
- end;
- //==============================================================================
- function evalExpression(var nStack, oStack : integer) : integer;
- var result, i, j: integer;
- tmp : char;
- begin
- i := numberStack[nStack - 1];
- j := numberStack[nStack - 2];
- tmp := operatorStack[oStack - 1];
- Dec(nStack, 2);
- Dec(oStack);
- case tmp of
- '*': result := i * j;
- '+': result := i + j;
- '-': result := i - j;
- '/': result := i div j;
- end;
- evalExpression := result;
- end;
- //===============================================================================
- begin
- ReadLn(source);
- len := Length(source);
- fillStack;
- writeln(numberStack[0]);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement