elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Evaluación de una expresión postfija
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Evaluación de una expresión postfija  (Leído 4,727 veces)
sinhue

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Evaluación de una expresión postfija
« 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;
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Quitar mensaje de Evaluacion a dll
Ingeniería Inversa
jwmoreira 1 2,689 Último mensaje 11 Febrero 2009, 01:17 am
por Amerikano|Cls
Notas de evaluación Java
Java
Meta 7 5,955 Último mensaje 17 Mayo 2012, 04:20 am
por RyogiShiki
Como crear un agoritmo que convierta una expresion postfija a prefija??
Programación C/C++
milber10 0 2,904 Último mensaje 16 Noviembre 2011, 21:44 pm
por milber10
evaluacion postfija
Java
BTO911 1 9,119 Último mensaje 29 Octubre 2013, 19:37 pm
por egyware
Ayuda con la conversión de notación infija a postfija
Programación C/C++
GominaTilted 1 3,191 Último mensaje 18 Abril 2019, 07:36 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines