Compte_supprime_69952 Posté(e) le 1 septembre 2005 Partager Posté(e) le 1 septembre 2005 Salut, j'aimerais ecrire un programme qui trie un fichier de mots suivant une fonction de comparaison donne en argument et qui copie le resultat dans un autre fichier. IL faut utiliser un tas pour ecrire cette fonction avec le prototype suivant int triflots (FILE *flotLecture, FILE *flotEcriture, int (*cmp)(const char *s1,const char *s2)) Si quelqu'un sait comment faire?. merci d'avance PS:les fonctions de comparaison sont déjà ecrites ainsi que les fonctions de manipulation du tas Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 1 septembre 2005 Partager Posté(e) le 1 septembre 2005 va voir sur http://www.exood4.com/tutorials/articles/C...9_1.php?lang=fr tu auras un debut apres tout depend comment est structure ton fichier en entree si le fichier contient les mots lignes par lignes ou separes avec un separateur ou .... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Compte_supprime_69952 Posté(e) le 2 septembre 2005 Auteur Partager Posté(e) le 2 septembre 2005 Salut,je mets ce que j'ai fait Voici les protypes des fonctions de manipulation du tas /*Toutes ces fonctions retournent 0 ssi pas d'erreur, un code d'erreur sinon*/ /*Création d'un tas .Le paramètre cmp permet de préciser la relation d'ordre sur ces éléments.*/ extern int newHeap(Heap **h, int (*cmp)(void *,void *)); /*Ajouter l'élément désigné par newElt au tas désigné par h. Fait une copie à usage interne de l'élément.*/ extern int addToHeap(Heap *h, void *newElt); /*Retirer le plus petit élément du tas ,le recopier dans la zone désignée par res ,qu'on suppose suffisament grande.*/ extern int removeSmallestFromHeap(Heap *h, void *res); /*Libérer les ressources occupées par le tas. au retour de la fonction, *h vaut NULL.*/ extern int freeHeap(Heap **h); Voici la fonction ou je demande de l'aide int triFlots(FILE *flotLecture, FILE *flotEcriture, int (*cmp)(const char *s1, const char *s2)) { char nom[]; char*ligne; Heap h; if((flotEcriture=fopen(nom,"w"))==NULL) { fprintf(stderr,"Erreur à l'ouverture\n"); return -1; } if((flotLecture=fopen(nom,"r"))==NULL) { fprintf(stderr,"Erreur à l'ouverture\n"); return -2; } while(!feof(flotLecture)) { newHeap(&h, cmp(ligne,ligne+1)); addToHeap(h,ligne); removeSmallestFromHeap(h,ligne); } fclose(flotLecture); fclose(flotEcriture); return 0; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
mogwai93 Posté(e) le 2 septembre 2005 Partager Posté(e) le 2 septembre 2005 pour lire un fichier octet par octet et si le fichier en entree contient les mots, les uns à la suite des autres exemple le fichier c:\test.txt contient ceci est un test #include <stdio.h> int main () { FILE *file_in; char nom[20] = "c:\\test.txt"; int octet_lu; int separ = 32; if ((file_in = fopen (nom, "r")) == NULL) { printf("Erreur\n"); return -1; } while (!feof(file_in)) { octet_lu=fgetc (file_in); if (octet_lu == separ) printf ("nouveau mot\n"); else if (octet_lu == -1) printf ("fin de fichier\n"); else printf ("lu %d\n", octet_lu); } fclose (file_in); } ensuite il te faut reconstruire les mots à l'aide des lettres puis de faire le tri une fois les mots stockés dans une liste Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.