Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wypisywanie i obliczanie wartości ONP. Problem przy obliczaniu

Ostatnio zmodyfikowano 2014-01-25 14:35
Autor Wiadomość
baca1616
Temat założony przez niniejszego użytkownika
Wypisywanie i obliczanie wartości ONP. Problem przy obliczaniu
» 2014-01-25 14:35:29
Otóż mam problem. Mam do oddania program zamieniający zwykłe działanie np 4+4= na ONP 4 4 +  =. wczytuje i zamienia. Druga czesc tez działa jesli wpisze sie do drugiej petli recznie wartosc wyrazenia w postaci ONP. Ale tak to nie przekazuje zmienej el2 do drugiej petli czy cos i zawiesza sie. Dane trzeba wprowadzac po spacji 4 + 4 = .
Ma ktos jakies pomysły jak przekazac do drugiej funkcji ?

Odrazu mówie nie jestem jakims ekstra programista. Wiec wytłumaczyć najlepiej jak chłopu na miedzy.



C/C++
#include <iostream>
#include <sstream>
#include <cstring>
#include <fstream>

using namespace std;

int main()
{
    ostringstream ss;
    char stos[ 256 ];
    int stos2[ 256 ];
    char el[ 256 ];
    int ws = 0, dl;
   
   
    do
    {
        cin >> el;
       
        if( el[ 0 ] >= '0' && el[ 0 ] <= '9' ) ss << el << " ";
        else
        switch( el[ 0 ] )
        {
        case '+':;
        case '-': while( ws && stos[ ws - 1 ] != '(' ) ss << stos[ --ws ] << " ";
           
            stos[ ws++ ] = el[ 0 ];
            break;
        case '*':;
        case '/': while( ws && stos[ ws - 1 ] != '(' &&
            stos[ ws - 1 ] != '+' &&
            stos[ ws - 1 ] != '-' ) ss << stos[ --ws ] << " ";
           
            stos[ ws++ ] = el[ 0 ];
            break;
        case '^': while( ws && stos[ ws - 1 ] == '^' ) ss << stos[ --ws ] << " ";
           
            stos[ ws++ ] = el[ 0 ];
            break;
        case '(': stos[ ws++ ] = '(';
            break;
        case ')': while( stos[ ws - 1 ] != '(' ) ss << stos[ --ws ] << " ";
           
            ws--;
            break;
        case '=': while( ws ) ss << stos[ --ws ] << " ";
           
            ss << "=";
            break;
        }
       
    } while( el[ 0 ] != '=' );
   
   
   
    cout << ss.str().c_str();
    cout << endl;
   
    //obliczanie ONP
    string x;
    x = ss.str().c_str();
    dl = x.length();
    cout << "Dlugosc stringa: " << dl;
    char * el2 = new char[ dl ];
    strcpy( el2, x.c_str() );
    ws = 0;
    int a, b, w;
    do
    {
       
       
        if( el2[ 0 ] >= '0' && el2[ 0 ] <= '9' )
        {
            a = b = 0;
            do a = 10 * a + el[ b++ ] - 48; while( el2[ b ] );
           
            stos[ ws++ ] = a;
        }
        else if( el2[ 0 ] == '=' ) cout << stos[ --ws ] << endl;
        else
        {
            b = stos[ --ws ]; a = stos[ --ws ];
           
            switch( el2[ 0 ] )
            {
            case '+': w = a + b; break;
            case '-': w = a - b; break;
            case '*': w = a * b; break;
            case '/': w = a / b; break;
            case '^': w = 1;
                while( b-- ) w *= a;
               
                break;
            }
           
            stos[ ws++ ] = w;
        }
    } while( el2[ 0 ] != '=' );
   
   
   
   
   
   
   
   
   
    return 0;
}

[/b]
P-103165
« 1 »
  Strona 1 z 1