While Not
Résolu
texol
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
toto -
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?
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
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...
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...
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
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
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
(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
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)
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)
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...
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...