Accueil > Forum > > > > Maux de tête causé par une fonction de tri
Maux de tête causé par une fonction de tri
mercredi 18 août 2004 à 21:23:46 |
Maux de tête causé par une fonction de tri

MissSixty
|
Désespoir... je me chauffe encore les neurones avec un problème de tri de tableau 2D qui m'apparaît pourtant assez basic. J'ai bien tenté de m'inspirer de codes déjà faits dans les sources ou encore des exemples sur cplusplus.com, mais non, ça sert à rien, je n'y arrive pas ! Voilà... je vais recourir encore à votre aide au risque d'être étiquettée "DÉBUTANTE"... Je me lance donc: j'essaie de mettre en place une fonction toute simple qui me permettrait de trier mon tableau en ordre croissant avec la fonction qsort() en C. Les éléments à trier se retrouvent dans le tableau suivant: xyz[i].s[j], où i=nb_noeuds et j=nombre de coordonnées (0=x, 1=y, 2=z). Je veux utiliser la fonction qsort() et combiner avec fncompare de la façon suivante : qsort(xyz, ???,sizeof(float), fncompare ???); Les ??? sont les endroits où je n'ai aucune idée de ce que je dois y insérer... vraiment AUCUNE ! Je comprends comment exploiter cette fonction en 1d, mais en 2d, NIET !! Je suis donc à la recherche de quelqu'un qui pourrait me donner un exemple de l'utilisation de la fonction qsort() sur un tableau de type structure ou encore qui pourrait me diriger vers un site où l'on retrouve EXPLICITEMENT une telle utilisation... je suis à cours de ressources et ce n'est pas que je n'ai pas chercher !!! Merci mille fois à celui ou à celle qui pourra m'aider =)
|
|
mercredi 18 août 2004 à 21:48:35 |
Re : Maux de tête causé par une fonction de tri

BruNews
|
qsort(xyz, nbrLignesTableau, tailleLigneTableau,fncompare);
ciao... BruNews, Admin CS, MVP Visual C++
|
|
mercredi 18 août 2004 à 21:52:49 |
Re : Maux de tête causé par une fonction de tri

djl
|
oui voila, ca donnerais ca avec un tableau de struct
#include <stdio.h> #include <stdlib.h>
typedef struct { double x,y,z; } Point;
int fncompar( Point *p1, Point *p2);
int main() { Point tab[5] = { { 1.5, 5.5, 6.5 }, { 1.5, 5.5, 6.5 }, { 1.5, 5.5, 6.5 }, { 1.5, 5.5, 6.5 }, { 1.5, 5.5, 6.5 } }; qsort( tab, sizeof tab / sizeof *tab, sizeof *tab, fncompar ); }
int fncompar( Point *p1, Point *p2) { return (p1.x + p1.y + p1.z > p2.x + p2.y + p2.z) ? 1 : 0 ; }
|
|
mercredi 18 août 2004 à 22:21:03 |
Re : Maux de tête causé par une fonction de tri

MissSixty
|
DJL : on pourra dire que tu m'auras sorti de la "mémerde" plus d'une fois cette semaine...
Question #1 : qu'est-ce que je mets où il y a ??? selon mon code? (voir plus bas si j'ai bien compris tes explications et m'aider à compléter les ???) Question #2 : dans la fonction où on définit fncompar et que l'on compare les termes entre eux, qu'arrive t-il si les termes sont égaux?
_____________________
int fncompar (???) //comprend pas quoi mettre là selon mon code
int main { typedef struct _DBL3 { double s[3]; } DBL3; DBL3 *xyz_S = new DBL3[nb_lignes-3]; if (xyz_S == NULL) exit(1);
//LES DONNÉES PROVIENNENT D'UN FICHIER //VOICI COMMENT JE PROCÈDE POUR LES RÉCUPÉRER... xyz_S[i].s[j] ...
//COPIE DU TABLEAU DANS UN AUTRE POUR NE PAS ECRASER LES DONNEES INITIALES DBL3 *co_xyz_S = new DBL3[nb_lignes-3]; if (co_xyz_S == NULL) exit(1);
for (int i=0; i<(nb_lignes-3); i++) for (int j=0; j<3; j++) co_xyz_S[i].s[j] = xyz_S[i].s[j];
qsort(co_xyz_S, (nb_lignes-3), 3, fncompar); //est-ce mon programme comprend seul ce que veule dire "... sizeof tab / sizeof *tab, sizeof *tab, ..." ou dois-je les remplacer que qqchose
}
int fncompar (???) { return (xyz[i].s[0] + xyz[i].s[1] + xyz[i].s[2] > xyz[i].s[0] + xyz[i].s[1] + xyz[i].s[2]) ? 1 : 0 ; } //pas sûre si j'ai bien compris
|
|
mercredi 18 août 2004 à 22:44:48 |
Re : Maux de tête causé par une fonction de tri

djl
|
a la place de 3 il faut mettre la taille en octet d'un element de ton tableau, le plus sur c'est de mettre sizeof *co_xyz_S, c'est equivalent à sizeof co_xyz_S[0]
qsort(co_xyz_S, (nb_lignes-3), sizeof *co_xyz_S, fncompar);
la fonction de comparaison doit retourner un int (a valeur booleenne) et prendre en paramettre un pointeur sur les 2 elements à comparer
int fncompar (const DBL3 *xyz1, const DBL3 *xyz2) { return (xyz1[i].s[0] + xyz1[i].s[1] + xyz1[i].s[2] > xyz2[i].s[0] + xyz2[i].s[1] + xyz2[i].s[2]) ? 1 : 0 ; }
pour rappel, l'operateur ternaire ()?:
( [condition] ) ? [ valeur retournée si vrai ] : [ valeur retournée si faux ]
|
|
mercredi 18 août 2004 à 23:01:14 |
Re : Maux de tête causé par une fonction de tri

MissSixty
|
DJL :
j'ai modifié mon code avec tes suggestions et voici ce que ça me sort comme erreur...
"testIRM.C", line 586.17: 1540-0274 (S) The name lookup for "i" did not find a declaration. //qui correspond au i trouvé dans la fonction fncompar "testIRM.C", line 699.57: 1540-0064 (S) Syntax error: "(" was expected but "compare" was found. // qui correspond a ce que j'ai dans le qsort()
Je te remets le code que j'ai utilisé :
typedef struct _DBL3 { double s[3]; } DBL3; int compare (const DBL3 *xyz1, const DBL3 *xyz2) { return (xyz1[i].s[0] + xyz1[i].s[1] +xyz1[i].s[2] > xyz2[i].s[0] + xyz2[i].s[1] +xyz2[i].s[2])?1:0; }; //comment transférer le i là-dedans
int main { (...) DBL3 *co_xyz_S = new DBL3[nb_lignes-3]; if (co_xyz_S == NULL) exit(1);
for (int i=0; i<(nb_lignes-3); i++) for (int j=0; j<3; j++) co_xyz_S[i].s[j] = xyz_S[i].s[j];
qsort(co_xyz_S, (nb_lignes-3), sizeof *co_xyz_S, compare); //pqoi il ne comprend pas compare
}
MERCI =)
|
|
mercredi 18 août 2004 à 23:04:37 |
Re : Maux de tête causé par une fonction de tri

djl
|
a ouai desolé, j'etais encore dans les tableaux
int compare (const DBL3 *xyz1, const DBL3 *xyz2) { return (xyz1->s[0] + xyz1->s[1] +xyz1->s[2] > xyz2->s[0] + xyz2->s[1] +xyz2->s[2])?1:0; };
|
|
mercredi 18 août 2004 à 23:13:52 |
Re : Maux de tête causé par une fonction de tri

MissSixty
|
Oh lala... en faisant rouler le tout, j'ai obtenu une erreur ! Du genre que j'ai jamais vu auparavant...
La voici (l'erreur s'est produite dans ma fonction fncompar):
"testIRM.C", line 698.53: 1540-0256 (S) A parameter of type "extern "C" int (*)(const void *, const void *)" cannot be initialized with an expression of type "int (const DBL3 *, const DBL3 *)". "testIRM.C", line 698.53: 1540-1205 (I) The error occurred while converting to parameter 4 of "qsort(void *, size_t, size_t, extern "C" int (*)(const void *, const void *))".
|
|
mercredi 18 août 2004 à 23:15:06 |
Re : Maux de tête causé par une fonction de tri

MissSixty
|
DJL :
je prends 2 minutes pour te mentionner que j'apprécie grandement ton aide ... en plus c'est iper rapido ! =)
|
|
mercredi 18 août 2004 à 23:21:29 |
Re : Maux de tête causé par une fonction de tri

djl
|
cette fois c'est bon, j'avais oublié le caractere generique de la fonction
int compare (const void *_xyz1, const void *_xyz2) { DBL3 *xyz1 = _xyz1, *xyz2 = _xyz2;
return (xyz1->s[0] + xyz1->s[1] +xyz1->s[2] > xyz2->s[0] + xyz2->s[1] +xyz2->s[2])?1:0; };
on aurait aussi pu caster la fonction, mais c'est plus sur comme ca
|
|
Cette discussion est classée dans : fonction, tableau, tri, qsort, maux
Répondre à ce message
Sujets en rapport avec ce message
qsort fonctionnement? [ par deck_bsd ]
Bonjour a tous,Voila, je voudrai trier ce tableau :char nt[][100] = {"un","trois","quatre","cinq","a","bb","b","axxxxxxxxxxxxxxxxxxx"};Avec la fonctio
TABLEAU de STRUCTURE [ par timy94 ]
Bonjour Comment en C faire un tableau de pointeur pointant sur des structures.dans le but de trier ce tableau ex "tab.nom" en modifiant les adresses
creation d'un tableau et fonction image [ par zaz0u ]
Alors voila je voudrai faire un tableau qui permet d'afficher des images avec la lib SDL!je sais faire un tableau et je sais afficher une image mais m
tri d'un tableau a deux dimensions [ par alexey27 ]
Bonsoir j'aimerai poser une question simple comment s'y prend on pour trier dans l'ordre croissant un tableau a deux dimensions ( tableau [x][y])?
Fonction Rand pour démineur [ par pitidragon ]
Bonjour à tous,je dois programmer un démineur en langage C pour mes études et j'ai besoin d'aide. Je dois utiliser la fonction Rand pour générer mes b
ecriture dans fichier C [ par green mamba ]
Bonjour à tous!voilà, j'ai refait un code de tri (je me suis légèrement inspiré d'un cs présent ici, je code plutôt mal en général), et je voudrais ré
Foncton qui retourne un tableau [ par sarcipus ]
Bonjour à tous,dans le programme sur lequel je travaille, j'aurais besoin qu'une fonction retourne un tableau multidimensionnel (dont je ne peux conna
problème fonction récursive [ par kenikun ]
Bonjour à tous,J'ai un petit problème avec une fonction récursiveen C.Je lui passe un tableau 2D en paramètre contenant des éléments à traiter, et en
Fonction qui utilise un int* externe pour créer un tableau [ par tibob51 ]
Bonjour je voudrai savoir si il est possible qu'une fonction recoive un pointeur d'entier,créé un tableau dynamiquement puis l'initialise,afin de le r
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|