Last active
October 8, 2017 15:48
-
-
Save Yuri-M-Dias/2c73c5f001f33597c5b9db48cd3853c4 to your computer and use it in GitHub Desktop.
Lista 6 - Exe 10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let operandos = "+-/*^"; | |
let getPrioridade = (caracter) => { | |
if(caracter === "^") { | |
return 5; | |
} | |
if(caracter === "*" || caracter === "/") { | |
return 4; | |
} | |
if(caracter === "+" || caracter === "-") { | |
return 3; | |
} | |
return 2; | |
}; | |
let isUmOperando = (caracter) => { | |
return operandos.split("").find((x) => x === caracter); | |
}; | |
function algo_paren(entrada) { | |
var pilha_saida = []; | |
var pilha_operadores = []; | |
entrada | |
.split('') | |
.forEach((simbolo_lido) => { | |
if(!isUmOperando(simbolo_lido)) { | |
pilha_saida.push(simbolo_lido); | |
} else if(simbolo_lido === "(") { | |
pilha_operadores.push(simbolo_lido); | |
} else if(isUmOperando(simbolo_lido)) { | |
let simbolo_topo = pilha_operadores.pop(); | |
let prioridade_simbolo_topo = getPrioridade(simbolo_topo); | |
let prioridade_simbolo_lido = getPrioridade(simbolo_lido); | |
while(prioridade_simbolo_topo >= prioridade_simbolo_lido) { | |
pilha_saida.push(simbolo_topo); | |
simbolo_topo = pilha_operadores.pop(); | |
prioridade_simbolo_topo = getPrioridade(simbolo_topo); | |
} | |
pilha_operadores.push(simbolo_topo); | |
pilha_operadores.push(simbolo_lido); | |
} else if(simbolo_lido === ")") { | |
let simbolo_topo = pilha_operadores.pop(); | |
while(simbolo_topo !== "("){ | |
pilha_saida.push(simbolo_topo); | |
simbolo_topo = pilha_operadores.pop(); | |
} | |
//Remove "(" da pilha | |
//pilha_operadores.pop(); | |
} | |
}); | |
while(pilha_operadores.length > 0) { | |
let elemento = pilha_operadores.pop(); | |
pilha_saida.push(elemento); | |
} | |
return pilha_saida.join(''); | |
} | |
function test(entrada, esperado) { | |
let result = algo_paren(entrada); | |
if(result === esperado) { | |
console.log(["Sucesso", result, esperado]); | |
}else { | |
console.log(["Falha", result, esperado]); | |
} | |
} | |
var exp_original = "A*B+C*D^E/F-G*H"; | |
var exp_resultado = "AB*CDE^*F/+GH*-"; | |
test(exp_original, exp_resultado); | |
var exp_original_paren = "(B+(B^2-4*A*C)^R)/(2*A)"; | |
var exp_resultado_paren = "BB2^4A*C*-R^+2A*/"; | |
test(exp_original_paren, exp_resultado_paren); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment