Erreur d'une fonction transposant les valeurs de deux tableaux successifs [Résolu]

Signaler
-
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
-
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

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
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.
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
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
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/


Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature