VC++ 6.0 et tri de tableau: bug du compilateur???

VC++ 6.0 et tri de tableau: bug du compilateur??? - C++ - Programmation

Marsh Posté le 24-02-2004 à 20:53:47    

Code :
  1. #include <iostream>
  2. using namespace std;
  3. void Swap(int* val1, int* val2)
  4. {
  5. int temp = *val1;
  6. *val1 = *val2;
  7. *val2 = temp;
  8. }
  9. void PrintTable(int* table, int size)
  10. {
  11. for(int x = 0; x < size; x++)
  12. cout << table[x] << " ";
  13. cout << endl;
  14. }
  15. void Sort(int* table, int size)
  16. {
  17. for(int start = 0; start < size-1; start++)
  18. for(int k = start + 1; k < size; k++)
  19. if(table[k] < table[start])
  20. Swap(&table[start], &table[k]);
  21. }
  22. void Tri(int* table, int taille)
  23. {
  24. cout << taille << endl;
  25. for(int i = 0;i < 3; i++)
  26. {
  27.  Sort(table + i * 10 ,10);
  28. }
  29. }
  30. void main(void)
  31. {
  32. int table1[] = {5,9,8,1,3,5,4,3,6,1};
  33. int table2[] = {4,6,3,7,9,2,1,1,5,8};
  34. int table3[] = {4,6,7,9,8,6,4,7,8,9};
  35. int* tableP[] = {table1,table2,table3};
  36. Tri(*tableP , 3);
  37. PrintTable(table1, 10);
  38. PrintTable(table2, 10);
  39. PrintTable(table3, 10);
  40. }


 
Voilà mon problème:
 
Je débute en c++ et j'utilise Visual C++ 6.0.
J'ai repris du code d'un tutorial pour un exercice et j'en ai rajouté pour trier des tableaux.
Je crée un tableau de pointeurs (tableP) et j'appelle ce tableau par la fonction Tri pour que celle-ci trie dans un ordre croissant les membres de chaque tableau dont le pointeur est contenu dans tableP.
Lorsque je compile, je n'ai aucune erreur mais l'affichage est variable selon les dispositions:
-Soit seul le premier tableau est affiché trié (table1 par exemple) lorsque le tableau en question est déclaré avant les autres et que ce tableau est le premier paramètre du tableau tableP. Les autres tableaux (table2 et table3 dans notre exemple) étant affichés inchangés.
Exemple:
 

Code :
  1. int table1[] = {5,9,8,1,3,5,4,3,6,1};
  2. int table2[] = {4,6,3,7,9,2,1,1,5,8};
  3. int table3[] = {4,6,7,9,8,6,4,7,8,9};
  4. int* tableP[] = {table1,table2,table3};
  5. // ou
  6. int table3[] = {5,9,8,1,3,5,4,3,6,1};
  7. int table1[] = {4,6,3,7,9,2,1,1,5,8};
  8. int table2[] = {4,6,7,9,8,6,4,7,8,9};
  9. int* tableP[] = {table3,table2,table1};


 
-Soit tous les tableaux sont affichés triés correctement.
-Soit j'ai  des messages d'erreurs windows ( la fenêtre où on nous demande de signaler l'erreur à Microsoft)...
 
Je vois pas trop ce qui cloche dans mon programme, même si je débute dans les pointeurs.
Est-ce que c'est mon programme qui bug ou VC++ ???


---------------
Mort aux cons. http://42496.aceboard.net
Reply

Marsh Posté le 24-02-2004 à 20:53:47   

Reply

Marsh Posté le 24-02-2004 à 20:56:02    

c'est toi, aucun doute la dessus :D
 

Code :
  1. void Tri(int** table, int taille)
  2.   {
  3.      cout << taille << endl;
  4.      for(int i = 0;i < 3; i++)
  5.      {
  6.         Sort(table[i],10);
  7.      }
  8.   }


 
et  
 
 

Code :
  1. Tri(tableP , 3);

Reply

Marsh Posté le 24-02-2004 à 20:56:47    

oh du C
 
Sort(table + i * 10 ,10);  
 
qui te dit que tous tes tableaux sont contigus ? ton prototyp est mauvais, il te faut un int **tab, et trier (tab[i], 10)
 
edit:grillaid


Message édité par Taz le 24-02-2004 à 20:57:16
Reply

Marsh Posté le 24-02-2004 à 21:02:51    

Merci, la solution a l'air de marcher...


---------------
Mort aux cons. http://42496.aceboard.net
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed