Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let input = [];
  2. for (let i = 2; i < process.argv.length; i++) {
  3.     if (process.argv[i].charAt(0) == "(") {
  4.         input.push("(");
  5.         input.push(process.argv[i].substring(1));
  6.     } else if (process.argv[i].charAt(process.argv[i].length - 1) == ")") {
  7.         input.push(process.argv[i].substring(0, process.argv[i].length - 1));
  8.         input.push(")");
  9.     } else
  10.     input.push(process.argv[i]);
  11. }
  12.  
  13. let binary = {
  14.     "(": 0,
  15.     ")": 0,
  16.     "+": 1,
  17.     "-": 1,
  18.     "*": 2,
  19.     "/": 2,
  20.     "S": 3,
  21. };
  22.  
  23. let stek = [];
  24. let result = [];
  25. for (let i = 0; i < input.length; i++) {
  26.     if (isNumeric(input[i]))
  27.         result.push(input[i])
  28.     else if (input[i] == "+" || input[i] == "-" ||
  29.              input[i] == "*" || input[i] == "/" ||
  30.              input[i] == "S") {
  31.         if (stek[stek.length - 1] == undefined || binary[input[i]] > binary[stek[stek.length - 1]])
  32.             stek.push(input[i]);
  33.         else {
  34.             result.push(stek.pop());
  35.             stek.push(input[i]);
  36.         }
  37.     } else if (input[i] == "(")
  38.         stek.push(input[i]);
  39.     else if (input[i] == ")") {
  40.         let position = -1;
  41.         for (let k = stek.length - 1; k > -1; k--)
  42.             if (stek[k] == "(") {
  43.                 position = k;
  44.                 break;
  45.             }
  46.         if (position == -1) {
  47.             console.log("Некоректное выражение скобок");
  48.             break;
  49.         }
  50.         for (let k = stek.length - 1; k > position; k--)
  51.             result.push(stek.pop());
  52.         stek.pop();
  53.     } else {
  54.         console.log("Неверный формат записи");
  55.         break;
  56.     }
  57. }
  58. while (stek.length != 0)
  59.     result.push(stek.pop());
  60. process.stdout.write("Выражение в обратной польской записи: ");
  61. for (let i = 0; i < result.length; i++)
  62.     process.stdout.write(result[i] + " ")
  63. process.stdout.write("\n");
  64. let newStek = [];
  65. for (let i = 0; i < result.length; i++) {
  66.     if (isNumeric(result[i]))
  67.         newStek.push(result[i]);
  68.     if (result[i] == "+")
  69.         newStek[newStek.length - 2] = +newStek[newStek.length - 2] + +newStek.pop();
  70.     if (result[i] == "-")
  71.         newStek[newStek.length - 2] = +newStek[newStek.length - 2] - +newStek.pop();
  72.     if (result[i] == "*")
  73.         newStek[newStek.length - 2] = +newStek[newStek.length - 2] * +newStek.pop();
  74.     if (result[i] == "/")
  75.         newStek[newStek.length - 2] = +newStek[newStek.length - 2] / +newStek.pop();
  76.     if (result[i] == "S")
  77.         newStek[newStek.length - 2] = Math.pow(+newStek[newStek.length - 2], +newStek.pop());
  78. }
  79. process.stdout.write("Результат подсчёта этого выражения: " + newStek[0]);
  80.  
  81. function isNumeric(n) {  
  82.    return !isNaN(parseFloat(n)) && isFinite(n);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement