Trier une fichier en langage c
Fermé
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
-
27 avril 2007 à 20:51
iris - 11 mars 2021 à 22:28
iris - 11 mars 2021 à 22:28
A voir également:
- Trier une fichier en langage c
- Fichier rar - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier iso - Guide
14 réponses
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
20 oct. 2007 à 19:18
20 oct. 2007 à 19:18
1. Tu commences par réaliser un petit gestionnaire de paramètres d'entrée pour analyser ce que souhaite faire l'utilisateur.
main( int argc , char **argv ) où argc = Nombre d'arguments, argv = liste des arguments
2. Pour le premier choix, si j'ai bien compris, il faut trier le fichier selon une des colonnes. Un algorithme simple mais bestial, admissible pour des fichiers pas trop long, serait de :
i. Lire les enregistrements du fichier d'entrée ligne par ligne en mémorisant la ligne lue si elle est plus grande selon le critère de tri que celle mémorisée. Après avoir balayétout le fichier, la ligne mémorisée sera donc celle en tête de liste, à écrire dans le fichier de sortie. Il suffit alors de rebalayer le fichier d'entrée pour avoir la ligne suivante, à ajouter au fichier de sortie, et ainsi de suite jusqu'à avoir transféré toutes las lignes. L'inconvénient est qu'il faut relire N fois le fichier d'entrée, N étant le nombre de lignes de ce fichier. Méthode devient vite longue si fichier long !
ii. Le + simple est de créer une structure qui mappe une ligne, comme :
typedef struct {
char code[3];
char designation[20];
char prix[7];
char stock[5];
char fournisseur[10];
} tEnregistrement;
Tu peux alors créer un tableau de structures tEnregistrement et y transférer les données du fichier d'entrée :
tEnregistrement Enr[100]; en supposant que tu n'aies pas plus de 100 enregistrements. Si ce nombre est inconnu, alors il faut faire une allocation dynamique de mémoire (malloc() puis des realloc())
Une fois que tu as tranféré le fichier d'entrée dans le tableau Enr[], il ne te suffit plus que de faire un petit tri bulle su le tableau, puis de vider le tableau dans le fichier de sortie. Simple et rapide car tu travailles en mémoire.
Pour ta gouverne, le tri bulle : Tu balaye le tableau, et à chaque ligne tu la compares avec la suivante, si elles sont dans le bon ordre, ok, sinon tu echange leur contenu. Tu rebalaye alors le tableau jusqu'à ce qu'il n'y ait plus de permutation.
Je ne veux pas t'écrire le programme car cela ne t'apprendrai rien, mais si tu veux des conseils, poses moi des questions ou envoie moi ton code et je t'aiderai bien volontiers.
@++
main( int argc , char **argv ) où argc = Nombre d'arguments, argv = liste des arguments
2. Pour le premier choix, si j'ai bien compris, il faut trier le fichier selon une des colonnes. Un algorithme simple mais bestial, admissible pour des fichiers pas trop long, serait de :
i. Lire les enregistrements du fichier d'entrée ligne par ligne en mémorisant la ligne lue si elle est plus grande selon le critère de tri que celle mémorisée. Après avoir balayétout le fichier, la ligne mémorisée sera donc celle en tête de liste, à écrire dans le fichier de sortie. Il suffit alors de rebalayer le fichier d'entrée pour avoir la ligne suivante, à ajouter au fichier de sortie, et ainsi de suite jusqu'à avoir transféré toutes las lignes. L'inconvénient est qu'il faut relire N fois le fichier d'entrée, N étant le nombre de lignes de ce fichier. Méthode devient vite longue si fichier long !
ii. Le + simple est de créer une structure qui mappe une ligne, comme :
typedef struct {
char code[3];
char designation[20];
char prix[7];
char stock[5];
char fournisseur[10];
} tEnregistrement;
Tu peux alors créer un tableau de structures tEnregistrement et y transférer les données du fichier d'entrée :
tEnregistrement Enr[100]; en supposant que tu n'aies pas plus de 100 enregistrements. Si ce nombre est inconnu, alors il faut faire une allocation dynamique de mémoire (malloc() puis des realloc())
Une fois que tu as tranféré le fichier d'entrée dans le tableau Enr[], il ne te suffit plus que de faire un petit tri bulle su le tableau, puis de vider le tableau dans le fichier de sortie. Simple et rapide car tu travailles en mémoire.
Pour ta gouverne, le tri bulle : Tu balaye le tableau, et à chaque ligne tu la compares avec la suivante, si elles sont dans le bon ordre, ok, sinon tu echange leur contenu. Tu rebalaye alors le tableau jusqu'à ce qu'il n'y ait plus de permutation.
Je ne veux pas t'écrire le programme car cela ne t'apprendrai rien, mais si tu veux des conseils, poses moi des questions ou envoie moi ton code et je t'aiderai bien volontiers.
@++
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
28 avril 2007 à 02:35
28 avril 2007 à 02:35
< code>CODE....<code> est très utile.
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
18 oct. 2007 à 20:53
18 oct. 2007 à 20:53
Bonjour Rose,
et bien expose-moi ton problème en langage C, et je tacherai de te répondre le plus clairement possible !
et bien expose-moi ton problème en langage C, et je tacherai de te répondre le plus clairement possible !
salut ,
merci bien pour votre attention ,concernant mon probléme j'ai un programme trés important sur les fichiers que j'ai pas pu le réaliser si vraiment tu peux m'aider je vais t 'écrire l'ennoncé sinon merci de me répondre
merci bien pour votre attention ,concernant mon probléme j'ai un programme trés important sur les fichiers que j'ai pas pu le réaliser si vraiment tu peux m'aider je vais t 'écrire l'ennoncé sinon merci de me répondre
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
20 oct. 2007 à 17:50
20 oct. 2007 à 17:50
Bonjour,
Et bien ok, envoie moi les données du problème et/ou ce que tu as déjà fait !
@++
Et bien ok, envoie moi les données du problème et/ou ce que tu as déjà fait !
@++
oui j'AI essayé et j'ai fait tout ce que j'ai pu faire mais j'ai pas terminé encore voila` l'ennoncé:
écrire un prog en c qui permet d'accepter le nom d'un fichier texte de longeur constante concernant des articles en stock.
chaque ligne contient:
-code [3 caractére]
-désignation [20 car]
-prix [7car]
-stock [5 car]
-fournisseur [10]
le programme offre un menu qui permet de :
-trier le fichier sur l'un des champs(au choix) et l'affiche sur écran.
-le charger dans un tableau de structure et le trier au choix sur l'un des champs.
-le charger ds une liste chainéé et le trier sur l'un des critéres au choix.
svp j'aurai besoin de ça avant lundi sans la 3 éme partie car on a pas encore la traitéé en classe et merci une autre fois.
écrire un prog en c qui permet d'accepter le nom d'un fichier texte de longeur constante concernant des articles en stock.
chaque ligne contient:
-code [3 caractére]
-désignation [20 car]
-prix [7car]
-stock [5 car]
-fournisseur [10]
le programme offre un menu qui permet de :
-trier le fichier sur l'un des champs(au choix) et l'affiche sur écran.
-le charger dans un tableau de structure et le trier au choix sur l'un des champs.
-le charger ds une liste chainéé et le trier sur l'un des critéres au choix.
svp j'aurai besoin de ça avant lundi sans la 3 éme partie car on a pas encore la traitéé en classe et merci une autre fois.
la rose
Messages postés
2
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
21 octobre 2007
20 oct. 2007 à 20:09
20 oct. 2007 à 20:09
svp ,comment je fais le tri du tableau sur le champ designation par exemple qui est de type caractére ?c'est ça mon probléme
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
20 oct. 2007 à 22:33
20 oct. 2007 à 22:33
tu fais un tri bulle (par exemple d'autres algo sont possibles)
static int sNbPermut;
int Comparaison( tEnregistrement *pA , tEnregistrement *pB ) {
tEnregistrement T;
if (memcmp( pA->Designation , pB->Designation , sizeof( pA->Designation) )) {
memcpy( &T , pA , sizeof(tEnregistrement) );
memcpy( pA , pB , sizeof(tEnregistrement) );
memcpy( pB , &T , sizeof(tEnregistrement) );
sNbPermut++;
}
return( 0 );
}
int TriBulle( tEnregistrement *pE , int NbEnr ) {
for ( sNbPermut = 1 ; sNbPermut ; ) {
sNbPermut = 0;
for ( i = 0 ; i < NbEnr-1 ; i++ ) Comparaison( pE+i , pE+i+1 );
}
return( 0 );
J'ai écrit ce bout de code ex abrupto, sans tester, mais ce ne devrait pas être loin de tourner.
Te voilà avancée ?
@++
}
static int sNbPermut;
int Comparaison( tEnregistrement *pA , tEnregistrement *pB ) {
tEnregistrement T;
if (memcmp( pA->Designation , pB->Designation , sizeof( pA->Designation) )) {
memcpy( &T , pA , sizeof(tEnregistrement) );
memcpy( pA , pB , sizeof(tEnregistrement) );
memcpy( pB , &T , sizeof(tEnregistrement) );
sNbPermut++;
}
return( 0 );
}
int TriBulle( tEnregistrement *pE , int NbEnr ) {
for ( sNbPermut = 1 ; sNbPermut ; ) {
sNbPermut = 0;
for ( i = 0 ; i < NbEnr-1 ; i++ ) Comparaison( pE+i , pE+i+1 );
}
return( 0 );
J'ai écrit ce bout de code ex abrupto, sans tester, mais ce ne devrait pas être loin de tourner.
Te voilà avancée ?
@++
}
la rose
Messages postés
2
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
21 octobre 2007
21 oct. 2007 à 11:05
21 oct. 2007 à 11:05
merci bien pour votre aide
slm bolboll
j'aime bien savoir comment modifier un fichier en plus j'ai un pb en affichage en un affichant un fichier deja cree
il apparait par des code ascii
j'aime bien savoir comment modifier un fichier en plus j'ai un pb en affichage en un affichant un fichier deja cree
il apparait par des code ascii
Salut boboll, mais ton programme ne permet pas d'ouvrir le fichier txt que je veux trié, il ne le trouve pas et pourtant il est dans le meme dossier que mon programme ... tu sais pourquoi stp ?
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
28 avril 2007 à 02:43
28 avril 2007 à 02:43
merci de votre reponse mais franchement je sais pas qu'est ce que tu veux dire
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
>
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
29 avril 2007 à 02:20
29 avril 2007 à 02:20
merci pour votre aide
tatou_38
>
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
29 avril 2007 à 16:42
29 avril 2007 à 16:42
Ton source C est passionnant, mais quelle est ta question ??
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
>
tatou_38
29 avril 2007 à 16:46
29 avril 2007 à 16:46
bon je n'ai pas de question, juste j'ai voulu posté mon code et savoir si quelqu'un à quelques idées d'amélioration. merci
bolbolll
Messages postés
6
Date d'inscription
vendredi 27 avril 2007
Statut
Membre
Dernière intervention
29 avril 2007
>
tatou_38
29 avril 2007 à 19:55
29 avril 2007 à 19:55
merci, est ce que je dois le refomuler et le poster d'une façon plus formulée t plus lisible? si tu veux je suis prés de faire ça.
a.mech
Messages postés
2
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
1 mars 2008
1 mars 2008 à 19:37
1 mars 2008 à 19:37
bonjour voisi mon probleme je débute ds le c et il faux ke je trouve la soluc de ce prblm
ecrir e un programme principale en C qui:
1- lit 10 entier a partir de clavier .
2- construit une liste chéner de ses entier .
3- trier ses enties on utilisant la fonction TRIER et affiche le resultat sur une ligne d'ecran.
svp curg
ecrir e un programme principale en C qui:
1- lit 10 entier a partir de clavier .
2- construit une liste chéner de ses entier .
3- trier ses enties on utilisant la fonction TRIER et affiche le resultat sur une ligne d'ecran.
svp curg
25 juin 2018 à 14:02
11 mars 2021 à 22:28