écrire un programme qui trie (trie par insertion) par nom et par age un tableau

cs_moncif44 Messages postés 2 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 16 mai 2011 - 16 mai 2011 à 00:49
axelorque Messages postés 10 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 juillet 2011 - 18 mai 2011 à 10:43
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#define MAX 10

typedef struct {
char nom[MAX] ;
char prenom[MAX] ;
char age[MAX] ;
} persone ;
void EchangerNom( persone *pX, persone *pY ) {
persone r = *pX;
*pX = *pY;
*pY = r; //Tri par nom
}
void triNom(persone s[], int n){
int i,j;
int imin; /* index of minimum */
for (i=0; i<n; i++) {
imin=i;
for (j=i+1; j<n; j++) if (strcmp(s[j].nom,s[imin].nom)<0) imin=j;
EchangerNom(&s[i],&s[imin]);
}
}
void EchangerAge( persone *pX, persone *pY ) {
persone r = *pX;
*pX = *pY; //tri Age
*pY = r;
}
void triAge(persone s[], int n){
int i,j;
int imin;
for (i=0; i<n; i++) {
imin=i;
for (j=i+1; j<n; j++) if (strcmp(s[j].age,s[imin].age) < 0 ) imin=j;
EchangerAge(&s[i],&s[imin]);
}
}
main(){
FILE *trinom , *triage ;
char fich1[21] , fich2[21] ;
persone *t ; // tableau de structure qui contient age nom et prenom
int cmtr ; // compteur =)
int n ;
int choix;

int age ;

do
{

system("cls");
printf("1--------entrez le nom prenom et l'age de persone----\n");
printf("2------------trie par nom -----________________----- \n");
printf("2------------trie par age----_----______________---- \n");
printf("4------------Sortir-----------------------------------\n");
printf(" Votre choix(1,2,3,4)\n");
scanf("%d",&choix) ;
switch(choix)

{ case 1 :
printf("le nom du fichier la ou les noms et la 1ere lettre du prenom en majuscul :");
scanf("%20s",fich1) ;
trinom = fopen(fich1,"w");
if (trinom != NULL )
printf("votre fichier est cree avec succes !\n");
printf("---------------------------------------------------------------\n");
printf("le nom du fichier là ou les information seront trie par age ? :");
scanf("%s",fich2);
triage = fopen(fich2,"w");
if (triage != NULL )
printf("fichier de tri age est cree avec succes !\n");
printf("-----------------------------------------------------------------\n");
printf("combien des utilisateurs voulez vous stocker ? :");
scanf("%d",&n);
t=(persone*)malloc(n*sizeof(persone));
for(cmtr=0 ; cmtr < n ; cmtr ++){
printf("Entrez le nom et le prenom et l'age de l'utilisateur numero %d :\n",cmtr+1);
scanf("%s %s %d",&t[cmtr].nom,&t[cmtr].prenom,&t[cmtr].age) ;

case 2:
triNom(t,n);
for(cmtr=0; cmtr<n ; cmtr++){
fprintf(trinom,"%d - ",cmtr+1);
fprintf(trinom," le nom est : ");
fprintf(trinom,t[cmtr].nom);
fprintf(trinom," - ");
fprintf(trinom,"le prenom est : ");
fprintf(trinom,t[cmtr].prenom);
fprintf(trinom," - ");
fprintf(trinom,"l'age est : ");
fprintf(trinom, t[cmtr].age ) ;
fprintf(trinom,"\n");
}
case 3:
triAge(t,n);
for(cmtr=0; cmtr<n ; cmtr++){
fprintf(triage,"%d - ",cmtr+1);
fprintf(triage," le nom est : ");
fprintf(triage,t[cmtr].nom);
fprintf(triage," - ");
fprintf(triage,"le prenom est : ");
fprintf(triage,t[cmtr].prenom);
fprintf(triage," - ");
fprintf(triage,"l'age est : ");
fprintf(triage, t[cmtr].age ) ;
fprintf(triage,"\n");
}
printf("------------------------------------------------\n");
for(cmtr = 0 ; cmtr < n ; cmtr++){
printf("%s - %s - %s\n",t[cmtr].nom,t[cmtr].prenom,t[cmtr].age);
}
case 4:
printf(" Bye Bye \n");
while(choix!=4);

}
}

2 réponses

cs_moncif44 Messages postés 2 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 16 mai 2011
16 mai 2011 à 00:50
slt je ss un debuteur en C le programme il ne fonctione pas est s qu'il y a qlq pour m'aider merci
0
axelorque Messages postés 10 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 juillet 2011
18 mai 2011 à 10:43
indente déjà ton code

ensuite niveau conception...
ta fonction EchangerNom() n'échange pas les nom... mais juste les pointeurs des 2 structures personnes passées en parametre
meme probleme pour EchangerAge()

fuites mémoire, tu ne libères pas la mémoire allouée avec malloc()

les tests sur les ouvertures de fichiers ont l'air boiteux oO un oublit de {} surement
0
Rejoignez-nous