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 :

infixe en postfixe


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 54
    Par défaut infixe en postfixe
    Bonsoir,

    Je tente de cree une fonction qui prend en parametre une chaine de caractere et qui retourne sa notation postfixe
    Je suis confronte a un probleme de signe quand j envoie a la fonction "7/8-6/9*1"
    Voici la fonction
    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
     
    t_postfixe      *infixe_to_postfixe(char *str)
    {
      t_postfixe    *postfixe = NULL;
      t_stack       *stack = NULL;
     
      int   i;
     
      i = 0;
      while (str[i])
        {
          if (str[i] >= '0' && str[i] <= '9')
              postfixe = push(postfixe, str[i]);
     
          if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')
            {
              if (stack == NULL)
                stack = push_stack(stack, str[i]);
     
              else
                {
                  if (stack->valeur == '+' && str[i] == '*')
                    {
                      stack = push_stack(stack, str[i]);
                    }
                  else if (stack->valeur == '*' && str[i] == '-' || str[i] == '+')
                    {
                      while (stack != NULL)
                        {
                          postfixe = push(postfixe, stack->valeur);
                          stack = pop_stack(stack);
                        }
                      stack = push_stack(stack, str[i]);
                    }
     
                    if (str[i] == '+' || str[i] == '-' && stack->valeur == '*' || stack->valeur == '/')
                    {
                      while (stack != NULL)
                        {
                          postfixe = push(postfixe, stack->valeur);
                          stack = pop_stack(stack);
                        }
                      stack = push_stack(stack, str[i]);
                    }
     
    else if (str[i] == '*' && stack->valeur == '*')
                    {
                      postfixe = push(postfixe, stack->valeur);
                      stack = pop_stack(stack);
                      stack = push_stack(stack, str[i]);
                    }
     
                  else if (str[i] == '/' && stack->valeur != '*')
                    {
                      stack = push_stack(stack, str[i]);
                    }
     
                  else if (str[i] == '*' && stack->valeur == '/')
                    {
                      stack = pop_stack(stack);
                      postfixe = push(postfixe, stack->valeur);
                      stack = push_stack(stack, str[i]);
                    }
                  else if (str[i] == '/' && stack->valeur == '*')
                    {
                      postfixe = push(postfixe, stack->valeur);
                      stack = pop_stack(stack);
                      stack = push_stack(stack, str[i]);
                    }
                  else if (stack->valeur == '-' && str[i] == '/')
    	        {
    	          stack = push_stack(stack, str[i]);
                    }
     
                  else if (str[i] == '-' && stack->valeur == '/')
                    {
     
                      while (stack != NULL)
                        {
                          postfixe = push(postfixe, stack->valeur);
                          stack = pop_stack(stack);
                        }
                      stack = push_stack(stack, str[i]);
     
                    }
     
     
                }
            }
          i++;
        }
    En vous remerciant par avance,

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Par défaut
    Bonsoir,
    Est-ce que c'est normal que vous ayez un != plutôt qu'un == dans votre bout de code ci-dessous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                  else if (str[i] == '/' && stack->valeur != '*')
                    {
                      stack = push_stack(stack, str[i]);
                    }
    stack->valeur == '*' non ?

Discussions similaires

  1. notation infixée et postfixée
    Par ettar dans le forum C
    Réponses: 1
    Dernier message: 07/07/2014, 01h57
  2. Algorithme conversion postfixée vers infixée
    Par Onimaru dans le forum Mathématiques
    Réponses: 8
    Dernier message: 04/02/2012, 14h32
  3. ...infix to postfix...
    Par smalto dans le forum C
    Réponses: 4
    Dernier message: 29/04/2006, 01h47
  4. Problème avec mes emails sous postfix
    Par barbot dans le forum Réseau
    Réponses: 4
    Dernier message: 23/06/2004, 14h56
  5. Exim ou Postfix ?
    Par ovh dans le forum Réseau
    Réponses: 3
    Dernier message: 04/12/2003, 09h52

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