IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

un exercice � r�soudre


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Par d�faut un exercice � r�soudre
    on dit qu'une expression arithm�tique est compl�tement parenth�s�e si chaque terme situ� de part et d'autre d'un op�rateur est entour� d'une parenth�se
    expl : (a*(b+(c/d)))
    pour eviter cette n�c�ssit� un math�maticien a propos� une notation dite polonaise
    dans laquelle les op�rateurs suivent imm�diatement les op�randes sur lesquelles ils agissent
    exple
    (a*(b+(c/d))) nous donne le r�sultat suivant abcd / + *
    donc
    ce qui se passe c'est dans une pile1 on met les op�rateurs
    dans une pile 2 on met les op�randes
    et lorsque on rencontre une parenth�se ouvrante on ne fait rien
    et lorsque c'est une parenth�se fermante on d�pile p2 et empile p1
    en fin de l'expression on obtient la pile 2 vide alors on d�pile p1 dans p2
    je voudrais bien que vous m'aidez � r�soudre cette programme avec c++ parce que la r�solution que j'ai trouv� n'a pas fonctionn�
    j'attends vos r�ponses le plutot possible

  2. #2
    Membre confirm�
    Inscrit en
    Avril 2007
    Messages
    82
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par d�faut
    J'ai du mal � comprendre le code avec lequel tu as un probl�me.

  3. #3
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par km_mino Voir le message
    j'attends vos r�ponses le plutot possible
    Je suis content de la confiance que tu nous porte, et suis particuli�rement heureux de r�pondre � tes ordres, en t'aidant imm�diatement � faire tes devoirs.

    Ah non, mince.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Par d�faut
    primo je ne vous ordonne pas de m'aider mais je vous demande de me porter de l'aide
    secondo ce sont pas mes devoirs mais c'est un probl�me que j'ai rencontr� et que j'ai pas pu r�soudre alors j'ai demand� de l'aide
    en + personne n'est parfait on apprend les choses par le recours � ceux qui connaissent
    merci de toute fa�on

  5. #5
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par d�faut
    Si au moins tu nous expliquais en quoi consiste ton programme.
    La notation polonaise je connais, bien que la structure de donn�es que tu as choisis pour repr�senter une formule me semble assez �trange (des piles??) je ne peux te donner aucun conseil vu que je ne comprends pas quelles sont les donn�es de d�part et celles d'arriv�e.
    C'est quoi le but ? Convertir une expression compl�tement parenth�s�e en expression polonaise ? Le contraire ? R�soudre une expression sous l'une ou l'autre forme ?

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    12
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Par d�faut
    Convertir une expression compl�tement parenth�s�e en expression polonaise c'est �a le but du programme mais en utilisant les piles de la mani�re avec laquelle j'ai expliqu� au sujet.
    j'y arrive presque mais pas totalement

  7. #7
    Membre �clair� Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par d�faut
    Tu trouveras personne ici pour te donner ton code tout fait donc montre nous ce que tu as d�j� fait et l� o� tu bloques.

  8. #8
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    L'algorithme est simple :

    1) cr�ation de la pile
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    liste 1 va contenir l'opération finale à exécuter
    liste 2 est une liste temporaire, utilisée pour construire l'expression
    liste R est la liste qui permettra de calculer le résultat
     
    pour chaque symbole de l'expression
     
      si le symbole est une opérande
        insertion de l'opérande à la fin de liste 1
      fin si
     
      si le symbole est un opérateur 
        stocker l'opérateur dans op1
        si liste 2 est non vide
          faire 
            op2 = pop liste 2
            si la précédence de op1 est supérieur à la précédence de op2      
              insertion de op2 à la fin de liste 1
            fin si
          tant que la précédence de op1 est supérieure à la précédence de op2
        sinon
          push de op2 sur liste 2 (on le remet en place)
        fin si
        push de op1 sur liste 2
      fin si
     
      si le symbole est une parenthèse ouvrante
        push d'un marqueur P sur liste 2
      fin si
     
      si le symbole est une parenthèse fermante
        faire 
          op = pop liste 2
          si op n'est pas le marqueur P 
            insertion de op à la fin de liste 1
          fin si
        tant que op n'est pas le marqueur P
      fin si
     
    fin pour
     
    pour chaque opérateur de liste 2
      op = pop liste 2
      insertion de op à la fin de liste 1
    fin pour
    Un exemple avec une expression complexe: 45*(5*8+2)/7+78*4
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Iteration Symbole Liste 1                                 Liste 2
    --------- ------- --------------------------------------- ------------------------------------
       1      45      45
       2      *       45                                      *
       3      (       45                                      P *
       4      5       45 5
       5      *       45 5                                    * P *
       6      8       45 8 5                                  * P *
       7      +       45 8 5 *                                + P *
       8      3       45 8 5 * 2                              + P *
       9      )       45 8 5 * 2 +                            *
      10      /       45 8 5 * 2 +                            / *
      11      7       45 8 5 * 2 + 7                          / *
      12      +       45 8 5 * 2 + 7 / *                      +
      13      78      45 8 5 * 2 + 7 / * 78                   +
      14      *       45 8 5 * 2 + 7 / * 78                   * +
      15      4       45 8 5 * 2 + 7 / * 78 4                 * +
      fin     n/a     45 8 5 * 2 + 7 / * 78 4 * +
    Rappel sur la pr�c�dence des op�rateurs Prec(op):

    Prec(*) = Prec(/) > Prec(+) = Prec(-)

    2) Evaluation
    liste 1 contient maintenant l'expression enti�re, et liste R est cens�e contenir le r�sultat:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    tant que liste 1 n'est pas vide
      s = pop liste 1
     
      si s est une opérande
        push s dans liste R
      fin si
     
      si s est un opérateur
        si liste R contient moins de 2 symboles ==> erreur
        operande1 = pop liste R
        operande2 = pop liste R
        resultat = operande2 OPERATEUR operande1
        push resultat dans liste R
      fin si
     
    fin tant que
    A la fin, il ne doit y en rester qu'un (dans liste R, s'entend. Inutile de couper la t�te � tout le monde), et c'est bien �videmment le r�sultat attendu.

    Dans notre exemple, on effectue l'op�ration comme suit:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Iteration Liste 1                                 Liste R
    --------- --------------------------------------- ------------------------------------
      1       8 5 * 2 + 7 / * 78 4 * +                45
      2       5 * 2 + 7 / * 78 4 * +                  8 45
      3       * 2 + 7 / * 78 4 * +                    5 8 45
      4       2 + 7 / * 78 4 * +                      40 45
      5       + 7 / * 78 4 * +                        2 40 45
      6       7 / * 78 4 * +                          42 45
      7       / * 78 4 * +                            7 42 45
      8       * 78 4 * +                              6 45
      9       78 4 * +                                270
     10       4 * +                                   78 270
     11       * +                                     4 78 270
     12       +                                       312 270
     13       (vide)                                  582
    Voil�!
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  9. #9
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Ah, cela confirme donc qu'une seule pile est n�cessaire (en plus des flux d'entr�e et de sortie) pour convertir une expression infixe en expression postfixe...

    Par contre, j'ai du mal � comprendre pourquoi le 8 a �t� ins�r� entre le 45 et le 5...

    Edit: OK, �a me rassure.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    Ah, cela confirme donc qu'une seule pile est n�cessaire (en plus des flux d'entr�e et de sortie) pour convertir une expression infixe en expression postfixe...

    Par contre, j'ai du mal � comprendre pourquoi le 8 a �t� ins�r� entre le 45 et le 5...
    C'est une erreur - (for heureusement, elle ne change rien...)
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Exercice � r�soudre - affectation de variables, calcul, permutations
    Par debutenprogrammation dans le forum D�buter
    R�ponses: 6
    Dernier message: 28/09/2014, 14h56
  2. Exercices � r�soudre
    Par RicardoBxl dans le forum jQuery
    R�ponses: 1
    Dernier message: 27/12/2013, 16h49
  3. exercice � r�soudre
    Par neo2009 dans le forum Langage
    R�ponses: 3
    Dernier message: 09/11/2008, 18h17
  4. R�ponses: 5
    Dernier message: 17/03/2008, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo