RobotC
Résolu
hdiama
Messages postés
188
Date d'inscription
Statut
Membre
Dernière intervention
-
hdiama Messages postés 188 Date d'inscription Statut Membre Dernière intervention -
hdiama Messages postés 188 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je voudrais comprendre un truc que je trouve souvent dans les codes en RobotC, qui est la boucle while(true)...
Je m'explique:
exemple:
while (true){
//du code
}
else{
//du code
}
je me dis que while(true) est une boucle infinie, on rentre dans la boucle et on y ressort plus, car on a toujours true.
Je me trompe ou pas?
merci d'avance!
je voudrais comprendre un truc que je trouve souvent dans les codes en RobotC, qui est la boucle while(true)...
Je m'explique:
exemple:
while (true){
//du code
}
else{
//du code
}
je me dis que while(true) est une boucle infinie, on rentre dans la boucle et on y ressort plus, car on a toujours true.
Je me trompe ou pas?
merci d'avance!
12 réponses
Oui, c'est bien cela et c'est d'ailleurs l'effet recherché. En effet, on évite les boucles infinies en programmation classique par contre, on les recherche en robotique car on veut qu'un comportement, une vérification de variable, une lecteur d'un capteur... se fasse indéfiniment. Mais alors, la question qui vient, c'est comment un robot ne reste-t-il pas bloqué ? La réponse est "Multitâche, parallélisme...". Un robot doit savoir faire plusieurs choses à la fois : lire la valeur de certains capteurs, indiquer aux moteurs combien de tours de roue ils doivent tourner, mettre à jour des variables en mémoire... Il est impensable qu'un robot s'arrête de se déplacer car il est en train de demander à son capteur de distance s'il y a un obstacle devant lui, même si cette lecture est rapide.
Donc en robotique, on se sert massivement du multitâche (ou multithreading qui en est une variante) de sorte qu'une tâche peut tout à fait contenir un while (true). Le code ne s'arrêtera pas de lui même mais c'est le code qui a lancé la tâche (ou le thread) qui va l'arrêter.
Donc en robotique, on se sert massivement du multitâche (ou multithreading qui en est une variante) de sorte qu'une tâche peut tout à fait contenir un while (true). Le code ne s'arrêtera pas de lui même mais c'est le code qui a lancé la tâche (ou le thread) qui va l'arrêter.
Le "else" ses pour un "if" et non le "while".
pi si tu a un while(true) sa veut dire que tu a du code dans ton while qui finit par le changer en false.
pi si tu a un while(true) sa veut dire que tu a du code dans ton while qui finit par le changer en false.
Ok, je vois;
Mais sinon, je cherche à faire garder l'équilibre à un gyropode. Tu ne saurais pas comment faire?
Merci pour ta réponse!
Mais sinon, je cherche à faire garder l'équilibre à un gyropode. Tu ne saurais pas comment faire?
Merci pour ta réponse!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utiliser un break fonctionne mais c'est un solution un peu agressive... pour sortir de la boucle plus proprement, il suffit de l'instancier à un boolean qui est true au début et lorsque le travail voulu est fini on le met à false....
boolean run = true
while(run){
...
}
Lorsqu'on veut sortir de la boucle on suffira de
run = false
boolean run = true
while(run){
...
}
Lorsqu'on veut sortir de la boucle on suffira de
run = false
En fait, j'utilise pas de break, y a un bouton spécial sur le robot pour arrêter, où on peut le faire directement à partir de l'IDE. Mais merci pour a proposition!