[Programmation] Opérateur OU (||) dans boucle while (CCS C)
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Opérateur OU (||) dans boucle while (CCS C)



  1. #1
    invite7749f703

    Opérateur OU (||) dans boucle while (CCS C)


    ------

    Bonjour,

    J'ai un soucis, je n'arrive pas à faire fonctionner correctement mon OU logique dans ma boucle while.
    (J'utilise le compilateur CCS C)
    Code:
    while((input(BP1)==1) || (input(BP0)==1)) {}
    C'est à dire que tant que mes boutons poussoirs ne sont pas appuyés (à 1 dans mon cas), on attend.
    Or avec cette syntaxe, l'appui sur un ou sur l'autre ne fais rien.


    J'ai donc fouillé sur le net et j'ai trouvé d'autres syntaxes (dont aucune ne fonctionne dans mon cas) :
    Code:
    while(input(BP0||BP1)==1) {}
    Code:
    while(!(input(BP1)==0 && input(BP0)==0)) {}
    Code:
    while(input(BP1)==1 , input(BP0)==1) {}
    Celui si ne fait fonctionner que BP0, et si j'inverse que je mets :
    Code:
    while(input(BP0)==1 , input(BP1)==1) {}
    C'est BP1 qui fonctionne seulement.


    Je précise que mes boutons poussoirs fonctionnement bien correctement (sur un programme "simple" par exemple).
    J'espère que quelqu'un pourra m'apporter de l'aide et je vous remercie par avance

    -----

  2. #2
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    J'ai également essayé :
    Code:
    while(input(BP0||BP1)==1) {}
    Sans résultat..

  3. #3
    Povogla

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Salut,

    essaye simplement :

    while( input(BP0) || input(BP1) )
    {
    ...
    }

    La fonction input renvoie déjà un booléen le test est donc superflu.

  4. #4
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par Povogla Voir le message
    Salut,

    essaye simplement :

    while( input(BP0) || input(BP1) )
    {
    ...
    }

    La fonction input renvoie déjà un booléen le test est donc superflu.
    Ça ne fonctionne malheureusement toujours pas..

  5. A voir en vidéo sur Futura
  6. #5
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    J'ai trouvé une solution ! (du moins une alternative qui fait fonctionner mon programme correctement à l'aide de goto et de if/else )
    Code:
     
    ATTENTE:
    if(input(BP0)==1) {
                       if(input(BP1)==1){goto ATTENTE;} 
                       else {goto LANCEMENT;}
                      }
    else {
    LANCEMENT: 
    .....
    }
    Merci quand même, je n'arrive pas à comprendre pourquoi l'opérateur OU ne fonctionne pas dans le while..
    Cela dit, mon programme fonctionne tel quel, mais si quelqu'un à une solution je suis quand même preneur ^^

  7. #6
    Povogla

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Sauf cas particulier, on n'utilise pas de goto en C pour éviter les ''codes spaghettis''


    Par contre, ton soucis viens à mon avis d'une erreur de logique plutôt qu'une erreur de syntaxe.

    Essaye avec :

    while( input(BP0) && input(BP1) )
    {
    "ne fais rien"
    }

    Fais une table de vérité de tes deux boutons et tu comprendras pourquoi

  8. #7
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par Povogla Voir le message
    Sauf cas particulier, on n'utilise pas de goto en C pour éviter les ''codes spaghettis''


    Par contre, ton soucis viens à mon avis d'une erreur de logique plutôt qu'une erreur de syntaxe.

    Essaye avec :

    while( input(BP0) && input(BP1) )
    {
    "ne fais rien"
    }

    Fais une table de vérité de tes deux boutons et tu comprendras pourquoi
    Ça fonctionne !
    J'ai saisi le truc, fallait penser autrement ^^ Merci beaucoup en tout cas !
    Et qu'appelles-tu "'codes spaghettis'' ?

  9. #8
    Povogla

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Voilà qui est bien =)

    Un code spaghetti est un code non structuré difficile à comprendre/maintenir..

    Un peu de lecture :
    https://fr.wikipedia.org/wiki/Programmation_spaghetti

    Pour éviter ça :

    1 - On pose le problème ''sur papier'' avant de coder
    2 - On structure son code (convention d'écriture, fonctions, machines d'états,...)


    Sinon une autre-chose que l'on évite en plus des goto c'est le code bloquant (du style du while que tu es entrain d'implémenter).
    Dernière modification par Povogla ; 20/06/2017 à 15h32.

  10. #9
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par Povogla Voir le message
    Voilà qui est bien =)

    Un code spaghetti est un code non structuré difficile à comprendre/maintenir..

    Un peu de lecture :
    https://fr.wikipedia.org/wiki/Programmation_spaghetti

    Pour éviter ça :

    1 - On pose le problème ''sur papier'' avant de coder
    2 - On structure son code (convention d'écriture, fonctions, machines d'états,...)


    Sinon une autre-chose que l'on évite en plus des goto c'est le code bloquant (du style du while que tu es entrain d'implémenter).
    Ah d'accord merci pour ces précisions ! C'est vrai qui ça peut très vite partir en vrille
    Du coup si je comprend bien dans tous les cas je fais un code plutôt dégueu.. ahah
    Si il y a une solution plus propre pour mes 2 boutons je me demande laquelle ^^

  11. #10
    Povogla

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Une solution possible est donnée dans ma réponse précédente.

    Structuré ton code sous forme d'une machine d'état.

    Le mieux si tu souhaites avancer dans la bonne direction serait certainement de trouver un bon cours de langage C
    appliqué au microcontrôleur et de le suivre. Je n'ai malheureusement pas de cours à conseiller.

  12. #11
    invite7749f703

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par Povogla Voir le message
    Une solution possible est donnée dans ma réponse précédente.

    Structuré ton code sous forme d'une machine d'état.

    Le mieux si tu souhaites avancer dans la bonne direction serait certainement de trouver un bon cours de langage C
    appliqué au microcontrôleur et de le suivre. Je n'ai malheureusement pas de cours à conseiller.
    Oui, c'est d'ailleurs celle que j'ai utilisée !
    Mais tu as parlé du code bloquant, et je ne vois pas comment faire autrement dans mon cas

    Et les cours ça me prend malheureusement trop la tête..

  13. #12
    Povogla

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par NicolasV08 Voir le message
    Oui, c'est d'ailleurs celle que j'ai utilisée !
    Mais tu as parlé du code bloquant, et je ne vois pas comment faire autrement dans mon cas
    C'est très bien, par contre actuellement tu est prisonnier de ton while tant qu'aucun bouton n'est pressé.
    Peut-être que cela ne te pose pas de problème dans ton cas mais si tu souhaites ajouter d'autre fonctions à ton code
    tu remarquerais vite que cela deviendra compliqué.
    As-tu utilisé un switch case pour ta machine d'état? Si tel est le cas, tu ne devrais pas ressentir la nécessité d'utiliser
    un while pour le test de tes boutons.

    Citation Envoyé par NicolasV08 Voir le message
    Et les cours ça me prend malheureusement trop la tête..
    C'est par contre le meilleur moyen de prendre les bonnes habitudes pour ne plus se prendre la tête à long terme =)
    Dernière modification par Povogla ; 20/06/2017 à 16h46.

  14. #13
    stefjm

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Citation Envoyé par NicolasV08 Voir le message
    Ça fonctionne !
    J'ai saisi le truc, fallait penser autrement ^^ Merci beaucoup en tout cas !
    Logique...
    Citation Envoyé par NicolasV08 Voir le message
    Et les cours ça me prend malheureusement trop la tête..
    Dans ce cas, faire autre chose...
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  15. #14
    jiherve

    Re : Opérateur OU (||) dans boucle while (CCS C)

    Bonsoir
    Je n'ai pas tout lu mais :
    Code:
    while((input(BP1)==1) || (input(BP0)==1)) {}
    est vrai si BP1 = 1 ou BP2 = 1 et sera faux si BP1=0 ET BP2 = 0
    JR
    l'électronique c'est pas du vaudou!

Discussions similaires

  1. boucle dans une boucle
    Par invite320d6e59 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 15/04/2012, 10h51
  2. Opérateur transposé / Opérateur complexe conjugué
    Par invitebdd94213 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 14/07/2009, 10h17
  3. Opérateur linéaire dans un Hilbert
    Par invite1dcc6e5b dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 13/12/2008, 22h32
  4. Changement de variable dans un opérateur
    Par invite1d6d0f73 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 08/08/2008, 16h33
  5. Opérateur différentiel et opérateur intégrale associé
    Par invite412f80f3 dans le forum Mathématiques du supérieur
    Réponses: 14
    Dernier message: 08/07/2006, 19h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...