Partage
  • Partager sur Facebook
  • Partager sur Twitter

conversion polonaise en c++

    22 octobre 2008 à 17:42:35

    Bonjour
    Est que quelqu'un pourrait m'aider a faire un programme en c++ qui fait une conversion polonaise post fixe d'une expression en utilisant les pointeurs?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2008 à 17:43:25

      L'alrticle Wikipédia sur la NPI donne l'algorithme à utiliser.
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        22 octobre 2008 à 18:01:11

        ben j'ai pas vu l'algorithme qui traite de la conversion dans le wikipedia ppourrez tu m'envoyer le lien s'il te plait?

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          22 octobre 2008 à 18:12:11

          Ok mercie
          mais le probleme en faite c'est que je ne sais meme pas par ou commencer .pourrez tu me donnez plus de detail pour le programme s'il te plait

          Mercie
          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2008 à 18:41:45

            J'ai pas envie de t'écrire ce programme. Et je suis sûr que tu as au moins une petite idée.

            Si tu montres que tu fais quelque chose, je t'aide volontiers à avancer.

            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              23 octobre 2008 à 5:19:46

              bon j'ai cherche mais c'est tout ce que j'arrive a faire jusqu'a date j'arrive pas a implanter l'algorithme comme pour evaluer l'expression





              #include <iostream>
              #include <stack>
              #include <string>

              using namespace std;

              class Pile
              {
              private:
              noeud * top;
              int size;
              public:
              Pile ()
              {
              top = NULL;
              size = 0;
              }
              ~Pile()
              {
              clear();
              }
              void clear()
              {
              while (top != NULL)
              {
              noeud * temp = top;
              top = top->suivant;
              delete temp;
              }

              size = 0;
              }
              bool push(const Elem& item)
              {
              top = new noeud(item,top);

              size++;

              return true;
              }
              bool pop(Elem& it)
              {
              if (size == 0) return false;
              it = top->element;
              noeud * ltemp = top->suivant;
              delete top;
              top = ltemp;
              size--;
              return true;
              }

              bool sommet_pile(Elem& it)
              {
              if (size == 0) return false;
              it = top->element;
              return true;
              }

              int length() const
              {
              return size; // retourne la taille de la pile

              }
              };

              bool operateur( const char c )

              {
              string op = "*/-+";

              bool resultat = false;

              if(op.find(c) != (*)||(/)||(-)||(+))

              resultat = true;

              return resultat;
              }

              void evaluer(string expression)
              {
              int x;
              noeud* top = new noeud( item,top);

              // while(!)

              /*while((ce n’est pas la fin de l’expression )
              prendre le prochain item infixe
              if (item est une valeur) concaténer item à postfixe*/

              else if(iten=='(')

              p.push();

              else if(item==')')
              {
              p.pop();

              p.pop(x);

              while(x!='(')

              x = pop();
              }
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                23 octobre 2008 à 8:29:02

                Utilise la balise code s'il te plait.
                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2008 à 10:13:01

                  et indente le code surtout parc que là c'est illisible :s
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 octobre 2008 à 11:58:18

                    ben je ne vois pas ce que vous voulez dire par utiliser la balise code pourrez vs me donnez plus d'indication sur ca svp c'est juste k je suis nvo sur lsite donc je sais pas trop.....
                    mercie
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      23 octobre 2008 à 12:06:40

                      Utilise le balise <sms off> merci.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 octobre 2008 à 12:54:15

                        <code type="cpp"></code>

                        #include <iostream>
                        #include <stack>
                        #include <string>

                        using namespace std;

                        class Pile
                        {
                        private:
                        noeud * top;
                        int size;
                        public:
                        Pile ()
                        {
                        top = NULL;
                        size = 0;
                        }
                        ~Pile()
                        {
                        clear();
                        }
                        void clear()
                        {
                        while (top != NULL)
                        {
                        noeud * temp = top;
                        top = top->suivant;
                        delete temp;
                        }

                        size = 0;
                        }
                        bool push(const Elem& item)
                        {
                        top = new noeud(item,top);

                        size++;

                        return true;
                        }
                        bool pop(Elem& it)
                        {
                        if (size == 0) return false;
                        it = top->element;
                        noeud * ltemp = top->suivant;
                        delete top;
                        top = ltemp;
                        size--;
                        return true;
                        }

                        bool sommet_pile(Elem& it)
                        {
                        if (size == 0) return false;
                        it = top->element;
                        return true;
                        }

                        int length() const
                        {
                        return size; // retourne la taille de la pile

                        }
                        };

                        bool operateur( const char c )

                        {
                        string op = "*/-+";

                        bool resultat = false;

                        if(op.find(c) != (*)||(/)||(-)||(+))

                        resultat = true;

                        return resultat;
                        }

                        void evaluer(string expression)
                        {
                        int x;
                        noeud* top = new noeud( item,top);

                        // while(!)

                        /*while((ce n’est pas la fin de l’expression )
                        prendre le prochain item infixe
                        if (item est une valeur) concaténer item à postfixe*/

                        else if(iten=='(')

                        p.push();

                        else if(item==')')
                        {
                        p.pop();

                        p.pop(x);

                        while(x!='(')

                        x = pop();
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          23 octobre 2008 à 13:08:06

                          non, tu dois placer le code _entre_ les balises : <code type="cpp">ton code</code>
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 octobre 2008 à 13:22:02

                            <code type="cpp"><#include <iostream>
                            #include <stack>
                            #include <string>

                            using namespace std;

                            class Pile
                            {
                            private:
                            noeud * top;
                            int size;
                            public:
                            Pile ()
                            {
                            top = NULL;
                            size = 0;
                            }
                            ~Pile()
                            {
                            clear();
                            }
                            void clear()
                            {
                            while (top != NULL)
                            {
                            noeud * temp = top;
                            top = top->suivant;
                            delete temp;
                            }

                            size = 0;
                            }
                            bool push(const Elem& item)
                            {
                            top = new noeud(item,top);

                            size++;

                            return true;
                            }
                            bool pop(Elem& it)
                            {
                            if (size == 0) return false;
                            it = top->element;
                            noeud * ltemp = top->suivant;
                            delete top;
                            top = ltemp;
                            size--;
                            return true;
                            }

                            bool sommet_pile(Elem& it)
                            {
                            if (size == 0) return false;
                            it = top->element;
                            return true;
                            }

                            int length() const
                            {
                            return size; // retourne la taille de la pile

                            }
                            };

                            bool operateur( const char c )

                            {
                            string op = "*/-+";

                            bool resultat = false;

                            if(op.find(c) != (*)||(/)||(-)||(+))

                            resultat = true;

                            return resultat;
                            }

                            void evaluer(string expression)
                            {
                            int x;
                            noeud* top = new noeud( item,top);

                            // while(!)

                            /*while((ce n’est pas la fin de l’expression )
                            prendre le prochain item infixe
                            if (item est une valeur) concaténer item à postfixe*/

                            else if(iten=='(')

                            p.push();

                            else if(item==')')
                            {
                            p.pop();

                            p.pop(x);

                            while(x!='(')

                            x = pop();
                            } >






                            j'espere que cette fois ca va marcher!!!!!!
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              23 octobre 2008 à 13:36:42

                              ..........

                              Clique sur répondre, en dessous des messages, tape ton code puis sélectionne le, ensuite tu prends le menu code, et c++.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 octobre 2008 à 13:41:52

                                #include <iostream>
                                #include <stack>
                                #include <string>
                                
                                using namespace std;
                                
                                class Pile
                                {
                                private:
                                noeud * top; 
                                int size; 
                                public:
                                Pile () 
                                {
                                top = NULL;
                                size = 0;
                                }
                                ~Pile() 
                                { 
                                clear();
                                } 
                                void clear()
                                {
                                while (top != NULL) 
                                { 
                                noeud * temp = top;
                                top = top->suivant;
                                delete temp;
                                }
                                
                                size = 0;
                                }
                                bool push(const Elem& item)
                                {
                                top = new noeud(item,top);
                                
                                size++;
                                
                                return true;
                                }
                                bool pop(Elem& it)
                                {
                                if (size == 0) return false;
                                it = top->element;
                                noeud * ltemp = top->suivant;
                                delete top;
                                top = ltemp;
                                size--;
                                return true;
                                }
                                
                                bool sommet_pile(Elem& it) 
                                {
                                if (size == 0) return false;
                                it = top->element;
                                return true;
                                }
                                
                                int length() const
                                { 
                                return size; // retourne la taille de la pile
                                
                                } 
                                };
                                
                                bool operateur( const char c )
                                
                                {
                                string op = "*/-+";
                                
                                bool resultat = false;
                                
                                if(op.find(c) != (*)||(/)||(-)||(+))
                                
                                resultat = true;
                                
                                return resultat;
                                }
                                
                                void evaluer(string expression)
                                {
                                int x;
                                noeud* top = new noeud( item,top);
                                
                                // while(!)
                                
                                /*while((ce n?est pas la fin de l?expression ) 
                                prendre le prochain item infixe
                                if (item est une valeur) concaténer item à postfixe*/
                                
                                else if(iten=='(')
                                
                                p.push();
                                
                                else if(item==')')
                                {
                                p.pop();
                                
                                p.pop(x);
                                
                                while(x!='(')
                                
                                x = pop();
                                }
                                
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  23 octobre 2008 à 13:42:58

                                  Citation : Goten

                                  et indente le code surtout parc que là c'est illisible :s

                                  +1
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 octobre 2008 à 14:06:00

                                    comment faire pour indenter le code?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      23 octobre 2008 à 14:31:36

                                      La plus part des IDE propose une fonction pour incrémenter automatiquement.
                                      Au pire tu le fais manuellement.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 octobre 2008 à 15:52:59

                                        Une version indentée... (c'est mon jour de charité)

                                        #include <iostream>
                                        #include <stack>
                                        #include <string>
                                        
                                        using namespace std;
                                        
                                        class Pile
                                        {
                                        private:
                                            noeud * top;
                                            int size;
                                        public:
                                            Pile ()
                                            {
                                                top = NULL;
                                                size = 0;
                                            }
                                            ~Pile()
                                            {
                                                clear();
                                            }
                                            void clear()
                                            {
                                                while (top != NULL)
                                                {
                                                    noeud * temp = top;
                                                    top = top->suivant;
                                                    delete temp;
                                                }
                                        
                                                size = 0;
                                            }
                                            bool push(const Elem& item)
                                            {
                                                top = new noeud(item,top);
                                        
                                                size++;
                                        
                                                return true;
                                            }
                                            bool pop(Elem& it)
                                            {
                                                if (size == 0) return false;
                                                it = top->element;
                                                noeud * ltemp = top->suivant;
                                                delete top;
                                                top = ltemp;
                                                size--;
                                                return true;
                                            }
                                        
                                            bool sommet_pile(Elem& it)
                                            {
                                                if (size == 0) return false;
                                                it = top->element;
                                                return true;
                                            }
                                        
                                            int length() const
                                            {
                                                return size; // retourne la taille de la pile
                                        
                                            }
                                        };
                                        
                                        bool operateur( const char c )
                                        
                                        {
                                            string op = "*/-+";
                                        
                                            bool resultat = false;
                                        
                                            if (op.find(c) != (*)||(/)||(-)||(+))
                                        
                                                resultat = true;
                                        
                                            return resultat;
                                        }
                                        
                                        void evaluer(string expression)
                                        {
                                            int x;
                                            noeud* top = new noeud( item,top);
                                        
                                        // while(!)
                                        
                                            /*while((ce n?est pas la fin de l?expression )
                                            prendre le prochain item infixe
                                            if (item est une valeur) concaténer item à postfixe*/
                                        
                                            else if (iten=='(')
                                        
                                                p.push();
                                        
                                            else if (item==')')
                                            {
                                                p.pop();
                                        
                                                p.pop(x);
                                        
                                                while (x!='(')
                                        
                                                    x = pop();
                                            }
                                        


                                        ...mais qui ne compile pas.
                                        main.cpp:10: erreur: ISO C++ forbids declaration of «noeud» with no type
                                        main.cpp:10: erreur: expected «;» before «*» token
                                        main.cpp:33: erreur: expected «,» or «...» before «&» token
                                        main.cpp:33: erreur: ISO C++ forbids declaration of «Elem» with no type
                                        main.cpp:41: erreur: «Elem» has not been declared
                                        main.cpp:52: erreur: «Elem» has not been declared
                                        main.cpp: In constructor «Pile::Pile()»:
                                        main.cpp:13: attention : «Pile::size» should be initialized in the member initialization list
                                        main.cpp:15: erreur: «top» was not declared in this scope
                                        main.cpp: In member function «void Pile::clear()»:
                                        main.cpp:24: erreur: «top» was not declared in this scope
                                        main.cpp:26: erreur: «noeud» was not declared in this scope
                                        main.cpp:26: erreur: «temp» was not declared in this scope
                                        main.cpp:28: erreur: type «<type error>» argument given to «delete», expected pointer
                                        main.cpp: In member function «bool Pile::push(int)»:
                                        main.cpp:35: erreur: «top» was not declared in this scope
                                        main.cpp:35: erreur: expected type-specifier before «noeud»
                                        main.cpp:35: erreur: expected `;' before «noeud»
                                        main.cpp: At global scope:
                                        main.cpp:33: attention : unused parameter «Elem»
                                        main.cpp: In member function «bool Pile::pop(int&)»:
                                        main.cpp:44: erreur: «top» was not declared in this scope
                                        main.cpp:45: erreur: «noeud» was not declared in this scope
                                        main.cpp:45: erreur: «ltemp» was not declared in this scope
                                        main.cpp:46: erreur: type «<type error>» argument given to «delete», expected pointer
                                        main.cpp: In member function «bool Pile::sommet_pile(int&)»:
                                        main.cpp:55: erreur: «top» was not declared in this scope
                                        main.cpp: In function «bool operateur(char)»:
                                        main.cpp:73: erreur: expected primary-expression before «)» token
                                        main.cpp:73: erreur: expected primary-expression before «/» token
                                        main.cpp:73: erreur: expected primary-expression before «)» token
                                        main.cpp:73: erreur: expected primary-expression before «)» token
                                        main.cpp:73: erreur: expected primary-expression before «)» token
                                        main.cpp: In function «void evaluer(std::string)»:
                                        main.cpp:83: erreur: «noeud» was not declared in this scope
                                        main.cpp:83: erreur: «top» was not declared in this scope
                                        main.cpp:83: erreur: expected type-specifier before «noeud»
                                        main.cpp:83: erreur: expected `;' before «noeud»
                                        main.cpp:91: erreur: expected primary-expression before «else»
                                        main.cpp:91: erreur: expected `;' before «else»
                                        main.cpp:95: erreur: expected primary-expression before «else»
                                        main.cpp:95: erreur: expected `;' before «else»
                                        main.cpp:82: attention : unused variable «x»
                                        main.cpp:104: erreur: expected `}' at end of input
                                        main.cpp: At global scope:
                                        main.cpp:80: attention : unused parameter «expression»


                                        Vu que apperement c'est pour un exercice, as-tu réelement besoin de coder toi-même la structure de pile ? Si oui, pourquoi inclure stack ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                                          23 octobre 2008 à 20:00:12

                                          oui j'ai besoin de coder la structure du pile
                                          mais le programme en faite n'est pas termine c' est juste que je suis bloque au niveau de la fonction pour traduire l'expression en polonaise
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            24 octobre 2008 à 10:41:49

                                            Je pense que tu devrais commencer pas avoir une Pile qui fonctionne avant de continuer sinon, tu vas jamais t'en sortir.

                                            a) Pourquoi inclure stack si tu n'as pas le droit de l'utiliser ?

                                            b) Tu dois faire tout le boulot à la main ? Parce que sinon, tu peux implémenter la Pile comme un tableau (dynamique)

                                            c) Il faut que tu fasses un template ou alors que tu codes ta pile pour un type spécifique. "Noeud" dans ton code n'est pas un type valide.

                                            d) if (op.find(c) != (*)||(/)||(-)||(+)) fonctionne pas et surtout ne fait pas ce que tu penses. LEs char doivent être écrits avec des '' autour.


                                            Tu devrais revoir ton cours, il te manque pas mal de bases.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.

                                            conversion polonaise en c++

                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                            • Editeur
                                            • Markdown