Go Down

Topic: [résolu] Calculs dans un tableau (Read 382 times) previous topic - next topic

Spionit

Mar 14, 2018, 01:11 pm Last Edit: Mar 14, 2018, 02:26 pm by Spionit
Bonjour,
Je souhaite effectuer la somme d'un certain nombre de valeurs contenues dans un tableau puis faire la moyenne. J'ai essayé deux méthodes.
La première donne un résultat juste mais le code n'est pas élégant et les valeurs ne sont pas nombreuses donc c'est rapide à coder.
La seconde me paraît plus "smart" mais le résultat est faux.
Voici le code :

Code: [Select]


int vi = 0; // vitesse vent instantané méthode 1
int vii = 0; // vitesse vent instantané méthode 2

long vitesse[200];

void setup() {

// initialisation des tableaux de mesures
  for (int i = 0; i < 200; i++) {
    vitesse[i] = 0;
  }
}

void loop() {
// là une partie du code qui rempli le tableau
// première méthode

  vi = ((vitesse[199]+vitesse[198]+vitesse[197]+vitesse[196])/4);

// seconde méthode

  for (int i = 1; i < 5; i++) {
    vii += vitesse[200-i];
  }
  vii /= 4;

}


On a vi != vii
Je me demande si le typage est en cause, mais j'ai assayé d'autres types (long, float...)
rien n'y fait.

Merci de votre aide

_pepe_

#1
Mar 14, 2018, 02:02 pm Last Edit: Aug 19, 2018, 03:06 am by _pepe_
Supprimé

lesept

On a vi != vii
C'est la première fois que je vois quelqu'un coder en chiffres romains ! Il y a un type pour cela ?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Spionit

Merci !
En remettant vii à zéro juste avant la boucle, ça fonctionne.
Pour 4 valeurs je pouvais utiliser la méthode 1 mais j'ai aussi la moyenne à faire sur les 200 valeurs du tableaux, donc... ouf.

hbachetti

Salut.

Ouh là là, une révision s'impose.

Sur ATMEGA :

int = -32,768 - 32,767
long = -2,147,483,648 - 2,147,483,647

Il vaudrait mieux lire CECI.

De toutes façons, dans ce bout de code, il faut uniformiser les types : vitesse, vi et vii doivent avoir le même type.

@+

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

_pepe_

#5
Mar 14, 2018, 03:46 pm Last Edit: Aug 19, 2018, 03:06 am by _pepe_
Supprimé

hbachetti

C'est clair que dans le premier post les tailles de variables sont inversées. vii ne peut avoir une taille inférieure à vitesse.
Le choix des types peut être aussi influencé par la recherche de performance. Sur un STM32 on améliorera la vitesse de calcul en utilisant le type natif 32bits.

@+
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up