écrire un programme qui trie (trie par insertion) par nom et par age un tableau
cs_moncif44
Messages postés2Date d'inscriptionjeudi 10 mars 2011StatutMembreDernière intervention16 mai 2011
-
16 mai 2011 à 00:49
axelorque
Messages postés10Date d'inscriptionjeudi 27 mai 2010StatutMembreDerniè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);
}
}
A voir également:
écrire un programme qui trie (trie par insertion) par nom et par age un tableau
axelorque
Messages postés10Date d'inscriptionjeudi 27 mai 2010StatutMembreDerniè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