Arbre arithmétique à partir d'une expression

ruthdy Messages postés 1 Statut Membre -  
 gdavis -
salutation a tous et je profite cette dite occasion pour vous faire part d'une petite question qui est la suivante:

Ecrire un progamme qui en C qui crée un arbre arithmétique à partir d'une expression postfixée fournie au clavier . ce programme devra permettre de donner une notation préfixée pour l'expression et de réaliser son évaluation.(en utilisant une structure arbre)
Le programme sera utilisé à travers un menu comportant les entrées suivantes:

1- Donner une expression posfixée
2- Affichage de la notation préfixée de l'expression
3- Evaluation de l'expression
4- Quitter le programme

REMARQUE: l'expression posfixée sera constituée de chiffres (0.9)et des opérateurs (+,-,*)

INDICATION: utilisé une "pile d'arbre" pour créer l'arbre arithmétique .
comptant sur vos suggestions , vous aller m'aider
does je vous remercie tous.

2 réponses

  1. gdavis
     
    Bsoir

    exploite ceci que Lami20j m'a balancé

    #include<stdio.h>
    #include<stdlib.h>

    typedef struct N_
    {
    int nb;
    struct N_*gauche;
    struct N_*droite;
    } Noeud;

    void CreerArbre (Noeud ** racine, int n);
    void Traiter (Noeud * racine);
    void AfficherPrefixe (Noeud * racine);
    void AfficherPostfixe (Noeud * racine);
    void AfficherInfixe (Noeud * racine);

    Noeud *alloc ();

    int main ()
    {
    Noeud *racine;

    racine = NULL;
    int n;

    printf ("Numéro [100 pour terminer] ? ");
    scanf ("%d", &n);
    while (n != 100) {
    CreerArbre (&racine, n);
    printf ("Numéro [100 pour terminer] ? ");
    scanf ("%d", &n);
    }
    AfficherPrefixe (racine);
    puts ("");
    AfficherInfixe (racine);
    puts ("");
    AfficherPostfixe (racine);
    puts ("");
    return 0;
    }

    void CreerArbre (Noeud ** racine, char c)
    {
    Noeud *nouveau;

    nouveau = alloc ();

    if (*racine == NULL) {
    nouveau->nb = n;
    nouveau->gauche = NULL;
    nouveau->droite = NULL;
    *racine = nouveau;
    }
    else if (n < (*racine)->nb)
    CreerArbre (&(*racine)->gauche, c);
    else if (n > (*racine)->nb)
    CreerArbre (&(*racine)->droite, c);
    }

    Noeud *alloc ()
    {
    Noeud *noeud;

    noeud = (Noeud *) malloc (sizeof (Noeud));
    return noeud;
    }

    void Traiter (Noeud * racine)
    {
    printf ("%d (%p) ; ", racine->nb, racine);
    }

    void AfficherPrefixe (Noeud * racine)
    {
    if (racine != NULL) {
    Traiter (racine);
    AfficherPrefixe (racine->gauche);
    AfficherPrefixe (racine->droite);
    }
    }
    void AfficherPostfixe (Noeud * racine)
    {
    if (racine != NULL) {
    AfficherPostfixe (racine->gauche);
    AfficherPostfixe (racine->droite);
    Traiter (racine);
    }
    }

    void AfficherInfixe (Noeud * racine)
    {
    if (racine != NULL) {
    AfficherInfixe (racine->gauche);
    Traiter (racine);
    AfficherInfixe (racine->droite);
    }
    }

    Bsoir
    2
  2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Salut,
    ouarf tu voudrais pas qu'on fasse tes TDs non plus? Ha ba si pardon j'avais pas vue :-D

    .  .
    \_/
    1