Savoir si un opérateur précede un autre [Résolu]

Signaler
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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))
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
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