Compte_supprime_69952 Posted September 1, 2005 Share Posted September 1, 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 Link to comment Share on other sites More sharing options...
mogwai93 Posted September 1, 2005 Share Posted September 1, 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 .... Link to comment Share on other sites More sharing options...
Compte_supprime_69952 Posted September 2, 2005 Author Share Posted September 2, 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; } Link to comment Share on other sites More sharing options...
mogwai93 Posted September 2, 2005 Share Posted September 2, 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 Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.