Aller au contenu


Photo
- - - - -

initialiser tableau avec des variables.


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 03 janvier 2017 - 09:54

Hello tout le monde,
 
je suis un peu honteux de vous poser cette question mais je tourne en rond sur un sujet bien étrange.
 
J'essaie (désespérément) d’initialiser un tableau avec des variables, ainsi :
 
//Variables globale

float X_cuisse_D = 10.7;
float Z_cuisse_D = 20.3;

//tableau globale, accessible dans toutes les procédures
float montableau[2]={0,0};

void setup()
{
Serial.begin(9600);
montableau[2]={X_cuisse_D,Z_cuisse_D}; //et bien là c'est pas BON !!
//test(montableau);


}

void loop()
{

 
}


le message d'erreur retourné est :
 
H:\arduino\PROGRAMMES\ini_tab\ini_tab.ino: In function 'void setup()':

ini_tab:13: error: cannot convert '<brace-enclosed initializer list>' to 'float' in assignment

 montableau[2]={X_cuisse_D,Z_cuisse_D};

              ^

exit status 1
cannot convert '<brace-enclosed initializer list>' to 'float' in assignment
Qu'est ce que j'oublie punaise !!???

#2 Jekert

Jekert

    Auteur

  • Modérateur
  • PipPip
  • 223 messages
  • Gender:Male

Posté 03 janvier 2017 - 12:15

Essaie avec montableau[] = {a,b};
Il me semble que si tu met un nombre entre les [], tu designe un index dans lequel tu souhaites stocker ce qu'il y a après le =. À mon avis, le problème vient fait que tu essaie de mettre 2 valeurs dans un "emplacement". À vérifier

Mon blog  ------  101robotics.com

Ouvrage    -----  Guide pour débuter avec Arduino

Ancien Blog  --  Journal d'un Arduinaute


#3 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 03 janvier 2017 - 12:46

Si tu veux créer tout ton tableau et l'initialiser  avec les valeurs  que tu veux tu peux. 

 

Par contre pour mettre à jour tout le tableau déjà crée c'est pas le même problème. 

 

Le plus simple est de mettre à jour un élément par un élément. 

 

montableau[0]=X_cuisse_D;

montableau[1]=Z_cuisse_D;

 

 

Par contre avec montableau[2] tu essais d'accéder à une case mémoire que tu n'as pas le droit de toucher ... 

 

d'ailleurs au passage si tu veux vraiment tout initialiser à 0 en créant ton tableau tu peux te contenter de : 

float montableau[2]={0,0}; 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#4 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 03 janvier 2017 - 08:36

J'aimerai bien mettre à jour mon tableau autrement que 1 par 1 en fait...
 
j'avais déjà essayé

montableau[]={X_cuisse_D,Z_cuisse_D};

 
Mais sans succès....
 
 

ini_tab:12: error: expected primary-expression before ']' token

 montableau[]={X_cuisse_D,Z_cuisse_D};

            ^

exit status 1
expected primary-expression before ']' token

GREEeeeeeeeeeeeeeeeeeeeeeeeeeee !!!
 

Alors finalement j'me dis et tiens si je faisais un test avec un tableau de pointeur hein Perképa !!!???

//Variables globale

float X_cuisse_D = 10.7;
float Z_cuisse_D = 20.3;

float *pX_cuisse_D = &X_cuisse_D;
float *pZ_cuisse_D = &Z_cuisse_D;

//tableau globale, accessible dans toutes les procédures
float montableau[2]={*pX_cuisse_D,*pZ_cuisse_D};

void setup()
{
Serial.begin(9600);
  Serial.println ("depuis setup");
test(montableau);
}

void loop()
{
Serial.println ("dans loop");
  //test avec le pointeur
*pX_cuisse_D = 100.215;
  //test avec variable
Z_cuisse_D = 2015.35656;
 
  //Serial.println ("valeur de X_cuisse_D = " && X_cuisse_D);
  Serial.println (X_cuisse_D);
  delay(500);
  Serial.println (Z_cuisse_D);
  delay(500);
  //affichage depuis le tableau
  Serial.println ("affichage de montableau");
  Serial.println (montableau[0]);
  Serial.println (montableau[1]);
 
test(montableau);
}

void test(float mon_tab[])
{
Serial.println ("dans test");
Serial.println (mon_tab[0]);
Serial.println (mon_tab[1]);

    Serial.println (X_cuisse_D);
  delay(500);
  Serial.println (Z_cuisse_D);
  delay(500);
}

Alors là à ma grande surprise le serial.print me donne  :

depuis setup
dans test
10.70
20.30
10.70
20.30
dans loop
100.21
2015.36
affichage de montableau //j'affiche ici les données de mon
10.70 //j'affiche ici les données de montableau[0] et horreur les données ne sont pas modifiées !!
20.30 //j'affiche ici les données de montableau[1] et horreur les données ne sont pas modifiées !!
dans test
10.70 //j'affiche ici les données de mon_tab[0] et horreur les données ne sont pas modifiées !!
20.30 //j'affiche ici les données de mon_tab[1] et horreur les données ne sont pas modifiées !!
100.21 //pourtant lorsque j'affiche la valeur de la variable X_cuisse_D c'est bon
2015.36 //pourtant lorsque j'affiche la valeur de la variable Z_cuisse_D c'est bon

Bon alors là on s'aperçoit que les données des tableau, montableau[0], montableau[1], mon_tab[0] et mon-tab[1], non pas changées :

 

affichage de montableau
10.70 // Serial.println (montableau[0]);
20.30 // Serial.println (montableau[1]);

dans test
10.70 // Serial.println (mon_tab[0]);
20.30 // Serial.println (mon_tab[1]);

100.21 // Serial.println (X_cuisse_D);
2015.36 //Serial.println (Z_cuisse_D);

 

Alors que si on affiche les variables X_cuisse_D et Z_cuisse_D on s'aperçoit que les variables ont bien été modifiées !!!

 

Autrement dit le tableau initialisé avec les pointeurs et pas bon du tout ???????

//tableau globale, accessible dans toutes les procédures
float montableau[2]={*pX_cuisse_D,*pZ_cuisse_D};

Je sais vous allez me dire que je suis fou puisqu'un tableau c'est déjà un pointeur mais moi j'aimerais donc bien un tableau de pointeur sur des variables en fait !!!!

 

Pfeeeeeeeeeeeee c'te boubier !!!????



#5 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 934 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 03 janvier 2017 - 09:41

Si tu insistes vraiment il existe des outils : grosso modo tu passe par des pointeurs, ( de manière implicite ou non ) 

 

en changeant l'adresse des pointeurs de ton tableau ou en utilisant memcpy par exemple... 

 

je te conseil de jeter rapidement un oeil ici http://forum.arduino.cc/index.php?topic=45569.0

où ils répondent exactement à ta question, 

 

ou en faisant une lecture plus approfondie ici http://www.squalenet.net/fr/ti/tutorial_c/12-tableaux-listes-matrices.php5


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users