RobotC

Résolu/Fermé
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 - 28 janv. 2010 à 18:08
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 - 5 nov. 2010 à 16:31
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!

12 réponses

GenerationRobots Messages postés 4 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 23 novembre 2010 2
26 oct. 2010 à 15:10
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.
2
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
5 nov. 2010 à 00:40
Et un simple break; peux cesser une boucle infinie.
2
zelos666 Messages postés 181 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 20 juillet 2010 12
28 janv. 2010 à 18:18
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.
0
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 6
28 janv. 2010 à 18:28
Ok, je vois;
Mais sinon, je cherche à faire garder l'équilibre à un gyropode. Tu ne saurais pas comment faire?
Merci pour ta réponse!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zelos666 Messages postés 181 Date d'inscription mercredi 27 janvier 2010 Statut Membre Dernière intervention 20 juillet 2010 12
28 janv. 2010 à 19:18
Non désolé, ses hors de mes compétence :/
0
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 6
28 janv. 2010 à 19:43
Ok, je te remercie quand même :)
0
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 6
4 nov. 2010 à 21:20
Merci pour les éclaircissements!
0
GenerationRobots Messages postés 4 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 23 novembre 2010 2
5 nov. 2010 à 09:13
Bonne remarque !
0
juveln Messages postés 118 Date d'inscription vendredi 24 septembre 2010 Statut Membre Dernière intervention 19 octobre 2011 15
5 nov. 2010 à 10:11
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
0
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 6
5 nov. 2010 à 11:45
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!
0
Bilow Messages postés 1014 Date d'inscription samedi 21 août 2010 Statut Membre Dernière intervention 2 août 2015 117
5 nov. 2010 à 12:22
Dans ce cas-là, pour fermer, il y a plusieurs possibilités.

Un break;
Le bouton Stop dans l'IDE.
Une variable True / False (mais pas avec while(true) alors)
exit() selon les languages
return 0 s'il y a une fonction int main()
...
0
hdiama Messages postés 188 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 2 janvier 2012 6
5 nov. 2010 à 16:31
ça résume tout en effet :)
0