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

Turbo Pascal Discussion :

Algorithme expression arithmétique postfixée


Sujet :

Turbo Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut Algorithme expression arithmétique postfixée
    Salut à tous,
    je suis entrain de dévolopper une petite application en Turbo Pascal:
    et comme je suis débutant, j'aimerai bien m'aider.
    le programme permet de lire une expression arithmétique infixées. ex: 1+2*3+4 utilisant la structure des Piles (Empiler, Dépiler, Pile_vide...)

    Je veux transformer cette expression à une expression poste_fixée puis calculer le résultat.
    les procedures:
    - lire la chaine de caractères.
    - extraire le nombres (oprérands), convertir en entier et les mettre dans une Pile.
    - extraire les Opération (+,-,*,/,^,(,),pgcd, ppcm,...) et les mettre dans une autre Pile.
    - respecter la priorité des opérations. ex: * et plus prioritaire que +,

    - afficher l'expression poste fixée

    - afficher le résultat final.

    Merci à tous.
    j'attend vos réponses.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Kao,

    Citation Envoyé par elhou80
    Bonjour,
    Le temps passe, et aucune réponse,
    quelqu'un m'adider svp.
    Du calme, à peine plus de 3 heures entre ta demande et cette réflexion


    C'est un algorithme que tu cherches ou un programme ?

    Si c'est un algorithme, ça n'a rien à voir avec le Pascal en soi.

    Si c'est un programme, en Pascal donc, d'après ton titre, il y a un forum Pascal

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    As-tu déjà codé quelque chose ?

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Hol,

    Qu'appelles-tu "débutant" ?

    Si tu es vraiment débutant au sens habituel du terme, il vaudrait mieux commencer par des programmes plus simples pour apprendre le langage.

    En effet, l'expérience montre que vouloir attaquer "bille en tête" est plus un motif d'abandon qu'autre chose.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    ok, jai dit que suis débutant, c-t-dire dans les structures Piles,
    je veux que la sollution de cet algorithme faite en langage pascal avec les piles, P1, P2,
    les fonctions et procedures (depiler, empiler, est_vide,.., priorite(op?),...)

    Merci de m'aider.

    ex: ((56+23)+(7*8)) = -------- 56 23 + 8 7 * + =
    et l'affichage du résultat = 137

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    Citation Envoyé par wormful_sickfoot
    As-tu déjà codé quelque chose ?

    j'ai pas compris ton message

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    salut,
    voilà, j'ai un essai de mon problème, mais pas complet,

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    program expression_arithmetique;
      uses crt;
      cons N=200;
      type pile=record
                  elem:array[1..N] of integer;  (* elements de la pile  *)
                  s: integer;  (* indice de sommet *)
                end;
     
      var p1,p2,p3:pile;
          i:integer;
          exp:string;
     
     
      function est_vide(var P:pile):boolean;
      begin
        est_vide := (P.s=0);
      end;
     
      procedure empiler(var p:pile;e:integer);
      begin
        (* si l pile n'est pas pleine ! *)
        if P.s=N then write(‘Pile Pleine’)
        else begin 
          p.s:=p.s+1;
          p.elem[p.s]:=e;
        end;  
      end;
     
      procedure depiler(var p:pile);
      begin
        (* si la pile n'est pas vide ! *)
        if P.s=0 then 
          write('Pile vide')
        else 
          p.s:=p.s-1;
      end;
     
      procedure creerPile;
        var p:pile;
      begin
        p.s:=0;
        (* alocc du tableau si necessaire *)
        (* retouner P *)
      end;
     
      function sommet(P : pile): element;
      begin
        if est_vide(P) then 
           write(‘pile vide’) 
        else 
           sommet:=P.elem[P.s];
      end;
     
      procedure vide_pile(var P : pile);
      begin
        while (P<>nil) then depiler(P);
      end;
     
      function priorite(op1:char):integer;
      begin
        case op1 of
          '^': priorite:=6;
          '*': priorite:=5;
          '/': priorite:=4;
          '+': priorite:=3;
          '-': priorite:=2
          { ..........}
        end;
      end;
     
      procedure Lire_Expression;
      begin
      end;
     
      procedure Afficher_PosteFixe;
      begin
      end;
     
      procedure Afficher_Result;
      begin
      end;
     
     
      Procedure Menu_Principal;
      begin
        { ..... Menu principal}
      end;
     
     
    begin
      clrscr;
      Menu_principal;
     
     
    end.


    **** J'attend un programme plus simple svp

  8. #8
    Membre Expert
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Par défaut
    Citation Envoyé par elhou80
    **** J'attend un programme plus simple svp
    rends le tien plus lisible(indenté,et commentaire) et apres on vera

  9. #9
    Membre émérite
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    J'interviens parce que j'aime bien ce genre de problème qui touche aux interpréteurs et ou compilateurs. Un de mes premiers projets à la fac dans ma jeunesse lointaine a été un peu dans ce genre.

    Déjà, en cherchant un peu, par exemple "interpréteur arithmétique", je doute que tu ne trouves pas quelques informations précieuses, y compris sur notre ami Google.

    Par ailleurs, je ne te donnerai pas de programme tout fait, mais quelques pistes.

    Commence déjà par programmer un parser simple, c'est-à-dire une fonction qui va analyser le texte caractère par caractère pour isoler les éléments sémantiques (nombres, symboles, etc..), et qui renverra un type énuméré indiquant ce qu'il a trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type TParserResult = (parsUnknown, parsNumber, parsAdd, parsSub, parsMult, parsDiv);
     
    function ParseString(var CurrentIndex : Integer;S:string;var Number : Integer):TParsResult;
    begin 
     // à toi de jouer...
    Ensuite, on verra.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    merci bien , mais pas encore une solution,
    si je peux faire des parsers et des compilateurs, je ne demande pas d'aide pour un programme comme ceci.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 962
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 962
    Par défaut
    Mos,

    Généralement, on traite ce genre de problème à l'aide d'un arbre plutôt qu'avec une pile.

    Comme te l'a dit CapJack, une petite recherche sur Google devrait te donner moult réponses.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut remerci
    merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/05/2007, 11h02
  2. Réponses: 1
    Dernier message: 03/01/2007, 15h07
  3. Réponses: 1
    Dernier message: 09/12/2006, 10h13
  4. Parsing d'expressions arithmétiques
    Par Premium dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 23/08/2006, 15h09
  5. Evaluation d'une expression arithmétique
    Par MysticKhal_0 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 10/03/2006, 18h25

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