fgetc - C - Programmation
Marsh Posté le 25-09-2005 à 23:25:30
oula dsl je vois que j'ai mal posté dsl...j essaye de refaire
Marsh Posté le 25-09-2005 à 23:55:31
Zaroastre a écrit : Bonjour @ tous!!
|
J'écris ça comme ça :
|
Détails ici:
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 26-09-2005 à 00:08:08
oki merci beaucoup pour la simplification et la page je pense que ca m'aidera beaucoup pour la suite...on nous a fait faire du C de fevrier a fin avril et la en 2ieme anné on en fait pas en cour mais on nous donne ce genre de tp.. Mais bon je pense que c'est tout de meme benefique je fait des recherche et j'en apprend plus...par exemple le "static" devant la fonction je vais chercher lool
Marsh Posté le 26-09-2005 à 14:55:02
Zaroastre a écrit : oki merci beaucoup pour la simplification et la page je pense que ca m'aidera beaucoup pour la suite...on nous a fait faire du C de fevrier a fin avril et la en 2ieme anné on en fait pas en cour mais on nous donne ce genre de tp.. Mais bon je pense que c'est tout de meme benefique je fait des recherche et j'en apprend plus...par exemple le "static" devant la fonction je vais chercher lool |
Tu devrais mieux lire la correction d'Emmanuel. Le détail crucial de sa correction n'est pas le mot "static" mis devant la fonction (comme ton post le laisse penser) mais dans la manière dont on teste qu'on est arrivé en fin de fichier. Il ne faut absolument pas utiliser "feof" car cette fonction ne sert pas à ça. Elle sert juste à indiquer si la dernière lecture à échouée à cause de "eof". Pour vérifier qu'on est en fin de fichier, on teste la valeur renvoyée par la fonction de lecture. En fin de fichier, cette valeur vaut "EOF".
Le mot "static" devant une fonction permet de restreindre la fonction au source dans lequel elle est écrite. Dans le cadre d'un grand projet avec plusieurs sources, tu peux ainsi réutiliser, pour de petites fonctions utilitaires, le même nom pour tes fonctions dans différents sources. Tu peux alors avoir des fonctions intitulées "lecture" dans chacun de tes sources sans qu'il y ait ambigüité lors de l'édition de lien.
Marsh Posté le 27-09-2005 à 03:19:43
Merci Sve@r , en fait quand j'ai lu le post d'Emmanuel je croyai que mon code etait bon mais qu'il me proposai une facon plus simple (voir plus optimal) de coder...je te remercie pour ta reponse sans quoi j'aurai continué a croire que " while(!feof(fp)) " etait correct...et merci a Emmanuel pour la correction de mon code ^^
Marsh Posté le 27-09-2005 à 08:43:16
Zaroastre a écrit : je te remercie pour ta reponse sans quoi j'aurai continué a croire que " while(!feof(fp)) " etait correct... |
Pourtant, je t'avais passé un lien
Citation : |
expliquant exactement le rôle de feof().
Tu ne l'as pas vu/lu ?
Tu ne l'as pas compris ?
Marsh Posté le 27-09-2005 à 11:43:52
Zaroastre a écrit : for(i=0;i<27;i++){ //initialisation de mon tableau de structure// |
Algorithmiquement, c'est un peu horrible de faire une boucle de 0 à 26 et de tester, à chaque tour de boucle, si on est à 0 ou à 26. Il vaut mieux traiter les cas "0" et "26" avant la boucle et boucler de 1 à 25...
Sinon, on peut aussi se servir du fait que 'a' est un nombre et l'utiliser tel quel
Code :
|
Zaroastre a écrit : lecture(mon_amour.txt); |
Tu veux plutôt dire
Code :
|
Dernier truc... un commentaire en C c'est soit "/*.......*/" soit "// ......." mais ceci "// ...... //" ne sert à rien...
Marsh Posté le 28-09-2005 à 03:04:23
erf...nan je comprend pas, quand on fait: "if(feof(fp))" ca fait un test pour savoir si on est a la fin du fichier pourquoi quand je fait: "while(!feof(fp))" ca marche pas? pour moi ca ve dire tant que "feof" ne m'a pas renvoyé la valeur de fin de fichier alors... c'est pour ca que je comprend pas...
Merci je vous remerci d'avoir corrigé mon code(que je pensai plus ou moins bon a tort...), faut dire que je me concentre sur la creation de l arbre et la c'est beaucoup plus compliqué...a propos si j'ai un tableau te taille fini (dans mon cas 27) si a chaque boucle je veux suprimer la 1er case c'est possible? ou vaut mieux que j'opte pour une liste chainé?
Petite question...est ce que je peux utiliser la fonction "free" si je n'ai jamais utilisé de fonction (du genre malloc) avant dans mon programme et si oui est ce que je peux l'utiliser sur une case d'un tableau (je suppose qu'il faudra créer avant un pointeur de type struct noeud sur mon tableau, et ensuite free(pointeur) ca marche?)
Merci d'avance ++
Marsh Posté le 28-09-2005 à 05:53:50
ok ok !! vu que je patoge dans mon programme cela ma laissé du temps pour lire d'autre sujet et notament celui ou on fait reference aux constructeur/destructeur,et cela m'interesse malheuresement j'ai pas tout compris :$
Code :
|
je vois que la fonction return "self" qui est un pointeur de type struct objet, mais si tu place cette fonction dans une boucle je comprend pas ce qui se passe?? quand tu va repasse dans la fonction ca va recreer une struct mais qui aura le meme non que la precedente??y aura conflit? erf je suis perdu, aidez moi s'il vous plait, je pense utiliser ceci dans mon programme (puisque je vais devoir creer des noeud) mais si je le comprend pas c'est pas la peine...
Merci d'avance...
Marsh Posté le 28-09-2005 à 06:18:46
autre chose, pour le destructeur a la fin ya
Code :
|
si j'ai bien compris il est preferable de mettre
Code :
|
exact?
Marsh Posté le 28-09-2005 à 09:00:42
Zaroastre a écrit : autre chose, pour le destructeur a la fin ya
|
Oui. Ca ne résout pas tous les problèmes (notamment celui des alias, qu'il faut éviter au maximum), mais au moins, le pointeur 'principal' se retrouve dans le bon état.
En fait, puisque tu faisais référence au code du destruteur de l'objet, le fait de forcer le pointeur a NULL après le free() n'a qu'un intérêt local (donc limité, mais peut aider à débugger des objets complexes).
Par contre, cette mesure trouve son sens dans le cadre de l'utilisation réelle de l'objet :
|
(C'est d'ailleurs quasiment mot pour mot ce qui est indiqué un peu plus loin dans l'article sur les TAD (ADT))
http://mapage.noos.fr/emdel/tad.htm
Marsh Posté le 28-09-2005 à 09:11:34
Zaroastre a écrit : erf...nan je comprend pas, quand on fait: "if(feof(fp))" ca fait un test pour savoir si on est a la fin du fichier |
Qui t'a dit ça ? feof() sert à déterminer si la cause de l'arrêt de la lecture (detectée au préalable en testant le code retourné par la fonction de lecture) est une fin de fichier ou non, de même que ferror() sert à savoir si la cause est une erreur de lecture ou non. Ce genre de détail est rarement important.
http://mapage.noos.fr/emdel/notes.htm#fichiers
Citation : |
On ne peut pas 'supprimer' une case dans un tableau. On peut événtuellement la marquer 'vide', soit par une valeur particulière, soit par un état particulier (tableau de structure). Sinon, une liste chainée, oui, pourquoi pas. C'est peut être un peu lourd... A moins que tu disposes d'une bibliothèque de liste chainées génériques... (Moi, je m'en suis fait une... http://mapage.noos.fr/emdel/clib.htm Module GLL )
Citation : |
Non. (seul free (NULL) n'est pas dangereux).
Marsh Posté le 28-09-2005 à 09:19:32
Zaroastre a écrit : ok ok !! vu que je patauge dans mon programme cela ma laissé du temps pour lire d'autre sujet et notament celui ou on fait reference aux constructeur/destructeur,et cela m'interesse malheuresement j'ai pas tout compris :$
|
Boucle ? Tu veux dire si on appelle plusieurs fois la fonction ? C'est simple. Chaque appel faisant un malloc(), un nouveau bloc est crée, et une nouvelle adresse est retournée. A l'appelant de bien sauvegarder les adresses dans des pointeurs différents.
|
Citation : |
Tu vois un nom quelque part ? Je ne vois qu'une variable locale 'self' qui contient une valeur (l'adresse du bloc alloué). Cette valeur est retournée à l'appelant qui a en charge de la sauvegarder proprement. (Je me répète ou quoi ?)
Citation : je pense utiliser ceci dans mon programme (puisque je vais devoir creer des noeud) |
Bonne idée. Fait des essais avant d'intégrer le principe dans ton code. Comme toujours, chaque technique nouvelle doit être assimilée et maitrisée avant d'être utilisée.
Marsh Posté le 28-09-2005 à 09:23:18
Zaroastre a écrit : ok ok !! vu que je patoge dans mon programme cela ma laissé du temps pour lire d'autre sujet et notament celui ou on fait reference aux constructeur/destructeur,et cela m'interesse malheuresement j'ai pas tout compris :$
|
Chaque fois que ton programme utilise "malloc", il alloue une nouvelle zone mémoire qui a donc une adresse différente de la précédente. Le nom importe peu.
Donc tu peux utiliser ta fonction "objet_create" autant de fois que tu veux, même dans une boucle, l'important est la valeur renvoyée soit récupée dans des mémoires différentes, par exemple un tableau ou un noeud différent.
Ex:
Code :
|
Marsh Posté le 01-10-2005 à 18:10:45
re @ tous!! j'avais pris une pause, en effet le prof nous a donné 2 semaine de plus pour realiser ce programme (plutot logique vu le niveau de la classe), du coup je vais pouvoir prendre mon temps et me pencher sur des nouvelle notion, merci pour vos post
++
Marsh Posté le 02-10-2005 à 20:02:12
Salut!!ben malheuresement je me retrouve de nouveau bloqué et cela en prenant mon temp...Le probleme cette fois ci est au niveau de la fonction "free" la compilation est nikel mais a l execution (en fait a la toute fin du programme) ben il me sort que free a foiré (cependant le prog marche mais bon ...). Bon le probleme c'est que mon code est assez long donc je vais ecrire ce qui me semble important pour resoudre le probleme(j'espere :$)
Code :
|
PS: g du declarer "compt" juste aprés l appel des bibliotheques car quand je le declaré dans le "main" il traite pas comme si c'etait une variable global pourtant toute les fonction sont appelé dans le main...g pas tous compris, je pensais que declarer dans "main" c'etait dire que la variable etait une variable global
Marsh Posté le 02-10-2005 à 20:17:59
erf autre chose svp
est ce que calloc (dans mon main) va initialiser les champs contenant des pointeur??ou dois je les initialiser et est ce que c'est important d initialiser a NULL...
De plus comme vous pouvez le constater dans les fonction avant le main j'ai du ecrire "struc noeud" malgré le typedef dans le main...gje doit egalement mettre mon typedef aprés la creation de ma struture(hors du main...)?
merci d'avance car je demande beaucoup de chose...dsl...
Marsh Posté le 02-10-2005 à 20:25:13
Oh la la
Ton programme est illisible, je ne sais pas par où commencer pour t'aider.
Je serais toi, je créerais un nouveau programme, dans lequel je ne m'occuperais que d'allouer un nouveau tableau, l'initialiser avec n'importe quoi (mettons le n° de la case), je l'afficherais, et ensuite je m'occuperais des free().
Commence par ça, déjà. Ensuite seulement occupe-toi de la saisie, puis enfin du tri.
Parce que là, vraiment, j'en perds mon latin.
Citation : |
Une variable déclarée dans le main() n'est pas globale. Quand tu passes ta variable compt à ta fonction, c'est le nom de la variable déclaré dans le prototype de la fonction qu'il faut utiliser, non pas le nom employé dans le main.
Exemple :
void afficher_entier(int i) |
Marsh Posté le 02-10-2005 à 20:33:33
Zaroastre a écrit : est ce que calloc (dans mon main) va initialiser les champs contenant des pointeur??ou dois je les initialiser et est ce que c'est important d initialiser a NULL... |
Il faut voir ta structure comme un bloc en mémoire d'un seul tenant, délimité en variables.
La fonction calloc() alloue une zone mémoire et l'initialise entièrement à 0, ce qui signifie qu'entiers, flottants, pointeurs, caractères, ... contiennent 0 après un calloc().
Et pour un pointeur, zéro équivaut à NULL.
Zaroastre a écrit : De plus comme vous pouvez le constater dans les fonction avant le main j'ai du ecrire "struc noeud" malgré le typedef dans le main...gje doit egalement mettre mon typedef aprés la creation de ma struture(hors du main...)? |
Ton typedef n'est valable que pour tout ce qui suit cette ligne, ta fonction la précédant, elle n'est pas applicable.
A propos de typedef, essaie de choisir des noms de structure plus parlants.
Par exemple :
typedef struct noeud { |
Marsh Posté le 02-10-2005 à 20:44:24
Zaroastre a écrit : est ce que calloc (dans mon main) va initialiser les champs contenant des pointeur?? |
calloc() va mettre tous les bits à 0 (comme le ferait memset() avec 0). Ce n'est pas forcément la représentation correcte de NULL. Pour être portable (indépendant de l'implémentation), il vaut donc mieux le faire explicitement avec ... = NULL;
Citation : ou dois je les initialiser et est ce que c'est important d initialiser a NULL... |
Oui et oui.
Citation : |
Le vrai problème, c'est que tu te lances dans des choses compliquées (Huffman, c'est pas trivial...) alors que tu connais à peine les bases du C que toi seul peut apprendre et expérimenter...
Marsh Posté le 02-10-2005 à 20:49:50
Elmoricq a écrit : La fonction calloc() alloue une zone mémoire et l'initialise entièrement à 0, ce qui signifie qu'entiers, flottants, pointeurs, caractères, ... contiennent 0 après un calloc(). |
Le problème est que calloc() ne met pas la valeur 0 dans un contexte pointeur comme le ferait un brave
char *p = 0; |
ou
struct |
mais qu'il travaille à bas niveau en mettant tous les bits à zéro :
memset (s, sizeof s, 0); |
ce qui produit un résultat non défini sauf pour les unsigned char.
Marsh Posté le 02-10-2005 à 21:57:32
Emmanuel Delahaye a écrit : Le problème est que calloc() ne met pas la valeur 0 dans un contexte pointeur [...] mais qu'il travaille à bas niveau en mettant tous les bits à zéro |
Tout à fait.
Emmanuel Delahaye a écrit : ce qui produit un résultat non défini sauf pour les unsigned char. |
Tu veux dire qu'après un calloc(), tester un pointeur par rapport à NULL pourrait ne pas donner le résultat escompté ?
J'ai beau y réfléchir, je ne comprends pas pourquoi.
Je veux dire... quelle différence entre faire un memset() et assigner (void*)0 à un pointeur ?
A moins que ce ne soit indéfini par la norme, en prévision de cas particuliers ?
Ca me fait peur, ton histoire.
Marsh Posté le 02-10-2005 à 22:11:15
Bon je vais essayé d etre plus clair :
1)je declare une structure que j appel noeud
Code :
|
2)dans mon "main" je declare un pointeur de type structure noeud
Code :
|
3)je veux un tableau contenant les caractere ASCII a partir du caractere "espace" c'est dire 223 cases(au dela ya rien d'interressant) d ou :
Code :
|
4)je parcour un fichier caractere par caractere je regarde ou il est dans mon tableau "tab" et rajoute+1 a la frequence, je n affiche pas mes fonction elles sont bonnes
5)j'ai fini de lire mon fichier ,le tableau "tab" est donc mis a jour, le probleme c'est qu'il ya des lettre qui ont pour frequence 0 et ca je n en veux pas donc je lance un tri par ordre decroissant des frequences
Code :
|
6) les n premiere cases de mon tableau ont une frequence non nul determinons ce "n"(n=compt)
Code :
|
7) maintenant je veux redimensionner mon tableau de facon a garder que les lettre ayant une frequence non nul
Code :
|
8)pour la suite de l exercice je tri par ordre croissant des frequences et alphabetique si les frequ sont egal
Code :
|
8)j ai un tableau trié par odre croissant, disons que mon prog s arrete la ,je libere la memoire alloué a "tab"
Code :
|
Probleme:
la compilation se fait sans probleme(apparent), lors de l execution tout marche (j'ai mis des printf un peu partout pour voir) mais a la toute fin a la ligne du "free" j'ai un truc du genre:
***gclib*** free pointeur size fast : "un adresse"
le truc c'est que si j enleve la ligne avec mon realloc la liberation du pointeur ce fait sans prob donc si quelqu'un a une explication c'est volontier, sachant que mon but est d enlever les cases ou la frequence est nul qu"est ce que je dois faire...
merci d avance...(j espere que c'est plus comprehensible )
Marsh Posté le 02-10-2005 à 22:25:41
Elmoricq a écrit : |
Oui. Sujet trois mille fois débatu sur news:comp.lang.c et news:fr.comp.lang.c ... Le principe est simple. La représentatiion interne des données n'est pas forcément ce qu'on croit. Il y a un niveau d'abstraction qui fait que quand on écrit :
char *p = NULL; |
le compilateur voit que p est un pointeur, et qu'on demande de l'affecter avec la valeur 0. Selon la machine, il va positionner les bits de p de façon à former la combinaison qui, sur cette machine, signifie 'adresse invalide'. Ca peut être tout à 0, mais aussi 0x80000000, 0x5555AAAA ou 0xDEADBEEF, qui sait... Ca dépent de l'implémentation, et le langage C ne définit pas ça.
Donc si on veut être portable, on ne demande pas au couches de bas niveau de mettre les bits à 0, mais on utilise l'affectation ou l'initialisation.
Le même problème existe avec le flottants.
Concernant les types entiers, le langage C (C99) prévoit la possibilité de 'Trap representation', c'est à dire des combinaisons de bits qui signifient 'valeur erronée'. Encore une fois, si on ne connait pas ces détails d'implémentation et qu'on se permet de positionner les bits 'à la main', il peut arriver n'importe quoi.
Marsh Posté le 02-10-2005 à 22:33:58
Zaroastre a écrit : 3)je veux un tableau contenant les caractere ASCII a partir du caractere "espace" c'est dire 223 cases(au dela ya rien d'interressant) d ou :
|
Si tu initialises le contenu de chaque élément de ta structure, calloc() n'a aucune valeur ajoutée par rapport à malloc(), autant utiliser ce dernier.
Dans les deux cas (calloc() ou malloc() ), le cast est inutile, retire-le pour alléger l'écriture.
Et pour initialiser "suivant", par exemple, c'est avec :
tab[i].suivant |
(la notation "->" est un raccourci, voir un cours pour comprendre comment ça fonctionne)
Ah, et avant que je n'oublie : toujours tester le retour des fonctions d'allocation de mémoire.
Citation : |
Je ne sais pas si ce morceau de ta phrase reflète la réalité mais si c'est le cas, ta fonction est probablement plus compliquée qu'elle ne devrait.
Citation : 6) les n premiere cases de mon tableau ont une frequence non nul determinons ce "n"(n=compt)
|
[i]compt ne devrait pas être une variable globale. Les cas où les globales sont réellement utiles ne sont pas très courants (et doivent être maniés avec précaution).
Citation : 7) maintenant je veux redimensionner mon tableau de facon a garder que les lettre ayant une frequence non nul
|
Ouh la. Tu demandes à ton programme de réallouer tab pour qu'il fasse la taille d'un... int.
En plus realloc() ne s'utilise pas ainsi ; si cette fonction échoue, elle retourne NULL alors que le pointeur d'origine reste valide.
De la manière dont tu l'utilises, tu as un bout de mémoire qui se balade dans la nature après l'appel à cette fonction, si elle échoue. Sans compter le fait que tu ne testes pas que tout se passe sans problème, alors que ce n'est peut-être pas le cas.
En plus je ne vois pas l'utilité de modifier la taille du tableau, puisque ta variable compt contient le nombre de cases significatives, les autres pouvant être ignorées.
Citation : Probleme: |
Le problème est que tu veux aller trop vite en besogne, tu utilises des fonctions non triviales alors que tu ne maîtrises pas les bases.
Vas-y plus progressivement, parce que là tu cours à la catastrophe.
Marsh Posté le 02-10-2005 à 22:35:54
Emmanuel Delahaye a écrit : Oui. Sujet trois mille fois débatu sur news:comp.lang.c et news:fr.comp.lang.c ... Le principe est simple. La représentatiion interne des données n'est pas forcément ce qu'on croit. Il y a un niveau d'abstraction qui fait que [...] selon la machine, il va positionner les bits de p de façon à former la combinaison qui, sur cette machine, signifie 'adresse invalide'. Ca peut être tout à 0, mais aussi 0x80000000, 0x5555AAAA ou 0xDEADBEEF, qui sait... Ca dépent de l'implémentation, et le langage C ne définit pas ça. |
Je vais devoir faire le tour de mes programmes alors. J'utilise rarement calloc(), mais quand je le fais, c'est justement dans l'optique du "d'une pierre deux coups".
EDIT : si je suis ce raisonnement, tester un pointeur avec : "if ( !pointeur )" est piégeux, alors ?
Marsh Posté le 02-10-2005 à 22:45:55
Elmoricq a écrit : |
Oui, ça m'a fait pareil. Mais c'est vrai qu'il est rare d'utiliser calloc()...
Citation : EDIT : si je suis ce raisonnement, tester un pointeur avec : "if ( !pointeur )" est piégeux, alors ? |
Non, car on est dans un 'contexte pointeur'. L'interprétation de 'pointeur != 0' est faite par le compilateur.
Marsh Posté le 02-10-2005 à 23:17:23
bon tant pis je vais pas me prendre la tete je vais faire un programme bien lourd, plutot que de redimmensionner un tableau je vais en créer d autre qui donnerons ce que je veux...
A propos des mes bases, tu a surement raison mais la fac nous a appris les bases du C en 3 mois (en 1er année) c'est a dire qu'il ne sont jamais allé au fond des choses (ex: "malloc":fonction qui...blablabla + 1 exo bidon dessus et voila). Maintenant en 2ieme anné on fait pas de cour de C (c'est censé etre connu) et on nous balance des TP a remmetre,la huffman et encore c'est que le 1er je sais pas ce qui viendra aprés, voila je fais ce que je peux avec ce que l'on m'a donné, j'ai validé mon info de 1er anné donc on peut meme pas dire que j ai fais l impasse sur les cours...
Bref ce qui est vrai c'est que j'aime bien l info et un programme ecrit simplement sans se preocuper de l optimisation ben ca me gene(je dis pas que mon programme est optimisé, je dis juste qu'il est optimisé pour moi, il va de soit qu'une personne ayant plus de connaissance l optimisera encore plus) tout ca pour dire qu'il est vrai que j'utilise des notions que je ne maitrise pas totalement...
Bon je vais faire un programme basic qui marche et aprés je me pencherai dessus pour essayer de modifier des ligne de codes
merci @ tous ++
Marsh Posté le 02-10-2005 à 23:27:46
Citation : Bref ce qui est vrai c'est que j'aime bien l info et un programme ecrit simplement sans se preocuper de l optimisation ben ca me gene(je dis pas que mon programme est optimisé, je dis juste qu'il est optimisé pour moi, il va de soit qu'une personne ayant plus de connaissance l optimisera encore plus) |
Mais ton programme ne fonctionne pas, et il est difficilement compréhensible, pourquoi veux-tu "l'optimiser" ?
As-tu des besoins spécifiques pour une plateforme aux performances restreintes ? Est-il anormalement lent, ou constates-tu qu'il consomme trop de mémoire ?
Avant d'optimiser, il faut d'abord que le programme fonctionne, et je pense que tu devrais pour l'instant t'en tenir à cet unique objectif.
Sinon je ne saurais trop te conseiller le livre "Le Langage C", de Kernighan & Ritchie. Ainsi que les nombreux tutoriaux sur le net, comme le site d'Emmanuel qu'il t'a déjà mis en lien, sur ce topic même, et que tu n'as manifestement pas pris la peine de lire.
Ce n'est pas une critique, c'est une constatation.
Un autre truc sympa, c'est "man le_nom_d'une_fonction", soit en commande sur un unixoïde, soit dans Google ça marche aussi, tu auras plein de détails sur une fonction particulière.
Marsh Posté le 02-10-2005 à 23:32:04
Zaroastre a écrit : A propos des mes bases, tu a surement raison mais la fac nous a appris les bases du C en 3 mois (en 1er année) c'est a dire qu'il ne sont jamais allé au fond des choses (ex: "malloc":fonction qui...blablabla + 1 exo bidon dessus et voila). |
Le principe de la fac c'est de donner quelques clés de base. Ensuite, c'est 200% de travail personnel. Si il n'a jamais été fait, tu te retrouves devant une montagne de difficultés. Il faut 6 mois à un an de pratique quotidienne pour [auto]former correctement un programmeur C... Et je suppose que tu avais d'autres choses à faire en plus... Mais ne compte pas sur les forums pour résoudre tous tes problèmes...
Citation : |
CQFD. L'école c'est fini. Il faut prendre des initiatives d'auto-formation. Personne ne peut le faire à ta place...
Citation : |
C'est là qu'on est censés pleurer sur ton sort ?
Citation : |
Insuffisant. Il manque énormément de travail personnel. L'informatique c'est un truc de passioné. Un vrai geek ne dord pas. Il programme. Il n'a pas de femme, mais une console. Pas d'amis, mais internet etc. Je caricature un peu (à peine...), mais au début, c'est un peu ça. Ensuite ça se tasse...
Citation : |
Bonne démarche. Mais vas-y pas à pas et n'aborde pas une notion nouvelle tant que tu ne maîtrises pas la notion courante. (pédagogie élémentaire, mais pas évidente pour tout le monde...)
Marsh Posté le 03-10-2005 à 00:00:49
Si je demande de l aide c'est parce que ce que le prog que j'ai affiché aujourd'hui aussi etonnant que cela puisse vous paraitre il marche!! c'est juste que je n'arrive pas a regler le probleme de mon "free" a la fin de l execution ,si j'etais cochon j'aurai laissé le truc tel qu'elle mais c'est pas le cas d'ou ma requete
Autre chose, j'ai demandé a personne de pleurer sur mon sort, et je n 'ai pas non plus debarqué en disant "quelqu'un peut me donner la solution du codage d huffman?", derniere chose travail personnel ou pas pour ma part je trouvai les TD de 1er anné bidon (c'etait pas le cas de tous le monde) et je dis juste qu'il y a eu un manque de continuiter entre la 1er et 2ime anné quand je fais reference a huffman, le prof s'en est d ailleur rendu compte puisqu'il nous a donné 2 semaine de plus pour faire ce TP et en nous disans que finalement c'est vrai que ce TP n est pas facile et qu'il permettra d'approfondir des notions de 1er année (sous entend que l'on ne l'ai maitrise pas)
merci @++
Marsh Posté le 25-09-2005 à 23:23:36
Bonjour @ tous!!
Bon voila je dois faire un programme utilisant l'algo d'huffman(j'ai vu qu'il y avait un precedent sur le forum).Je rappel la 1er etape: determiner le nombre d'apparition de chaque caracteres d'une phrase, sauf que j'ai un fichier.txt en entré et je dois m'occuper que ds minuscule et du caractere espace. Mais voila j'ai un gros doute quand a mon utilisation de la fonction fgetc mais je ne vois pas comment faire sinon, donc si vous pouviez y jeter un oeil ainsi qu'au reste svp... merci d'avance
PS:c'est mon 1er post et je plante quand j appui sur aperçu donc je sais pas comment ca va apparaitre...
PPS:j'espere que ce sera mieu..
Message édité par Zaroastre le 25-09-2005 à 23:39:46