Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let input = [];
- for (let i = 2; i < process.argv.length; i++) {
- if (process.argv[i].charAt(0) == "(") {
- input.push("(");
- input.push(process.argv[i].substring(1));
- } else if (process.argv[i].charAt(process.argv[i].length - 1) == ")") {
- input.push(process.argv[i].substring(0, process.argv[i].length - 1));
- input.push(")");
- } else
- input.push(process.argv[i]);
- }
- let binary = {
- "(": 0,
- ")": 0,
- "+": 1,
- "-": 1,
- "*": 2,
- "/": 2,
- "S": 3,
- };
- let stek = [];
- let result = [];
- for (let i = 0; i < input.length; i++) {
- if (isNumeric(input[i]))
- result.push(input[i])
- else if (input[i] == "+" || input[i] == "-" ||
- input[i] == "*" || input[i] == "/" ||
- input[i] == "S") {
- if (stek[stek.length - 1] == undefined || binary[input[i]] > binary[stek[stek.length - 1]])
- stek.push(input[i]);
- else {
- result.push(stek.pop());
- stek.push(input[i]);
- }
- } else if (input[i] == "(")
- stek.push(input[i]);
- else if (input[i] == ")") {
- let position = -1;
- for (let k = stek.length - 1; k > -1; k--)
- if (stek[k] == "(") {
- position = k;
- break;
- }
- if (position == -1) {
- console.log("Некоректное выражение скобок");
- break;
- }
- for (let k = stek.length - 1; k > position; k--)
- result.push(stek.pop());
- stek.pop();
- } else {
- console.log("Неверный формат записи");
- break;
- }
- }
- while (stek.length != 0)
- result.push(stek.pop());
- process.stdout.write("Выражение в обратной польской записи: ");
- for (let i = 0; i < result.length; i++)
- process.stdout.write(result[i] + " ")
- process.stdout.write("\n");
- let newStek = [];
- for (let i = 0; i < result.length; i++) {
- if (isNumeric(result[i]))
- newStek.push(result[i]);
- if (result[i] == "+")
- newStek[newStek.length - 2] = +newStek[newStek.length - 2] + +newStek.pop();
- if (result[i] == "-")
- newStek[newStek.length - 2] = +newStek[newStek.length - 2] - +newStek.pop();
- if (result[i] == "*")
- newStek[newStek.length - 2] = +newStek[newStek.length - 2] * +newStek.pop();
- if (result[i] == "/")
- newStek[newStek.length - 2] = +newStek[newStek.length - 2] / +newStek.pop();
- if (result[i] == "S")
- newStek[newStek.length - 2] = Math.pow(+newStek[newStek.length - 2], +newStek.pop());
- }
- process.stdout.write("Результат подсчёта этого выражения: " + newStek[0]);
- function isNumeric(n) {
- return !isNaN(parseFloat(n)) && isFinite(n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement