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

- - Dernière réponse : cptpingu
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 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
Afficher la suite 

Votre réponse

3 réponses

Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
0
Merci
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.
Commenter la réponse de cptpingu
0
Merci
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
Commenter la réponse de mikeraza
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
0
Merci
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
Commenter la réponse de cptpingu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.