While Not

Résolu
texol Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
 toto -
Bonjour,
Je programme un logiciel pour mon TPE, et il y a un endroit qui bloque dans mon programme, je programme en VB2008 avec VB 2008 express edition :
J'ai défini X1 et Y1=0
" Dim CurseurPos As New Point(e.X, e.Y)
CoordX1 = e.X
CoordY1 = e.Y
If Mode = False Then
XY = 10
X2 = XY
Else
XY = 2
X2 = XY
End If
--> While Not CoordX1 >= X1 And CoordX1 >= X2
--> X1 = X1 + XY
X2 = X2 + XY
T1 = True
--> End While
If T1 = True Then
CoordX11 = X1
X1 = 0
X2 = XY
End If

--> While Not Y1 <= CoordY1 And Y2 >= CoordY1
Y1 = Y1 + XY
Y2 = Y2 + XY
T2 = True
End While
If T2 = True Then
CoordY11 = Y1
Y1 = 0
Y2 = XY
End If"
Voila quand je lance le programme avec des arrêts au moment du debug au niveau des flèches, sauf qu'il passe de la première à la troisième sans passer par la deuxième or la condition est fausse d'où le While NOT. Je ne comprends pas pourquoi ca passe les boucles while not sans les executer...

Avez-vous une idée?

3 réponses

neogenesis Messages postés 4748 Date d'inscription   Statut Contributeur Dernière intervention   521
 
Surement un problème de paranthèses
Genre while not (a et b) c'est différent de while not a & b
0
toto
 
Bonjour

Maîtrises-tu bien la précédence des opérateurs, pour tout écrire sans parenthèses ?
Qu'as-tu voulu écrire :
While (Not CoordX1) >= X1 And CoordX1 >= X2
While Not (CoordX1 >= X1) And CoordX1 >= X2
While Not (CoordX1 >= X1 And CoordX1 >= X2)

ça n'est pas la même chose, tout ça...
0
texol Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
en réalité je veux dire :
tant que (X1 n'est pas inférieur ou égal à CoordX1) et (X2 n'est pas superieur ou égal à CoordX1)$
mais en écrivant "While Not (CoordX1 >= X1) And (CoordX1 >= X2)" ça fait pareil
0
neogenesis Messages postés 4748 Date d'inscription   Statut Contributeur Dernière intervention   521
 
POurquoi tu t'embetes avec des NOT ?! Utilise plutot un "OR"
enlève le NOT, remplace les AND par OR
0
toto
 
Non, ça ne fait pas pareil
(X1 est inférieur ou égal à CoordX1) ça s'écrit (X1 <= CoordX1)
(X1 n'est pas inférieur ou égal à CoordX1) ça s'écrit donc NOT (X1 <= CoordX1)
(X2 est superieur ou égal à CoordX1) ça s'écrit (X2 >= CoordX1)
(X2 n'est pas superieur ou égal à CoordX1) ça s'écrit donc NOT (X2 >= CoordX1)
(X1 n'est pas inférieur ou égal à CoordX1) et (X2 n'est pas superieur ou égal à CoordX1), ça s'écrit donc:
NOT (X1 <= CoordX1) AND NOT (X2 >= CoordX1)

ensuite, on pourrait simplifier

Si tu ne maîtrises pas la logique, décompose calmement les expressions compliquées en expressions simples et remplace chaque morceau un par un, en mettant des parenthèses si tu as des doutes
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > toto
 
Remarque : pour éviter d'utiliser des NOT on peux aussi dire (pour reprendre ce qu'a dit toto) que :
NOT (X1 <= CoordX1) AND NOT (X2 >= CoordX1) c'est pareil que (X1 > CoordX1) AND (X2 < CoordX1)

D'un point de vue logique, il faut savoir que le NOT est prioritaire devant OR et AND, par contre OR et AND sont de mêmes priorité (d'où l'utilité des parenthèses)
0
toto > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
petites rectifications : la priorité de NOT ne relève pas de la logique, mais d'une convention purement humaine. Et dans tous les langages et notations que je connais, le AND est prioritaire sur le OR
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > toto
 
Je ne parle pas de programmation, mais de logique.

Pour la Logique des Propositions (de même pour la Logique Booléenne) le ET et le OU sont de mêmes priorités, et le NON est de priorité supérieure

Après tous les langages sont censés suivre ces bases fondamentales de la Logique, même s'ils sont souvent plus souple en autorisant des successions de ET et de OU auxquels cas ils les traitent de gauche à droite...
0