Se connecter / S'enregistrer
Votre question

Mon premier programme en c - tri bulle

Tags :
  • Time
  • Programmation
Dernière réponse : dans Programmation
16 Février 2011 21:39:27

Bonsoir.

Voici le code de mon tri-bulle.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. unsigned taille=10;
  6. int tab[taille];
  7.  
  8. void echange(int a, int b)
  9. {
  10. int temp = a;
  11. a=b;
  12. b=temp;
  13. }
  14.  
  15. void aff()
  16. {
  17. for (unsigned i =0; i< taille; i++) {
  18. printf("%i",tab[i]);
  19. }
  20. }
  21.  
  22. void tri()
  23. {
  24. for (unsigned i=0; i < taille-1; i++) {
  25. if (tab[i] > tab[i+1]) {
  26. echange(tab[i],tab[i+1]);
  27. }
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. /* cree_tab();*/
  34. aff(tab[taille]);
  35. tri(tab[taille]);
  36. aff(tab[taille]);
  37. }




A la compilation, une erreur apprait:
Citation :
"tri_bulle.c:6: error: variably modified ‘tab’ at file scope".


Où est ce que ca foire ?

mon tableau est une variable globale et c'est elle que je modifie mais a priori ca devrait pas etre le probleme.

Merci

Autres pages sur : premier programme tri bulle

17 Février 2011 16:12:07

Salut.
Je vois que personne ne te répond.
Je ne comprends pas le libellé de ton erreur, mais :
Ton tableau n'est pas initialisé. Ton algorithme est faux (pas de répétition tant qu'il y a une une interversion d'éléments).
Voici un exemple qui marche, je te laisse l'améliorer avec la fonction "echange" (éludée ici) :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void aff(int tab[], unsigned taille)
  5. {
  6. for (unsigned i=0; i< taille; i++) {
  7. printf("%i",tab[i]);
  8. }
  9. printf("%s","\n");
  10. }
  11.  
  12. void tri(int tab[], unsigned taille)
  13. {
  14. bool fini;
  15. int temp;
  16. do {
  17. fini = true;
  18. for (int i=0; i < taille - 1; i++) {
  19. if (tab[i] > tab[i+1]) {
  20. temp = tab[i];
  21. tab[i] = tab[i + 1];
  22. tab[i + 1] = temp;
  23. fini = false;
  24. }
  25. }
  26. } while(!fini);
  27. }
  28.  
  29. int main()
  30. {
  31. unsigned taille=10;
  32. int tab[taille];
  33.  
  34. for (int i = taille - 1; i > -1; i--) {
  35. tab[i] = 9 - i;
  36. }
  37.  
  38. aff(tab, taille);
  39. tri(tab, taille);
  40. aff(tab, taille);
  41. }
m
0
l
a b L Programmation
17 Février 2011 19:12:27

Effectivement, il faut aussi initialiser le tableau. C'est un second problème.

Le premier problème vient du fait qu'il y a une déclaration statique du tableau, mais il est initialisé avec une taille dynamique.
Donc, soit il faut faire un tableau à taille fixe (statique) en faisant "int tab[10]", soit faire un tableau dynamique avec un malloc et un free.
Pour le tableau statique, tu peux utiliser un #define, car ce n'est pas une variable, c'est de la précompilation (le code source est "modifié" en remplaçant tous les #define avant la compilation)
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS