Menu

Tri alphabetique probleme [Résolu/Fermé]

tom - 16 nov. 2007 à 23:55 - Dernière réponse : mamiemando 28347 Messages postés jeudi 12 mai 2005Date d'inscriptionContributeurStatut 15 mai 2018 Dernière intervention
- 18 nov. 2007 à 19:21
Bonjour,
j'ai créé un programme en C mais j'ai un petit soucis avec le tri par ordre alphabétique, voici mon code:

// Definition de la structure
struct article
{
int reference;
char designation[50];
float prix;
int quantite;
};

void tri_tableau_designation (struct article solde[],int n)
{
int i;
struct article temp;
for (i=0; i<n; i++)
{if (strcmp(solde[i].designation,solde[i+1].designation)>0) //tri 2 elements (chaines) d'une structure
{temp=solde[i];
solde[i]=solde[i+1];
solde[i+1]=temp;
i=0;
printf("/n%d",i);
}
}
printf("Voici le stock du magasin avec les articles soldes et tries alphabetiquement:\n\n");
affiche_tableau_article(solde,n);
}


en fait je voudrais qu'il me tri par ordre laphabétiques des structures articles mais voila ce qu'il me fait:
reference: 001
designation: Article1
prix: 32.00
quantite: 200

reference: 00
designation:
prix: 00.00
quantite: 0

il me met automatiquement la 2eme a 0
comment corriger cela?
merci

PS: pas d'erreur de compilation (je suis debutant)...
Afficher la suite 

5 réponses

ekra 1884 Messages postés vendredi 15 avril 2005Date d'inscription 24 juillet 2014 Dernière intervention - 17 nov. 2007 à 15:00
+1
Utile
Bonjour,

Il faudrait un minimum chercher surtout que ces fonctions sont très bien documentées :
http://www.cplusplus.com/reference/clibrary/cstdlib/qsort.html

Definir d'abord la fonction de comparaison :

int compareAlphaArticles(const void * article1, const void * article2) {
   return strcmp(((struct Article*)article1)->designation , ((struct Article*)article2)->designation);
}


puis pour trier tu mets cette ligne dans ton code :
qsort(tableauDArticles, longueurTableau, sizeof(struct Article), compareAlphaArticles);


Voilà !
Cette réponse vous a-t-elle aidé ?  
mamiemando 28347 Messages postés jeudi 12 mai 2005Date d'inscriptionContributeurStatut 15 mai 2018 Dernière intervention - 17 nov. 2007 à 01:22
0
Utile
Je te propose soit d'utiliser la fonction qsort si tu reste en C, soit d'utiliser un std::set si tu fais du C++.
http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/qsort.3.html
http://www.lri.fr/~aze/page_c/aide_c/show_xml.php?file=qsort.xml

Bonne chance
0
Utile
Bonjour,
je souhaiterais utiliser qsort mais je ne comprend pas bien la syntaxe...
je voudrais comparer 2 chaines de caractère issue d'une structure:

struct article
{
int reference;
char designation[50];
float prix;
int quantite;
};

reference: 001
designation: Article1
prix: 32.00
quantite: 200

reference: 002
designation: Article 2
prix: 12.45
quantite: 12

comparer ici Article1 et Article2 et les placer par ordre alphabétique

pouvez vous m'indiquer seulement de facon plus clair que la doc la syntaxe (ex: qsort (chaine1,chaine2,...))
car j'ai tester cette ligne mais le programme plante (pas d'erreur de compilation):
{if (qsort(2,(solde[i].designation,solde[i+1].designation))>0)

PS: je ne connait pas la taille des chaine, seulement la longueure max: 50

merci!
mamiemando 28347 Messages postés jeudi 12 mai 2005Date d'inscriptionContributeurStatut 15 mai 2018 Dernière intervention - 18 nov. 2007 à 19:21
0
Utile
Tout est dit dans <4>