Go Down

Topic: Array 2D ? (Read 126 times) previous topic - next topic

assomow

Bonsoir les gens :)

Je débute en c++ depuis bientôt 10ans, c'est un langage qui ma toujours rebuté, mais cette fois je m'y suis mis sérieusement ^^

Je bute sur une méthode afin d'appliquer une valeur a partir d'un température lue d'un capteur.
Je pense que le top serait un array en 2D de ce genre:

Code: [Select]

int valeur[9][2] =
{
   {10, 2.4},
   {15, 4.8},
   {20, 7.2},
   {25, 9.6},
   {30, 12},
   {35, 14.3},
   {40, 16.7},
   {45, 19}
   
};


Le problème est que je n'arrive pas a l'exploiter...

En attendant je compile comme ça:

Code: [Select]

 if (temp < 10){
    valeur = 0;
  }
if (temp > 10 && temp < 15){
   valeur = 2.4;
}
if (temp > 15 && temp < 20){
  valeur = 4.8;
}
if (temp > 20 && temp < 25){
  valeur = 7.2;
}
if (temp > 25 && temp < 30){
  valeur = 9.6;
}
if (temp > 30 && temp < 35){
  valeur = 12;
}
if (temp > 35 && temp < 40){
  valeur = 14.3;
}
if (temp > 40 && temp < 45){
  valeur = 16.7;
}
if (temp > 45 && temp < 50){
  valeur = 19;
}


Une âme charitable pour me mettre sur la voie?

Bonne soirée

kamill

Bonjour,

- ton tableau contient des valeurs flottantes, il doit donc être déclaré float
- dans tes tests, il y a des cas non définis si par exemple si temp=10 -> valeur n'a pas de valeur
- on ne peut pas utiliser le même nom de variable (valeur) pour un tableau et une variable simple

Maintenant pour répondre à ta question, je te propose ceci
Code: [Select]
float valeur[9][2] =
{
   {10, 0},
   {15, 2.4},
   {20, 4.8},
   {25, 7.2},
   {30, 9.6},
   {35, 12},
   {40, 14.3},
   {45, 16.7}
  
};

void test()
{
  float val=19;       // si non trouvé dans le tableau

  for (int i=0; i<9; i++)
  {
    if (temp<valeur[i][0])
    {
      val=valeur[i][1];
      break;
    }
  }
}


Tu remarquera que j'ai décalé la deuxième valeur du tableau vers la ligne précédente car c'est plus facile à gérer ainsi.

assomow

Merci kamill pour toutes c'est précisions ;)

Ce code me sort une erreur qui me bloquer toute a l'heure (c'est ce pourquoi javais passer en int pour test):

Code: [Select]

error: invalid types 'float[int]' for array subscript


Merci

kamill

Quel code?
Il n'y a pas d'erreur, les index sont entiers.
Met ton code complet.

assomow

#4
Nov 04, 2015, 12:10 am Last Edit: Nov 04, 2015, 12:12 am by assomow
Simplement ceci:

Code: [Select]

int temp;
float valeur;

void setup() {
  int temp = 27;

  float valeur[17][2] =
  {
    {10, 0},
    {15, 2.4},
    {20, 4.8},
    {25, 7.2},
    {30, 9.6},
    {35, 12},
    {40, 14.3},
    {45, 16.7},
    {50, 19},
    {55, 21.4},
    {60, 23.8},
    {65, 26.1},
    {70, 28.5},
    {75, 31},
    {80, 33.3},
    {85, 35.7 }
  };
}

void loop() {

}

void test()
{
  float val = 19;     // si non trouvé dans le tableau

  for (int i = 0; i < 17; i++)
  {
    if (temp < valeur[i][0])
    {
      val = valeur[i][1];
      break;
    }
  }
}


Code: [Select]

Arduino : 1.6.5 Hourly Build 2015/10/23 11:42 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

sketch_nov03a.ino: In function 'void setup()':
sketch_nov03a:7: error: invalid types 'float[int]' for array subscript
sketch_nov03a.ino: In function 'void test()':
sketch_nov03a:38: error: invalid types 'float[int]' for array subscript
sketch_nov03a:40: error: invalid types 'float[int]' for array subscript
invalid types 'float[int]' for array subscript

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.


kamill

Tu déclare une variable simple float valeur puis tu affectes sa valeur en tant que tableau.
Ton tableau valeur doit être déclaré en dehors de setup si tu veux qu'il soit accessible dans d'autres fonction.
Code: [Select]


int temp = 27;

float valeur[17][2] =
{
  {10, 0},
  {15, 2.4},
  {20, 4.8},
  {25, 7.2},
  {30, 9.6},
  {35, 12},
  {40, 14.3},
  {45, 16.7},
  {50, 19},
  {55, 21.4},
  {60, 23.8},
  {65, 26.1},
  {70, 28.5},
  {75, 31},
  {80, 33.3},
  {85, 35.7 }
};

void setup() {
}

void loop() {

}

void test()
{
  float val = 19;     // si non trouvé dans le tableau

  for (int i = 0; i < 17; i++)
  {
    if (temp < valeur[i][0])
    {
      val = valeur[i][1];
      break;
    }
  }
}


assomow

Tout simplement :)

Et ça explique aussi d'autre problème que j'ai rencontrer...

Problème résolu!

Merci kamill  ;)

kamill

Bonne continuation

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy