RootASM
Messages postés17Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 4 avril 2006
-
10 mars 2006 à 20:22
RootASM
Messages postés17Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 4 avril 2006
-
11 mars 2006 à 20:09
Bonjour,
J'ai écrit un programme qui permet de faire des recherches, ajout, suppression sur une liste de membres.
Je dois trier cette liste de nom, lorsque j'affiche la liste des membres il n'y a aucun problème tout est trié mais je ne sais pas comment faire pour trié a nouveau cette liste apres un ou plusieur ajout ?
struct PERS { int ref;
char nom[20];
char prenom[20];
struct DATE nais;
};
struct INDEX { char nom[20];
struct PERS *adresse;
};
void Init(struct PERS *, struct INDEX *, int, int *);
void Liste(struct INDEX *, int *, int);
void Recherche(struct INDEX *, int *, int);
void Ajout(struct INDEX *, int *, int);
void Suppression(struct INDEX *, int *, int);
void HeapSort(struct INDEX *, int, int *);
void Paterner(struct INDEX *, int, int, int *);
void main()
{
int nbel = 5;
int *pt;
int choix;
bool fin = false;
struct PERS *per;
struct INDEX *ind;
void HeapSort(struct INDEX *ind, int nbel, int *pt)
{
int i, tmp3;
char tmp[20];
struct PERS *tmp1;
/* Paterner 1X tous le vecteur */
for (i = (nbel / 2)-1; i >= 0; i--)
{
Paterner(ind, i, nbel, pt);
}
for (i = nbel-1; i >= 1; i--)
{
/* Echange le premier et le dernier élément */
strcpy(tmp, ind->nom);
strcpy(ind->nom, (ind+i)->nom);
strcpy((ind+i)->nom, tmp);
/* Paterne une 2X le vecteur avec nombre d'éléments - 1 */
Paterner(ind, 0, i-1, pt);
}
}
void Paterner(struct INDEX *ind, int pere, int finvec, int *pt)
{
int trie, fils, tmp3;
char tmp[20];
struct PERS *tmp1;
trie = 0;
/**************************************************************************/
/* Boucle tant que indice du pere*2 est plus petit que le dernier élément */
/**************************************************************************/
while ((pere*2 <= finvec) && (trie != 1))
{
if (pere*2 == finvec)
{
fils = pere*2;
}
else
{
if (strcmp((ind+pere*2)->nom, (ind+(pere*2 + 1))->nom) > 0)
{
fils = pere*2;
}
else
{
fils = pere*2 + 1;
}
}
if (strcmp((ind+pere)->nom, (ind+fils)->nom) < 0)
{
RootASM
Messages postés17Date d'inscriptionlundi 16 janvier 2006StatutMembreDernière intervention 4 avril 2006 11 mars 2006 à 20:09
J'utilise Visual C++. Désolé pour les commentaires.
En fait quand je lance le programme et que je choisi AJOUT dans le menu, je dois entrer les information demandé puis on me demande si je veu en ajouter un autre. Si je met 'o' je peu réentré un nouveau membre sinon je revien au menu principal. Si je choisi LISTE le programme doit m'afficher les membre dans l'ordre alphabétique mais je ne sais pas ou mettre l'appelle de mon tri ?
J'ai modifié le code reste ce seul probleme de trier apres plusieur nouveau ajout
struct PERS { int ref;
char nom[20];
char prenom[20];
struct DATE nais;
};
struct INDEX { char nom[20];
struct PERS *adresse;
};
void Init(struct PERS *, struct INDEX *, int, int *);
void Liste(struct INDEX *, int *, int);
void Recherche(struct INDEX *, int *, int);
void Ajout(struct INDEX *, int *, int);
void Suppression(struct INDEX *, int *, int);
void HeapSort(struct INDEX *, int, int *);
void Paterner(struct INDEX *, int, int, int *);
void main()
{
int nbel = 5;
int *pt;
int choix;
bool fin;
struct PERS *per;
struct INDEX *ind;
void HeapSort(struct INDEX *ind, int nbel, int *pt)
{
int i, tmp3;
char tmp[20];
struct PERS *tmp1;
/* Paterner 1X tous le vecteur */
for (i = (nbel / 2)-1; i >= 0; i--)
{
Paterner(ind, i, nbel, pt);
}
for (i = nbel-1; i >= 1; i--)
{
/* Echange le premier et le dernier élément */
strcpy(tmp, ind->nom);
strcpy(ind->nom, (ind+i)->nom);
strcpy((ind+i)->nom, tmp);
/* Paterne une 2X le vecteur avec nombre d'éléments - 1 */
Paterner(ind, 0, i-1, pt);
}
}
void Paterner(struct INDEX *ind, int pere, int finvec, int *pt)
{
int trie, fils, tmp3;
char tmp[20];
struct PERS *tmp1;
trie = 0;
/**************************************************************************/
/* Boucle tant que indice du pere*2 est plus petit que le dernier élément */
/**************************************************************************/
while ((pere*2 <= finvec) && (trie != 1))
{
if (pere*2 == finvec)
{
fils = pere*2;
}
else
{
if (strcmp((ind+pere*2)->nom, (ind+(pere*2 + 1))->nom) > 0)
{
fils = pere*2;
}
else
{
fils = pere*2 + 1;
}
}
if (strcmp((ind+pere)->nom, (ind+fils)->nom) < 0)
{