| erreur logical expression | |
|
|
Auteur | Message |
---|
philou029
Nombre de messages : 49 Age : 57 Localisation : BREST Date d'inscription : 17/10/2010
| Sujet: erreur logical expression Sam 4 Déc 2010 - 4:36 | |
| j'ai une erreur dans cette ligne de code quelqun pourrait il m'aiguiller
dim postir2,hb1,tirv2,vb1 if ((postir2)+12)>=hb1 and ((postir2)+16)<=hb1+7 and ((tirv2)+24)>=vb1 and tirv2<((vb1)+7) then terminate | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 7:39 | |
| Je pense que tu devrais supprimer toutes les parenthèses, car dans ce cas precis elle ne servent à rien. Cela dit: çà ne changera pas le problème, vu que le résultat devrait être le même.
voir fonctions logiques dans la manuel utilisateur.
A+ | |
|
| |
Invité Invité
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 8:33 | |
| J'ai eu le même problème; il y a quelques temps, mais je ne retrouve pas le sujet. On m'a dit qu'il n'y avait pas de problème avec AND. N'empêche que pour contourner le problème que j'avais, j'ai du décomposer le teste en deux lignes. Je pense que dans ton cas ce serait: - Code:
-
if ((postir2)+12)>=hb1 and ((postir2)+16)<=hb1+7 if ((tirv2)+24)>=vb1 and tirv2<((vb1)+7) teminate end_if end_if Quelque chose comme cela. En tout cas c'est la méthode que j'ai utilisé pour ce problème. Bonne chance. |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 11:31 | |
| Volià la version correcte de tes lignes:
dim postir2,hb1,tirv2,vb1 if ((postir2+12)>=hb1) and ((postir2+16)<=(hb1+7)) and ((tirv2+24)>=vb1) and (tirv2<(vb1+7)) then terminate
Il faut: 1. entourer de paranthèses TOUTES les expressions logiques dont l'évaluation doit être faite AVANT le "and" 2. entourer de parenthèses TOUTES les expressions arithmétiques dont l'évaluation doit être faite AVANT l'opérateur logique
Les caractères en gras sont mes rajouts.
Tout ceci est peut-être gênant, mais c'est lié à la priorité des opérateurs. | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 11:45 | |
| Pas d'accord avec toi Klaus, il me semble que Cosmos a raison. Essai ce code, en particulier les 3 lignes qui sont shuntées, il y a quelque chose que je ne comprend pas - Code:
-
dim a,b,c,d,a$
a=1:b=2:c=3:d=4: a$="OK"
if a=1 and b=2 and c=3 and d=4 then print "OK1"
if a*2=2 and b=2 and c=3 and d=4 then print "OK2"
if (a*2)=2 and b=2 and c=3 and d=4 then print "OK3"
if (a*2)+b=a*4 and a=(d-c) and c=a*3 and a=4/d then print "OK4"
if (a*2)+b=4 and a=(d-c) and c=a*3 and a=4/d and a$="OK" then print "OK5"
if (a*2)+b=a*4 and a=(d-c) and c=a*3 and a=4/d and a$<>"" then print "OK6"
' if (a*2)+b=a*4 and a=(d-c) and (c=(a*2)+a) and a=(4/d) and a$="OK" then print "OK7"
' if ((a*2)+b=a*4) and (a=(d-c)) and ((c=(a*2)+a)) and (a=(4/d)) and a$="OK" then print "OK8"
' if (a*2)+b=a*4 and (a*2)+b=a*4 then print "OK9"
A+ | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 12:09 | |
| Qu'est-ce qui ne colle pas dans les règles que j'ai données ci-dessus ? Voici la première de tes 3 lignes adaptée selon ma préconisation, et ça marche: - Code:
-
dim a,b,c,d,a$
a=1:b=2:c=3:d=4: a$="OK"
if a=1 and b=2 and c=3 and d=4 then print "OK1"
if a*2=2 and b=2 and c=3 and d=4 then print "OK2"
if (a*2)=2 and b=2 and c=3 and d=4 then print "OK3"
if (a*2)+b=a*4 and a=(d-c) and c=a*3 and a=4/d then print "OK4"
if (a*2)+b=4 and a=(d-c) and c=a*3 and a=4/d and a$="OK" then print "OK5"
if (a*2)+b=a*4 and a=(d-c) and c=a*3 and a=4/d and a$<>"" then print "OK6"
' if (a*2)+b=a*4 and a=(d-c) and (c=(a*2)+a) and a=(4/d) and a$="OK" then print "OK7" if ((a*2+b)=a*4) and (a=(d-c)) and (c=(a*2+a)) and (a=(4/d)) and (a$="OK") then print "OK7"
' if ((a*2)+b=a*4) and (a=(d-c)) and ((c=(a*2)+a)) and (a=(4/d)) and a$="OK" then print "OK8"
' if (a*2)+b=a*4 and (a*2)+b=a*4 then print "OK9"
D'accord, ce n'est pas élégant. Jack pourra peut-être y apporter quelque chose, mais j'en doute, en tout cas pas facilement. Je connais bien le problème des conditions logiques composées - je me bats avec depuis le début. Mais avec cette technique, ça marche - la preuve ! | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: erreur logical expression Sam 4 Déc 2010 - 13:05 | |
| Ce qui m'a troublé, c'est qu'en fait on peut écrire de plusieurs manières, mais bon l'important c'est que çà marche. Dans le code suivant on voit 4 manières d'écrire if a*2+b=4 ....... - Code:
-
dim a,b,c,d,a$
a=1:b=2:c=3:d=4: a$="OK"
if a*2+b=4 and a=(d-c) then print "OK4"
if (a*2)+b=4 and a=(d-c) then print "OK5"
if ((a*2)+b)=4 and a=(d-c) then print "OK6"
if ((a*2+b)=a*4) and (a=(d-c)) then print "OK7"
je me demande, s'il existe une règle précise.... A+ | |
|
| |
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Sam 4 Déc 2010 - 13:30 | |
| Eh bien, ce qu'il faut, c'est mettre suffisamment de parenthèses (et dans le bon sens) pour que l'ordinateur ne se trompe pas dans le choix des calculs à faire, maintenant, on peut mettre aussi des parenthèses inutiles, c'est n'est pas joli, mais ça ne gêne pas le microprocesseur. | |
|
| |
philou029
Nombre de messages : 49 Age : 57 Localisation : BREST Date d'inscription : 17/10/2010
| Sujet: Re: erreur logical expression Dim 5 Déc 2010 - 4:31 | |
| merci bien a vous tous ca va m'éviter de réécrire toute la structure de mon programme
| |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: erreur logical expression Dim 5 Déc 2010 - 9:34 | |
| Je crois me souvenir qu'il y a un ordre de priorité à respecter pour les calculs. Je vais essayer de retrouver ou j'ai vu çà.
A+ | |
|
| |
Contenu sponsorisé
| Sujet: Re: erreur logical expression | |
| |
|
| |
| erreur logical expression | |
|