Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Programme Tri à Bulle [ Linux / Autre ] (tivanbelle)

vendredi 30 mai 2008 à 11:26:14 | Programme Tri à Bulle

tivanbelle

Bonjour,
J'ai fait ce programme en cours, c'est un tri a bulle
qui tri des valeur donc 2à2, mais le programme ne fonctionne pas. Pouvez vous me dire ce qui ne fonctionne pas.

#include <stdio.h>


// Fonction Tri

int tri(int tab[], int size)
{
int j;
int k;
int inter;
k=1;
j=0;
inter=0;

while(tab[j]>tab[k])
{
inter=tab[j];
tab[k]=tab[j];
tab[k]=inter;
j++;
k++;
}
return tab;
}

// Fonction Principale
int main()
{
int tab[50];
int i;
int size;
int valeur;
i=0;

printf("Choisir le nombre de valeur du tableau \n");
scanf("%d",&size);

printf("Rentrer une valeur \n");
scanf("%d",&valeur);
tab[i]=valeur;
for(i=1;i<size;i++)
{
printf("Rentrer une valeur \n");
scanf("%d",&valeur);
tab[i]=valeur;
}
tri(tab,size);
i=0;
printf("Tableau trié\n");
for(i=0;i<size;i++);
{
valeur=tab[i];
printf("%d \n",valeur);
}
}


Merci

vendredi 30 mai 2008 à 11:33:04 | Re : Programme Tri à Bulle

JejeLand

Membre Club
Bonjour,

while(tab[j]>tab[k])
{
inter=tab[j];
tab[k]=tab[j];   ->
tab[j]=tab[k];
tab[k]=inter;
j++;
k++;
}


vendredi 30 mai 2008 à 11:35:21 | Re : Programme Tri à Bulle

tivanbelle

Merci pour ton aide, je n'avais pas vu cette erreur, mais cela ne fonctionne toujours pas, le terminal m'affiche :

Tableau trié
-1208035676


vendredi 30 mai 2008 à 11:36:36 | Re : Programme Tri à Bulle

Pistol_Pete

Salut

Le tri bulle n'est pas un algorithme tres complique mais il est quand meme plus compliquer que celui que tu proposes.

Imagine un tableau suivant:  5, 4, 3

Tu echangeras le 5 et 4 puis le 5 et 3, ce qui te donne 4, 3, 5  !!!

Regarde sur ce lien pour un exemple qui marche:
[ Lien ]


A+
Mon site internet : [ Lien ]


vendredi 30 mai 2008 à 11:39:34 | Re : Programme Tri à Bulle

tivanbelle

D'accord pour la fontcion tri a bulle, mais je ne comprend pas pourquoi il m'affiche -1208035676 et pourquoi il ne m'affiche pas le tableau ?

vendredi 30 mai 2008 à 12:33:17 | Re : Programme Tri à Bulle

Pistol_Pete

Tout simplement parce qur tu passes ton temps, dans la fonction tri a ecrire et lire hors du tableau.

Trouves tu normale de passer la variable size en parametre et ne pas s'en servir?


A+
Mon site internet : [ Lien ]


vendredi 30 mai 2008 à 22:09:05 | Re : Programme Tri à Bulle

jfrancois

Bonsoir,

Voilà un tri à bulle correct avec les 2 optimisations possibles :
1) A chaque itération de la boucle while(1) on s'arrête une valeur plus tôt (--max;) car chaque passage déplace le plus grand élément à la fin.
2) Si aucun échange n'a été réalisé au cours d'une itération de la boucle while(1) alors le tri est terminé et on peut quitter (variable fin).

J'ai aussi simplifier et corrigé le main() (le ; derrière le for de la boucle de visualisation !).

#include <stdio.h>


// ============
// Tri à bulles
// ============
void Trier(int tab[],int size)
{
   int i,j,max,swap,fin;

   max = size - 1;
   while (1)
   {
      fin = 1;
      for (i=0,j=1 ; i<max ; ++i,++j)
      {
         if (tab[i] > tab[j])
         {
            // --- Permuter les 2 valeurs i et j
            swap   = tab[i];
            tab[i] = tab[j];
            tab[j] = swap;
            fin    = 0;
         }
      }
      if (fin == 1) return; // tri terminé
      --max; // la dernière valeur est à sa place
   }
}


