Tri bulle d'un tableau a n dimension

Fermé
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 - 24 janv. 2009 à 13:10
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 - 24 janv. 2009 à 19:03
Bien le bonjour amis programmeur, je vous énonce un problème qui ma été demander a mon cours de programmation C, avant tout de chose je ne vous demande pas de résoudre l'entièreté du programme mais bien de m'aider a comprendre mes fautes.

Donc, comme le titre l'indique, je dois trier un tableau 3x3 avec le tri bulle (le tri le moin répandu mais faut bien commencer avec un tri ^^ ).

voici mon code :

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void main()
{
int tab[10][10];
int i,j; // indice de ligne et de colonne du tableau
int n,m; // nombre de ligne et de colonne du tableau
int tmp; // variable temporaire
srand((unsigned)time(0));


printf("Nombre de ligne du tableau (max10) : ");
scanf("%d",&n);

printf("Nombre de colonne du tableau (max10) : ");
scanf("%d",&m);


for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
tab[i][j]=rand()%50;
}
}

puts("");


// Affichage non trier

for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
printf("%d \t",tab[i][j]);
}
puts("");
}puts("");


// tri bulle

for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
if(tab[i][j] > tab[i][j+1])
{
tmp=tab[i][j];
tab[i][j]=tab[i][j+1];
tab[i][j+1]=tmp;
}
}
}

puts("\n");


// affichage trier

for(i=0 ; i<n ; i++)
{
for(j=0 ; j<m ; j++)
{
printf("%d \t",tab[i][j]);
}
puts("");
}puts("");
}

#### Dans un premier temps j'aimerai bien résoudre le problème suivant :
a l'affichage du tableau "trier" les 3 colonne prenne des valeurs incorrecte "-8389832".
Sauriez vous me dire pourquoi ?
Je ne veux pas la solution complète a mon programme, je préféré poser mes questions au fur et a mesure. merci.
A voir également:

14 réponses

mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 14:53
Dernier soucis a résoudre et puis j'ai clôturer ce programme.

soit le tableau 2x3

9 3 0
3 6 4

deviend

0 3 9
3 4 6

et devrai donner
0 3 3
4 6 9

pour pouvoir faire ça, je dois ajouter une condition dans la première boucle ? ou je dois implémenter une nouvelle boucle for au sommet des 2 autres ?
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 janv. 2009 à 15:45
D'ailleurs, j'ai mal regardé mais ton algorithme n'est pas bon.
Il te manque une boucle for allant de i à m.
Tu devrais vraiment lire l'article que je t'ai donné pour voir comment ça marche pour un tableau une ligne. Ca t'aidera à le faire sur une matrice.
Quand je dis que tu devrais passer par un tableau simple, ça veut pas dire utiliser forcément un autre tableau. Mais plutôt considérer ta matrice comme un tableau simple. Par exemple :
int tab[3][3]; 
for(int i=0;i<9;i++) 
         printf("%d ",tab[0][i]);
1
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 13:24
Je suis désoler pour l'affichage du code, si il y a moyen de vous envoyer mon code source je le ferai volontiers car il n'est pas des plus lisible. J'espère seulement que les erreurs seront plus lisible x)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2009 à 13:38
Salut,

Avant de mettre ton code fait clic sur le bouton
 <> 
qui est à côté de G I S et tu verras que <code></code > est inséré
Tu n'as qu'à mettre ton code entre les balises
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2009 à 13:40
Re,

Sinon tu as un exemple de tri à bulle ici http://www.commentcamarche.net/forum/affich 4795788 c tri#2
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 14:00
Je vais adapter ton lien avec mon programme.

Je n'ai pas sur modifier mon message, donc je n'ai pas su modifier la lisibilité de mon code, je le saurai a l'avenir :)
je te tiens au courant si j'ai d'autre soucis.
merci a toi.

(désoler pour le double poste concernant le tri d'un tableau).
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 janv. 2009 à 14:03
Salut,
Dans la partie "tri à bulle", tu fais deux boucles for. j varie de 0 à m.
Et pourtant tu mets :
if(tab[i][j] > tab[i][j+1]).
L'indice j+1 aura pour valeur m+1 lors de la dernière itération. D'où une valeur bidon qui apparaît dans ton tableau.
cdlt
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 14:20
mais je ne vois pas ce que je dois mettre d'autre, car je dois bien tester
le premier élément avec le deuxième éléments soit :

tab[i][j] > tab[i][j+1]

peut tu m'aider que je puisse avancer ? car je dois encore régler le problème pour trier les élément des autres colonnes -_- ça vas faire 3 heure que je suis sur mon problème...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 janv. 2009 à 14:31
Ta boucle tu l'arrêtes à m-1 ;).
D'ailleurs la complexité de ton algorithme est en N² dans tous les cas. Tu peux le rendre meilleur via des petites optimisations : https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles (tu trouveras l'algorithme, et aussi le code).
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 14:46
Ça fonctionne merci beaucoup ^^
je vais continuer le reste du programme.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
24 janv. 2009 à 15:00
C'est normal. Tu fais une comparaison par ligne et non l'ensemble de la matrice.
Tu devrais passer par un tableau simple, sinon cela va compliquer ton algorithme.
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 15:29
mhhh,
le soucis c'est que je dois trie un tableau sans passer par un autre...

je commence a désespérer.
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 18:38
ok, je regarderai ca demain, j'ai eut ma dose de C pour ajrd ^^ je passe a l'asm -_- mouarf, j'irai voir plus en détail le lien que tu ma donner, encore merci pour les infos.
0
mimoonet Messages postés 9 Date d'inscription samedi 24 janvier 2009 Statut Membre Dernière intervention 24 janvier 2009 1
24 janv. 2009 à 19:03
J'ai encore été voir le lien que tu ma conseiller, mais j'ai du mal a assimiler les booléen, en n'en a malheureusement pas fait en classe : / ...

holala.
0