Título: Evaluación de una expresión postfija Publicado por: sinhue en 1 Octubre 2016, 05:09 am Buen día todos vengo aquí por que tengo hacer un programa que evalué una expresión postfija, pero no se por que truena al entrar a unos de los ciclos de evaluación he estado utilizando varios métodos para lograrlo y en todos no ha funcionado, anexo el código y toda la ayuda que me puedan brindar la agradezco mucho ;D :
A una condición para este programa es que se debe de seguir estrictamente el algoritmo de una expresión infija-postfija, pero la función de creación funciona satisfactoriamente el problema ocurre en la evaluación, todo lo comentado es código de prueba o métodos que probé y tampoco funcionaron double evaluapost (vector<string> p) { stack<double> pila; char e; string s; int j = 0,k = 0,l = 0; unsigned int i = 0,m; double op1, op2, n, r; string::iterator aux; //int d; /*for (m= 0; m < p.size(); m++) { cout << p.at(m); }*/ //cout << endl; while (i < p.size()) { s = p.at(i); e = s.at(j); if (e >= '0' && e <= '9') { /*aux = s.begin(); cout << *aux << endl; cout << e << endl; cin >> d;*/ /*while (aux < s.end() && e != '.') { k++; e = s.at(k); ++aux; }*/ cout << e << endl; for (m = 0; (m < s.size()) && (l == 0); m++) { if (e != '.') { k++; e = s.at(k); } else { l = 1; k++; } /*cout << l << endl; cout << k << endl; cout << m << endl; cout << s.size() << endl; aqui entra pero truena */ } l = 0; e = s.at(j); cout << k << endl; //aux = s.begin(); /*cout << *aux << endl; cout << k << endl; cin >> d;*/ /*while (aux <= s.end()) { if (e != '.' && l == 0) { n += (e - '0')*pow(10, k-j-1); } else if (e == '.') { l = 1; } else { n += (e - '0')*pow(10, k-j); } j++; e = s.at(j); ++aux; }*/ for (aux = s.begin(); aux != s.end(); ++aux) { if (e != '.' && l == 0) { n += (e - '0')*pow(10, k-j-1); } else if (e == '.') { l = 1; } else { n += (e - '0')*pow(10, k-j); } j++; e = s.at(j); } cout << n << endl; pila.push(n); } else if (e >= 'A' && e <= 'D') { cout << "Introduzca valor de la variable: "; cin >> n; pila.push(n); } else if (e == '+' || e == '-' || e == '*' || e == '/') { op2 = pila.top(); pila.pop(); op1 = pila.top(); pila.pop(); switch (e) { case '+': r = op1 + op2; break; case '-': r = op1 - op2; break; case '*': r = op1*op2; break; case '/': if (op2 != 0) { r = op1/op2; } else { cout << "¡Error!" << endl; cout << "Una de las operaciones es invalida" << endl; r = 0; } break; } } i++; j = 0; k = 0; l = 0; } return r; } |