| Problème avec IF en chaîne (encore un...) | |
|
|
Auteur | Message |
---|
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 1:07 | |
| Je n'arrive pas à comprendre où je fais une erreur avec des IF en ligne. Dans le code suivant, j'ai placé deux SUB qui à mon avis sont fonctionnellement équivalents. La première ne donne pas le résultat escompté, mais la seconde marche bien. Qui peut me dire pourquoi la première ne marche pas comme je veux ? - Code:
-
dim x3% test1(1,2) print "test1: "+str$(x3%)+" devrait être -1 !" test2(1,2) print "test2: "+str$(x3%)+" est correctement -1 !" end
sub test1(x1%,x2%) x3% = -1 if x1%>0 then if x1%<>x2% then exit_sub if x1%<0 then if x1%=x2% then exit_sub x3% = 0 end_sub
sub test2(x1%,x2%) x3% = -1 if x1%>0 if x1%<>x2% then exit_sub end_if if x1%<0 if x1%=x2% then exit_sub end_if x3% = 0 end_sub | |
|
| |
Invité Invité
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 1:51 | |
| Et bien Klaus, il y a un bug tout court. En modifiant légérement: - Code:
-
dim x3%
test1(1,2) print "test1: "+str$(x3%)+" devrait être -1 !"
test2(1,2) print "test2: "+str$(x3%)+" est correctement -1 !" end
sub test1(x1%,x2%) x3% = -1 if x1%>0 then if x1%<>x2% then message " exit_sub" : exit_sub if x1%<0 then if x1%=x2% then exit_sub x3% = 0 end_sub
sub test2(x1%,x2%) x3% = -1 if x1%>0 if x1%<>x2% then exit_sub end_if if x1%<0 if x1%=x2% then exit_sub end_if x3% = 0 end_sub Là le résultat est bon. |
|
| |
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 2:13 | |
| Ouaouhhhhhh ! Tu as raison, Cosmos70 ! Voilà qui va intéresser Jack, je suppose !
Tu le croiras si tu veux, mais j'ai passé un temps fou à résoudre le problème. Le code que j'ai présenté pour mettre le problème en évidence, est en effet une version anorexique d'un code beaucoup plus complexe que je n'arrivais pas à faire marcher, mais qui aurait été rébarbatif à publier in extenso. Il a fallu que je trouve le contournement lourdingue pour comprendre ce qui se passe. Et ainsi, j'ai pu produire ces quelques lignes qui montrent le problème.
Merci pour ton soutien, Cosmos70. Cela me rassure - je ne suis pas encore devenu gâteux ! | |
|
| |
Invité Invité
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 2:25 | |
| De rien Klaus. J'ai eu plus d'une fois des problèmes, que j'évite de parler, vu que généralement on n'y répond pas (et que c'est moi qui passe pour un gâteux). Mais j'ai remarqué plusieurs fois qu'un message qui arrête le programme, le problème disparaît. Un peu comme display pour permettre à Windows de faire son travail. |
|
| |
papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 2:52 | |
| Salut Klaus. C’est curieux ! En mettant une ‘instruction vide’ seulement : (deux-points) entre then et exit_sub le résultat devient correct. - Code:
-
dim x3% test1(1,2) print "test1: "+str$(x3%)+" devrait être -1 !" test2(1,2) print "test2: "+str$(x3%)+" est correctement -1 !" end
sub test1(x1%,x2%) x3% = -1 if x1%>0 then if x1%<>x2% then : exit_sub if x1%<0 then if x1%=x2% then : exit_sub x3% = 0 end_sub
sub test2(x1%,x2%) x3% = -1 if x1%>0 if x1%<>x2% then exit_sub end_if if x1%<0 if x1%=x2% then exit_sub end_if x3% = 0 end_sub
Edit : Encore c’est curieux ! Si on met ‘l’instruction vide’ entre le then et le if, le résultat devient aussi correct. - Code:
-
if x1%>0 then : if x1%<>x2% then exit_sub
Que peut-on en conclure ? | |
|
| |
bignono
Nombre de messages : 1127 Age : 66 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 6:52 | |
| Bonjour à tous, Oui, c'est vraiment curieux! si on met - Code:
-
if ... then:print .... il y a erreur parce que les 2 points sont collés au then mais si on laisse un espace entre le then et les 2 points là ça marche! - Code:
-
dim x1%,x2%,x3% x3%=-1 x2%=4 x1%=x2%-x3%
if x1%=5 then :print x1%
x1%=x2%+x3% if x1%=3 then :if x2%-x3%=5 then print x1%
Je ne crois pas que ce soit tellement logique de programmer comme cela, quoique... Jack tu as du travail! même la dernière ligne de mon petit exemple si on y met plusieurs if then ça marche du moment qu'il y a un espace après le then : - Code:
-
if x1%=3 then :if x2%-x3%=5 then :if x2%=4 then :if x3%=-1 then print x1%
A + | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 8:25 | |
| Personnellement j'ai toujours considéré qu'il n'était pas possible d'imbriquer deux IF THEN sur la même ligne comme l' a tenté Klaus dans le test 1. La méthode du test 2 est la seule valable à mon avis. Pour moi, pour relancer un test if directement derrière then il faut utiliser 2 lignes: IF première condition IF deuxième condition THEN fait-ci END_IF.
Pourquoi ne pas utiliser AND plutôt que IF condition1 THEN IF condition2 THEN - Code:
-
dim x3% test1(1,2) print "test1: "+str$(x3%)+" devrait être -1 !" test2(1,2) print "test2: "+str$(x3%)+" est correctement -1 !" end
sub test1(x1%,x2%) x3% = -1 if x1%>0 and x1%<>x2% then exit_sub if x1%<0 and x1%=x2% then exit_sub x3% = 0 end_sub
sub test2(x1%,x2%) x3% = -1 if x1%>0 if x1%<>x2% then exit_sub end_if if x1%<0 if x1%=x2% then exit_sub end_if x3% = 0 end_sub Je ne crois pas que Jack est prévu cette façon d'utiliser IF. J'aimerais connaître son avis. A+ | |
|
| |
papydall
Nombre de messages : 7009 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec IF en chaîne (encore un...) Lun 6 Jan 2014 - 10:31 | |
| Bonjour Jean Claude. Bonjour tout le monde. Ton analyse est correcte mais j’ai une petite objection : L’une des syntaxes du If est : IF Condition THEN Instruction Or tous les langages de programmation que je connais (y compris Panoramic) définissent Instruction comme étant une instruction simple ou instruction composée. Si, donc, on accepte que la condition puisse être composée, alors il y a bien un problème avec la structure IF telle qu’elle est définie dans Panoramic. Certes on peut (presque) toujours trouver une solution pour contourner un problème quelconque, mais quand on aspire à la perfection, on doit procéder autrement. - Jean Claude a écrit:
- Je ne crois pas que Jack
est ait prévu cette façon d'utiliser IF. J'aimerais connaître son avis. Moi aussi j’aimerais connaître son avis. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Problème avec IF en chaîne (encore un...) | |
| |
|
| |
| Problème avec IF en chaîne (encore un...) | |
|