Rechercher : dans
Par :

Tri bulle d'un tableau a n dimension

Dernière réponse le 24 jan 2009 à 19:03:09 mimoonet, le 24 jan 2009 à 13:10:51 
 Signaler ce message aux modérateurs

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.

Configuration: Windows Vista premium
Firefox 3.0.5
Microsoft Visual c++ 6.0

Meilleures réponses pour « Tri bulle d'un tableau a n dimension » dans :
Tri à bulles -récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri à bulles : Procedure Tri_bulles (var t : TAB; n : integer); Var i, aux : integer; Function Trier (t : TAB; n : integer) : Boolean; ...
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...

1

mimoonet, le 24 jan 2009 à 13:24:18

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)

Répondre à mimoonet

2

lami20j, le 24 jan 2009 à 13:38:48

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
106485010510997108

Répondre à lami20j

3

lami20j, le 24 jan 2009 à 13:40:25

Re,

Sinon tu as un exemple de tri à bulle ici http://www.commentcamarche.net/forum/affich 4795788 c tri#2 106485010510997108

Répondre à lami20j

4

mimoonet, le 24 jan 2009 à 14:00:54

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).

Répondre à mimoonet

5

fiddy, le 24 jan 2009 à 14:03:48

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
Google is your friend

Répondre à fiddy

6

mimoonet, le 24 jan 2009 à 14:20:27
  • +1

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...

Répondre à mimoonet

7

fiddy, le 24 jan 2009 à 14:31:06

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 : http://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles (tu trouveras l'algorithme, et aussi le code).
Google is your friend

Répondre à fiddy

8

mimoonet, le 24 jan 2009 à 14:46:58

Ça fonctionne merci beaucoup ^^
je vais continuer le reste du programme.

Répondre à mimoonet

9

mimoonet, le 24 jan 2009 à 14:53:44

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 ?

Répondre à mimoonet

10

fiddy, le 24 jan 2009 à 15:00:15

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.
Google is your friend

Répondre à fiddy

11

mimoonet, le 24 jan 2009 à 15:29:41

Mhhh,
le soucis c'est que je dois trie un tableau sans passer par un autre...

je commence a désespérer.

Répondre à mimoonet

12

fiddy, le 24 jan 2009 à 15:45:50

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]);

Google is your friend

Répondre à fiddy

13

mimoonet, le 24 jan 2009 à 18:38:40

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.

Répondre à mimoonet

14

 mimoonet, le 24 jan 2009 à 19:03:09

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.

Répondre à mimoonet