Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema esecuzione programma
Forum - C/C++ - Problema esecuzione programma

Avatar
linux_xii (Normal User)
Newbie


Messaggi: 5
Iscritto: 15/06/2012

Segnala al moderatore
Postato alle 17:30
Venerdì, 15/06/2012
Salve a tutti..Sono nuovo nel forum e scusate di eventuali errori..
Sto implementando il programma del RPN in c++ ma a se provo a mettere un operazione con più operatori il programma crasha e non capisco il perchè vi posto il codice cosi da poter controllare voi cos'e che non va.
Grazie Mille :D
Codice sorgente - presumibilmente C++

  1. #include <QtCore/QCoreApplication>
  2. #include <iostream>
  3. #include <stdio.h>
  4. #include <stack>
  5. using namespace std;
  6. int Cont_Liv(char Espr,char Stack);
  7. int main()
  8. {
  9.  
  10.     stack<char> Operatori;
  11.     char Espressione[30];
  12.     cin >>Espressione;
  13.     int count=0;
  14.     int i=0;
  15.     while(Espressione[i]!='\0')
  16.     {
  17.         if(Espressione[i]=='+' || Espressione[i]=='-' || Espressione[i]=='*' || Espressione[i]=='/'|| Espressione[i]=='(')
  18.         {
  19.             if(Espressione[i]=='(' || Espressione[i]==')')
  20.             {
  21.                 count=0;
  22.                 Operatori.push(Espressione[i]);
  23.             }
  24.             else
  25.             {
  26.                 count ++;
  27.                 if(count <2)
  28.                 {
  29.                     Operatori.push(Espressione[i]);
  30.                 }
  31.             }
  32.             if(count >=2)
  33.             {
  34.                 if(Cont_Liv(Espressione[i],Operatori.top())==1)
  35.                 {
  36.                     if(Operatori.top() != '(')
  37.                     {
  38.                         cout<<Operatori.top();
  39.                     }
  40.                     Operatori.pop();
  41.                 }
  42.                 else
  43.                 {
  44.                     Operatori.push(Espressione[i]);
  45.                 }
  46.             }
  47.  
  48.  
  49.         }
  50.         else if(Espressione[i]==')' )
  51.         {
  52.             do
  53.             {
  54.                 if(Operatori.top()!='(')
  55.                 {
  56.                     cout <<Operatori.top();
  57.                 }
  58.                 Operatori.pop();
  59.             }while(Operatori.top()=='(');  //<--è qui che il programma mi crasha..
  60.         }
  61.         else
  62.         {
  63.             if(Espressione[i]!='(')
  64.             {
  65.                 cout <<Espressione[i];
  66.             }
  67.         }
  68.         i++;
  69.     }
  70.     do
  71.     {
  72.         if(Operatori.top()!='(')
  73.         {
  74.             cout <<Operatori.top();
  75.         }
  76.         Operatori.pop();
  77.     }while(!Operatori.empty());
  78.     cout <<endl;
  79. }
  80.  
  81. int Cont_Liv(char Espr,char Stack)
  82. {
  83.     if(Espr=='+' && Stack=='*')
  84.     {
  85.         return 1;
  86.     }
  87.     if(Espr== '+' && Stack=='/')
  88.     {
  89.         return 1;
  90.     }
  91.     if(Espr=='-' && Stack =='*' )
  92.     {
  93.         return 1;
  94.     }
  95.     if(Espr== '-' && Stack=='/')
  96.     {
  97.         return 1;
  98.     }
  99.     if(Espr== '*' && Stack =='+')
  100.     {
  101.         return 0;
  102.     }
  103.     if(Espr== '*' && Stack =='-')
  104.     {
  105.         return 0;
  106.     }
  107.     if(Espr== '/' && Stack =='+')
  108.     {
  109.         return 0;
  110.     }
  111.     if(Espr== '/' && Stack =='+')
  112.     {
  113.         return 0;
  114.     }
  115.  
  116. }



...Novello Cpiupparo..=D
PM Quote
Avatar
John (Ex-Member)
Pro


Messaggi: 191
Iscritto: 18/11/2007

Segnala al moderatore
Postato alle 19:43
Venerdì, 15/06/2012
Non capisco bene cosa dovrebbe fare il programma.. Stai trasformando l'espressione algebrica da notazione infissa a postfissa (o polacca inversa, che dir si voglia)?

(la notazione infissa è 9*(3+2)-2/7 , che in postfissa diventa 9 3 2 + * 2 7 /-)


Costruisci come se dovesse durare 1000 anni, vivi come se fosse l'ultimo giorno....

Linux user #510634
PM Quote