Savoir si un opérateur précede un autre

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 7 avril 2011 à 12:14
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 8 avril 2011 à 14:46
Bonjour
Comment savoir si un opérateur précede un autre
j'essaye d'écrire une fonction boolean avec comme parametre deux char op1 et op2 qui représentent chacun un opérateur ^ * / + -
doit rendre true si op1 > op2

(> au niveau mathématique pas la valeur ascii)
merci

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 avril 2011 à 12:30
Ou alors, veux-tu dire que les 5 opérateurs sont rangés dans un ordre précis et qu'il te faut savoir si l'opérateur contenu dans op1 est placé avant ou après celui contenu dans op2 ?

Dim sListeOperateurs As String = "^*/+-"
Dim op1 As String = "*"
Dim op2 As String = "+"

Debug.Print(sListeOperateurs.IndexOf(op1))
Debug.Print(sListeOperateurs.IndexOf(op2))
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 avril 2011 à 12:25
Salut

Pas clair.

"deux char op1 et op2 qui représentent chacun un opérateur ^ * / + -"
2 variables et 5 opérateurs.
Que faut-il comprendre ?

"doit rendre true si op1 > op2"
Comment un + pourrait-être supérieur à un / ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 avril 2011 à 12:39
Bonjour

op1 représente un opérateur
op2 représente un opérateur

savoir si op1 précède (au niveau arithmetique) op2

si op1 "+" et op2 "/"
doit donner false

op1 "^" et op2 "*"
donne true

j'espère que c'est plus clair
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 avril 2011 à 12:52
Le sens arithmétique d'un opérateur m'échappe un peu.
Je ne comprends pas ce que tu veux dire.
Mais la solution que je t'ai proposée fonctionne tel que tu le souhaites.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 avril 2011 à 14:04
merci
j'ai réussi à écrire

Private Function precedence(ByVal op1 As Char, ByVal operstack As Char) As Boolean
        If op1 = "^" Then
            Return True
        End If
        If op1 "*" And operstack "^" Then
            Return False
        End If
        If op1 "*" And (operstack "+" Or operstack = "-") Then
            Return True
        End If
        If op1 "/" And operstack "^" Then
            Return False
        End If

        If op1 "/" And (operstack "+" Or operstack = "-") Then
            Return True
        End If

        If op1 "+" And (operstack "^" Or operstack = "/" Or operstack = "*") Then
            Return False
        End If


        If op1 "+" And (operstack "-") Then
            Return True
        End If

        If op1 "-" And (operstack "^" Or operstack = "/" Or operstack = "*") Then
            Return False
        End If


        If op1 "-" And (operstack "+") Then
            Return True
        End If

    End Function



il y a peut etre plus simple
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 avril 2011 à 19:33
Peut-être, mais comme je ne comprends pas ce que tu cherches à faire, difficile de t'en dire plus ...
Des exemples seraient nécessaires.

As-tu essayé le code que je t'ai proposé ? Il est pourtant simple

Pense aux Select Case plutôt que cette avalanche de If-Then-Else
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 avril 2011 à 22:05
j'essaye d'appliquer l'algorithm infix to postfix
pour évaluer une expression algébrique
avec l'aide du stack
écriture infix 3 + 4
postfix 34+

je vais me débrouiller
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 avril 2011 à 14:46
Bonjour

Bien sur ta réponse est bonne
c'est plutot ma tete
vraiment compliqué
ce n'est pas la peine d'écrire

((1^0+1^0)^1^0)/1^0 = 2
tout simplement 1+1 = 2
0
Rejoignez-nous