Tri bulle d'un tableau a n dimension
mimoonet
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
mimoonet Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
mimoonet Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Tri bulle d'un tableau a n dimension
- Trier un tableau excel - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
14 réponses
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 ?
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 ?
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 :
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]);
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)
Salut,
Avant de mettre ton code fait clic sur le bouton
Tu n'as qu'à mettre ton code entre les balises
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
Sinon tu as un exemple de tri à bulle ici http://www.commentcamarche.net/forum/affich 4795788 c tri#2
Sinon tu as un exemple de tri à bulle ici http://www.commentcamarche.net/forum/affich 4795788 c tri#2
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).
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).
Salut,
Dans la partie "tri à bulle", tu fais deux boucles for. j varie de 0 à m.
Et pourtant tu mets :
cdlt
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
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...
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...
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).
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).
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.
Tu devrais passer par un tableau simple, sinon cela va compliquer ton algorithme.
mhhh,
le soucis c'est que je dois trie un tableau sans passer par un autre...
je commence a désespérer.
le soucis c'est que je dois trie un tableau sans passer par un autre...
je commence a désespérer.