​ ​ ​ ​ Problème avec la commande If...then\elseif...then\else\endif
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 16

Thread: Problème avec la commande If...then\elseif...then\else\endif

  1. #1
    New Member
    Join Date
    Jan 2014
    Location
    Vaujours
    Posts
    12

    Default Problème avec la commande If...then\elseif...then\else\endif

    Bonjour,
    Lorsque j'écris la ligne de BASIC suivante:
    Code:
    If EntA < 10 and EntB < 10 then NEUTRE: elseif EntA > EntB then DROITE: else GAUCHE: endif
    le vérificateur m'indique une erreur de syntaxe à ou avant la position 55 (curseur en dessous du n du 2ème EntB)
    et envoie le message:Erreur: Elseif sans If.
    Que dois-je corriger pour que cette ligne devienne valide?
    Merci de votre aide.
    Last edited by Couqui93; 01-09-2017 at 12:29. Reason: une meilleure présentation

  2. #2
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,832

    Default

    Bonjour,

    Code:
    If EntA < 10 and EntB < 10 then: goto NEUTRE: elseif EntA > EntB then: goto DROITE: else goto GAUCHE: endif
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  3. #3
    New Member
    Join Date
    Jan 2014
    Location
    Vaujours
    Posts
    12

    Default

    Merci beaucoup,
    Cela fonctionne également avec l'écriture suivante:
    Code:
    If EntA < 10 and EntB <10 then: goto NEUTRE: elseif EntA > EntB then goto DROITE: else goto GAUCHE: endif
    Une autre écriture est possible:
    Code:
    If EntA < 10 and EntB <10 then
                  goto NEUTRE
          elseif EntA > EntB then
                  goto DROITE
          else
                  goto GAUCHE
    endif
    Last edited by Couqui93; 01-09-2017 at 17:25. Reason: rajout d'information

  4. #4
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,832

    Default

    Ben oui puisque les ":" sont interprétés comme des retours à la ligne.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  5. #5
    New Member
    Join Date
    Jan 2014
    Location
    Vaujours
    Posts
    12

    Default

    Bonjour,
    J'espère ne pas vous froisser, M.PieM, en vous disant ceci:
    Ce n'est pas si évident que cela...
    En effet, si l'on regarde le dernier code que j'ai écrit, il y a 6 retours à la ligne, alors que seulement 4 ":" ont été suffisants dans le code précédent (5 pour le votre).
    Cordialement

  6. #6
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,832

    Default

    Quote Originally Posted by Couqui93 View Post
    Bonjour,
    J'espère ne pas vous froisser, M.PieM, en vous disant ceci:
    Ce n'est pas si évident que cela...
    En effet, si l'on regarde le dernier code que j'ai écrit, il y a 6 retours à la ligne, alors que seulement 4 ":" ont été suffisants dans le code précédent (5 pour le votre).
    Cordialement
    Je n'ai jamais dit que c'était évident!
    Je disais simplement que faire un retour à la ligne est équivalent à ":"

    Le problème est que le correcteur de syntaxe accepte parfois des écritures qui ne sont pas forcément conformes. Un "do loop while b1>b2" est parfaitement traduit alors que ce n'est pas la syntaxe classique!
    La formulation If xxxx then goto est équivalent à un
    if xxxx then
    goto yyyy
    endif

    donc votre elsif qui vient après n'est pas accepté, car il a été précédé d'un endif.

    Pour éviter ce genre de désagrément je vous conseille d'utiliser la syntaxe "normale" avec des retours à la ligne ce qui a en plus l'avantage de rendre le code plus lisible.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  7. #7
    New Member
    Join Date
    Jan 2014
    Location
    Vaujours
    Posts
    12

    Default

    Merci de nouveau.
    Vous me répondiez, entre autre:
    "Le problème est que le correcteur de syntaxe accepte parfois des écritures qui ne sont pas forcément conformes. Un "do loop while b1>b2" est parfaitement traduit alors que ce n'est pas la syntaxe classique!"

    Je saute sur l'occasion pour vous demander si vous connaissez d'autres écritures de ce type.
    Je pense que cela devrait intéresser les programmeurs en Basic PICAXE.
    Merci de prêter attention à ma requête.
    Je peux ouvrir une autre discussion concernant ce sujet, si vous le désirez.

  8. #8
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,832

    Default

    Quote Originally Posted by Couqui93 View Post
    "Le problème est que le correcteur de syntaxe accepte parfois des écritures qui ne sont pas forcément conformes. Un "do loop while b1>b2" est parfaitement traduit alors que ce n'est pas la syntaxe classique!"
    Je saute sur l'occasion pour vous demander si vous connaissez d'autres écritures de ce type.
    Je pense que cela devrait intéresser les programmeurs en Basic PICAXE.
    Très sincèrement je ne vois pas l'intérêt d'utiliser une écriture un peu biaisée, car elle ne fait absolument rien gagner en nombre d'octets programmes !
    que j'écrive:
    high C.1
    high C.2
    high C.3
    ou
    high C.1,C.2,C.3
    ou
    high 9,10,11
    est strictement identique ( 8 octets) mais le dernier n'est pas trop lisible.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

  9. #9
    New Member
    Join Date
    Jan 2014
    Location
    Vaujours
    Posts
    12

    Default

    Bonjour,
    Que nenni, ce n'est point pour gagner quelques octets de programme que je vous ai soumis cette requête...
    C'eût été crucial lorsque je programmais avec un SINCLAIR (comprenant 1 kilooctet de RAM additionnelle!).
    Là, la chasse à l'octet était ouverte...
    Il en est tout autrement aujourd'hui, fort heureusement.

    Le but de ma demande était de savoir si, depuis 2010, vous aviez recencé des "astuces" de programmation de ce genre,
    que l'on ne trouve pas dans les manuels Picaxe,
    et, si vous pouviez consacrer, de temps en temps, un peu de votre loisir pour
    établir une liste de ces particularités.
    Par exemple j'en ai relevé une autre en farfouinant dans ce forum:
    b4=b1 min b2 min b3 (pour sélectionner la plus grande valeur parmi 3) ou
    b4=b1 max b2 max b3 ( pour isoler la plus petite valeur parmi 3).
    Mais peut-être que je me trompe et qu'il n'y ait finalement que très peu de cas.
    Cordialement.

  10. #10
    Senior Member
    Join Date
    Jan 2010
    Location
    34 France
    Posts
    3,832

    Default

    Ecrire b4=b1 min b2 min b3 n'est pas pour moi une particularité, car c'est l'application stricte de la commande min ou max.
    Au même titre qu'on écrit b4 = b1 + b2 - b3
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème . (Les Shadoks)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •