Go Down

Topic: Faire de 5 booleans une variable type 00010 (Read 3571 times) previous topic - next topic

biggil

Soit je suis fatigué, soit... c'est le pastis
Non, c'est la syntaxe de case.
Les deux-points vont après la valeur:
Code: [Select]
case 00011 :
Aide toi, le compilateur t'aidera

kammo

Pfffffffffff
Merci
Bon j'arrête pour aujourd'hui
C'est une erreur ridicule ^^
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

J-M-L

#47
Apr 23, 2018, 08:27 pm Last Edit: Apr 23, 2018, 08:37 pm by J-M-L
Non, c'est la syntaxe de case.
Les deux-points vont après la valeur:
Code: [Select]
case 00011 :

et vous ne pouvez pas écrire 0011 le compilateur va croire que c'est une valeur en octal (base 8 ) et pas en binaire... il faut écrire B0011 ou B11 tout simplement avec le B pour binaire.

il faut savoir que le compilateur ne savait décoder que la base 10, la base 8 et la base 16.

en base 10, vous écrivez normalement par exemple 17 (en décimal = 1 x 10 + 7 x 1)
en base 16, on met 0x devant le chiffre par exemple 0x11 (ça fait aussi 17 en décimal, 1x16 + 1x1)
en base 8, on met 0 devant les chiffres... et donc quand on écrit 021 ça fait 17 en décimal (2 x 8 + 1 x 1)

le compilateur ne connaissait pas nativement une notation en binaire (enfin depuis C++14 on peut écrire 0b10011100) et si vous vous demandez c'est quoi ces Bxxxx ce sont des macros de l'ancien temps... Quelqu'un s'est tapé le boulot d'écrire toutes les combinaison possibles dans le fichier binary.h

Code: [Select]
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
...
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

RIN67630

#48
Apr 23, 2018, 09:14 pm Last Edit: Apr 23, 2018, 11:52 pm by RIN67630
et vous ne pouvez pas écrire 0011 le compilateur va croire que c'est une valeur en octal (base 8 ) et pas en binaire... il faut écrire B0011 ou B11 tout simplement avec le B pour binaire.
Non.

[connerie de ma part, que j'ai effacée pour ne pas embrouiller davantage]

Mille excuses.

J-M-L

#49
Apr 23, 2018, 09:47 pm Last Edit: Apr 24, 2018, 07:58 am by J-M-L
Non.
ÉDIT: Ouf ça a été corrigé :)

essayez code code
Code: [Select]
byte octal = 0011;

void setup() {
  Serial.begin(115200);
  Serial.println(octal);
}

void loop() {}

 vous verrez que la console affiche 9 c'est à dire qu'on a bien 0011 =  1x8 + 1x1 = 9 on est en octal...

Pour le B majuscule ce n'est pas la spécification du C++, comme dit plus haut c'est bien des #define pour chacune des formes et donc c'est le preprocesseur qui remplace; la notation officielle serait de commencer par 0b par exemple 0b0011

et je n'invente pas tout cela, c'est la specification

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

RIN67630

Allons vous avez 400 posts sur ce forum... ne dites pas n'importe quoi....Ça vous avance à quoi?
Ups! C'est vrai. J'étais fatigué.

jfs

Ups! C'est vrai. J'étais fatigué.

ça peut arriver à tout le monde..... non ?   :D
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

J-M-L

#52
Apr 24, 2018, 07:52 am Last Edit: Apr 24, 2018, 07:59 am by J-M-L
Oui :)

J'ai édité mon message pour que ce soit plus lisible
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

kammo

En effet, je saisis mieux, à force d'expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée. 
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

J-M-L

En effet, je saisis mieux, à force d'expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée. 
commencez par mettre des B0011 si vous utilisez du binaire ça aidera :)

ensuite comme expliqué plus faut dans la discussion, pas sûr que ce soit super pertinent de procéder comme cela... mais c'est une autre histoire
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

RIN67630

En effet, je saisis mieux, à force d'expérimentations et de coups de mains, ce que sont ces "modes" d'écriture. Je ne suis pas encore à l'aise, mais je comprends déjà que ça a des avantages.
Mon code fonctionne, reste à créer un algo magique avec des maths dedans. J'ai le même niveau en maths qu'un écureuil de corée.  
Un détail qui a son importance pour bien comprendre: ce ne sont pas des "modes" d'écriture au sens informatique, mais des présentations différentes au programmeur de la même chose.

L' Arduino voit exactement le même code que tu ecrives

case 17: ou
case B01001:


Maintenant t'as pas besoin de maths, ni d'un algo magique.

Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:
Y'a pas plus simple.

kammo

commencez par mettre des B0011 si vous utilisez du binaire ça aidera :)

    C'est le cas dans mon code, c'était le but. pour ce qui est des case, je sais faire comme ça, mais il y a toujours mieux. Je lâche pas l'affaire, si je trouve pas cette semaine, ça sera peut-être dans deux mois. Mes connaissances ne me permettent pas d'optimiser mon code pour l'instant.

Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:

    Ouais, mais ça fait un robot qui zigzag et manque de finesse. Je cherche un moyen de définir la vitesse de rotation des roues en fonction de leur écartement et de l'empattement. Le capteur, selon sa distance avec l'essieu, détermine un angle, je voudrais partir de là. C'est un calcul de différentiel, faut mixer des équation écrites à moitié en grec, je ferai ça à tête reposée.
Make it, or make it burn.
carte des membres:
https://drive.google.com/open?id=1QmXJT44QyZHM3SIgDaMo7MGUbBSKAaVD&usp=sharing

biggil

J'ai le même niveau en maths qu'un écureuil de corée.  
Les petits coréens sont très forts en maths ;) 
Aide toi, le compilateur t'aidera

RIN67630

commencez par mettre des B0011 si vous utilisez du binaire ça aidera :)

    C'est le cas dans mon code, c'était le but. pour ce qui est des case, je sais faire comme ça, mais il y a toujours mieux. Je lâche pas l'affaire, si je trouve pas cette semaine, ça sera peut-être dans deux mois. Mes connaissances ne me permettent pas d'optimiser mon code pour l'instant.

Tu ecris simplement ce qu'il faut faire dans chaque cas de figure case n:

    Ouais, mais ça fait un robot qui zigzag et manque de finesse. Je cherche un moyen de définir la vitesse de rotation des roues en fonction de leur écartement et de l'empattement. Le capteur, selon sa distance avec l'essieu, détermine un angle, je voudrais partir de là. C'est un calcul de différentiel, faut mixer des équation écrites à moitié en grec, je ferai ça à tête reposée.
Si tes capteurs ne sont pas proportionels, tu auras du mal a faire en finesse, à moins d'en rajouter.


Go Up