Skip to content

Instantly share code, notes, and snippets.

@Yuri-M-Dias
Last active October 8, 2017 15:48
Show Gist options
  • Save Yuri-M-Dias/2c73c5f001f33597c5b9db48cd3853c4 to your computer and use it in GitHub Desktop.
Save Yuri-M-Dias/2c73c5f001f33597c5b9db48cd3853c4 to your computer and use it in GitHub Desktop.
Lista 6 - Exe 10
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