// ===================
// Fonction principale
// ===================
int main(void)
{
   int tab[50];
   int size;
   int i;

   // --- Saisir la taille du tableau
   printf("Choisir le nombre de valeur du tableau : ");
   scanf("%d",&size);
   if (size > 50) size = 50;

   // --- Saisir les valeurs du tableau
   for(i=0 ; i<size ; ++i)
   {
      printf("Rentrer la valeur %d : ",i + 1);
      scanf("%d",&tab[i]);
   }

   // --- Voir le contenu du tableau
   printf("\nTableau saisi : \n");
   for(i=0 ; i<size ; ++i)
      printf("- %d \n",tab[i]);

   // --- Trier le tableau
   Trier(tab,size);

   // --- Voir le contenu du tableau
   printf("\nTableau trie : \n");
   for(i=0 ; i<size ; ++i)
      printf("- %d \n",tab[i]);

   return 0;
}

Ce qui donne :

Choisir le nombre de valeur du tableau : 7
Rentrer la valeur 1 : 123
Rentrer la valeur 2 : 213
Rentrer la valeur 3 : 321
Rentrer la valeur 4 : 567
Rentrer la valeur 5 : 900
Rentrer la valeur 6 : 99
Rentrer la valeur 7 : 1001

Tableau saisi :
- 123
- 213
- 321
- 567
- 900
- 99
- 1001

Tableau trie :
- 99
- 123
- 213
- 321
- 567
- 900
- 1001

Jean-François




Cette discussion est classé dans : int, valeur, tri, printf, tab


Répondre à ce message

Sujets en rapport avec ce message

pb en c urgenttttttttttttttttt [ par natacha86 ] bonjour, j'ai un probleme avec mon programme, il ne veut pas sortir, j'ai fais un menu et apparement ya un bug mais je ne comprend rien.le code est as encore un pb en c svp....... [ par natacha86 ] j'ai essayer de séparer les fonctions mais ca ne marche pas...#include #include #include #include #include #define MAX 1000000 help une fonction qui a besoin de vous [ par natacha86 ] Re bonjour a tout le monde, voila j'ai mis tout le prog si vous voulez tester, en fait le pb viens de la fonctino tri_shell(), je ne sais pas pkoi ell a l aiiiiiiiiidddddeeeeeeeee [ par natacha86 ] je ne comprend pas pkoi le programme une fois qu'il a lancé le premier choix du menu a la fin il ne reviens pas au menu, il s'arrete directement, merc menu avec un switch [ par natacha86 ] je ne comprend pas pkoi le programme une fois qu'il a lancé le premier choix du menu a la fin il ne reviens pas au menu, il s'arrete directement, merc aide par rapport a l'appel d'une méthode [ par natacha86 ] quel est le probleme de ma méthode init_tab ? le programme s'arrete aprse etre passé dans cette méthode, il plante, et ne rentre pas dans la méthode d Demande d'explication a propos d'un code. [ par Strick9 ] Salut à tous, j'ai obtenu grâce à se merveilleux site ce code sources pour cet énoncés:un programme permettant de donner toute les combinaison suite a compilation mai au lancement "erreur la memoire ne peu pas pas etre read" [ par touny23 ] je maitrise pas tro le C.mai comme j ai un projet a faire dessus pour la rentré , je sui obligé de m y mettre .j arrive a compiler sous dev-cpp mai lo Blem Somme ELmt d'un Tableau Bidimensionnel [ par Orezza ] Slt c encore moi, le boulet de l'info...c tjrs le meme prog mais cette fois ci j'aimerais afficher la somme des elmts de mon tableaux.#include #includ Problem Affichage de mon Tableau [ par Orezza ] salut à tous, j'ai un blem à l'affichage du tableau. l'utilisateur parametre son tableau, c lui qui l'initilize mais j'arrive pas à afficher apres le


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.