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

Konwersja z ONP na zapis zwykly

Ostatnio zmodyfikowano 2017-04-23 12:42
Autor Wiadomość
cyynder
Temat założony przez niniejszego użytkownika
Konwersja z ONP na zapis zwykly
» 2017-04-23 12:31:23
Witam serdecznie mam do zrobienia zadanie z informatyki w którym na podstawie kodu programu z konwersja na odwrotna notacje polska mam napisac program odwrotny. Tresc zadania:

Napisz program, który wyrażenie zapisane w odwrotnej notacji polskiej
zamieni na wyrażenie zapisane z nawiasami i działaniami, np.

na wejściu mamy: 5 7 2 8 1 3 ^ * / + -

na wyjściu mamy: (5-(7+(2/(8*(1^3)))))

KOD porgramu wyglada nastepujaco:
C/C++
#include <iostream>
#include <sstream>
#include <vector>
#include <cmath>
using namespace std;
vector < double > stos;
void wypisz_stos();
double onp( string st );
int main() {
    //string s = "3 2 + 4 * "; // 20
    //string s = "6 3 - 2 ^ 2 1 + 3 ^ * 4 / 2 + ";
    string s = "5 7 2 8 1 3 ^ * / + -";
    cout << "Wynik: " << onp( s ); // wywo�anie funkcji onp dla wyra�enia ze stringa s
    return 0;
}
//---------------------------------------------------
void wypisz_stos() {
    for( int i = 0; i < stos.size(); i++ ) cout << " " << stos[ i ];
   
    cout << endl;
}
//---------------------------------------------------
double onp( string st ) {
    istringstream iss; // deklaracja strumienia
    iss.str( st ); // wstawienie stringa st do strumienia iss
    string ss; // zmienna do czytania ze strumienia do spacji
    cout << "\n( element )\t( na/z stos, operacja )\t( zawartosc stosu )\n";
    double val; // zmienna potrzebna do konwersji ze stringa
    while( iss >> ss ) // dop�ki co� jest w strumieniu czytaj
    {
        cout << ss << "\t\t";
        if( istringstream( ss ) >> val ) { // konwersja pomy�lna na double
            stos.push_back( val );
            cout << "na\t\t\t\t";
        }
        else { // konwersja nieudana, czyli wczytano operator: +,-, ...
            double c2 = stos.back(); // drugi czynnik dla operatora
            stos.pop_back(); // usuni�cie ze stosu
            cout << "z ";
            double c1 = stos.back(); // pierwszy czynnik dla operatora
            stos.pop_back(); // usuni�cie ze stosu
            cout << "z\t";
            cout << c1 << ss << c2 << "\t\t\t";
            if( ss == "+" ) stos.push_back( c1 + c2 ); //wstawienie na stos
           
            if( ss == "*" ) stos.push_back( c1 * c2 );
           
            if( ss == "-" ) stos.push_back( c1 - c2 );
           
            if( ss == "/" ) stos.push_back( c1 / c2 );
           
            if( ss == "^" ) stos.push_back( pow( c1, c2 ) );
            // cout << "na";
        }
        wypisz_stos();
    } // do while
    return stos.front(); // tylko jeden element pozosta� na stosie
}
[ / i ]
P-160399
pekfos
» 2017-04-23 12:42:37
A problem masz z..? Zamiast na liczbach, operuj na napisach.
P-160400
« 1 »
  Strona 1 z 1