Erreur d'une fonction transposant les valeurs de deux tableaux successifs

Résolu
mikeraza - 14 févr. 2018 à 11:56
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 15 févr. 2018 à 16:07
Bonjour,
j'ai créé une fonction qui modifierait les valeurs d'un tableau statique. Elle fonctionne bien lors de la première utilisation mais après l'entrée d'un deuxième tableau, la dernière valeur de ce dernier a été transposée avec la première valeur du premier tableau et inversement si l'on inverse l'ordre dans lequel les deux tableaux ont été déclarés.
le problème c'est que tous les résultats du programme sont faussés.
Merci de bien vouloir m'aider

3 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 févr. 2018 à 17:15
Bonjour.

Peux-tu poster ton code (dans des balises de code). Sans voir ce que tu fais, il est impossible de deviner ton problème.
0
Bonjour,
oui bien sûr
void modifTableau(double tab[])
{
   //modification des valeurs du tableau (à 100 valeurs)
}

void afficherValeur(double tab[])
{
for (int i=0;i <=99;i++)
  cout << tab[i] << endl;
}

int main()
{
  double a[99];
  double b[99];
  modifTableau(a);
  modifTableau(b);
  afficherValeur(a);
  afficherValeur(b);
  return 0;
}


Quand j'exécute le programme, je vois que la première valeur de a et la dernière valeur de b sont transposées alors que ce ne doit pas être le cas.
Merci bien
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié le 16 févr. 2018 à 15:46
Sans le code de "modifTableau", je ne peux pas voir le souci :(

A première vue, tu confonds taille de tableau et indice de tableau.

Un tableau de taille 100, va de 0 compris à 99 compris.
Donc: double a[100] va de a[0] jusqu'à a[99].

Ce qui veut dire que double a[99] va de a[0] jusqu'à a[98].
Si tu fais: for (int i = 0; i <= 99; i++) sur un tableau de taille 99, alors que la dernière "case" est 98, le résultat est indéfini.
Généralement on écrit:

const int SIZE = 99; // 100 ?

void modifTableau(double tab[])
{
   //modification des valeurs du tableau (à 100 valeurs)
}

void afficherValeur(double tab[])
{
  for (int i = 0; i < SIZE; ++i)
    std::cout << tab[i] << std::endl;
}

int main()
{
  double a[SIZE];
  double b[SIZE];
  modifTableau(a);
  modifTableau(b);
  afficherValeur(a);
  afficherValeur(b);
  return 0;
}


Attention aussi à éviter les "using namespace", c'est assez sale. Voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace/

0
Rejoignez-nous