Programmation

Programmer en divers langages Programmation
Programmer en divers langages
Programmation
Programmer en divers langages
Sondages
Votez pour une réponse
Perl
Forum Perl
Php
Forum Php
Javascript
Forum Javascript
Programmation
Tout sur la programmation
MS Access
Forum sur access
Dreamweaver
Forum d'aide
Flash
Aide sur Flash
Petites Annonces
Petites Annonces
Livre d'Or
Livre d'Or
Liens
Liens favoris

Comprendre un programme langage c Forum Tout sur la programmation
[ Envoyer un message ] [ Forum programmation ] [ F.A.Q. ] [ Archives ]
(1 visiteur)

Forum Tout sur la programmation Modification: 12/8/2008
Création: 10/10/2001

Forum consacré à la programmation en tous les langages (C, C++, Java, Perl, Python, Ada, ASM, Forth, Pascal, etc...

 
504 messages déposés

Comprendre un programme langage c

Envoi de ellierim le 10 Mai 2004 13:39:48:

Bonjour,

J'ai à comprendre un programme en langage c qui calcul l'occurence de mots dans un fichier.

J'ai du mal à comprendre les fonctions "chercher indice" et "placer" et donc à comprendre comment le programme calcule le nombre d'occurence des mots.

Quelqu'un peut-il m'aider ?

Je lui en suis très reconnaissant par avance.

Voici le programme :#include
#include
#include

/**************** Définition d'une structure ******************/
typedef struct compteMot
{
char * mot;
int nbOcc;
}CompteMot;

/******************** Les constantes ************************/
enum {MAXLONGUEUR = 200};

/* Le tableau où seront rangées les structures de type CompteMot */
CompteMot *tableau;

/* Le nombre de mots*/
int nbMots = 0;

/* La taille du tableau contenant les mots */
int tailleTableau = 50;

char chercherIndice(char *, int *);
char placer(char *, int);

/******************** La fonction principale *******************
Le programme :
- Ouvre en lecture un fichier contenant un texte, fichier dont le nom
est indiqué sur la ligne de commande. Dans le cas où l'utilisateur omet
de donner un nom de fichier d'entrée sur la ligne de commande, le programme
demande à l'utilisateur d'indiquer le texte directement par le clavier.
- Trie les mots et compte le nombre d'occurence de chaque mot
- Indique la liste triée des mots, un mot par ligne, avec pour chaque mot,
son nombre d'occurences. Si l'utilisateur a donné sur la ligne de commande
deux noms de fichiers, le premier pour le fichier d'entrée
contenant le texte, le second pour un fichier de sortie, cette liste est
sauvée sur le fichier de sortie. Sinon, la liste est indiquée à l'écran. */
int main(int argc, char **argv)
{
char ligne[MAXLONGUEUR], *s, *mot;
int indice;
FILE *fichier;
int i;

if (argc > 1) fichier = fopen(argv[1], "r");
else
{
fichier = stdin;
printf("Indiquez votre texte\n");
}
tableau = (CompteMot *) malloc(tailleTableau * sizeof(CompteMot));
if (tableau == NULL)
{
printf("problème d'allocation\n");
exit(1);
}
while (fgets(ligne, MAXLONGUEUR, fichier) != NULL)
{
s = ligne;
while ((mot = strtok(s, " []{}\\\n{}()*/\"#.;:,\t'?!-&%+=")) != NULL)
{
if (!chercherIndice(mot, &indice)) placer(mot, indice);
else tableau[indice].nbOcc++;
s = NULL;
}
}
fclose(fichier);
printf("\n");
for (i = 0; i 0) gauche = milieu + 1;
else
{
*adrIndice = milieu;
return 1;
}
}
*adrIndice = gauche;
return 0;
}

/****************** La fonction placer ******************/
/*Decale vers la gauche les mots qui se trouvent
a des indices aux moins egaux a "indice" et met le mot "mot"
a l'indice "indice" dans le tableau.
ATTENTION : il faut allouer de la mémoire pour y mettre le nouveau
mot par une copie */
char placer(char *mot, int indice)
{
int i;
char *leMot;

leMot = (char *) malloc((strlen(mot) + 1)*sizeof(char));
if (leMot == NULL)
{
printf("problème d'allocation\n");
exit(1);
}
strcpy(leMot, mot);
if (nbMots == tailleTableau)
{
printf("Le tableau est plein, nous reallouons\n");
tailleTableau += 50;
tableau = (CompteMot *) realloc(tableau,
tailleTableau * sizeof(CompteMot));
if (tableau == NULL)
{
printf("problème d'allocation\n");
exit(1);
}
}
for (i = nbMots; i > indice; i--) tableau[i] = tableau[i - 1];
tableau[indice].mot = leMot;
tableau[indice].nbOcc = 1;
nbMots++;
return 1;
}






Réponses:


Répondre

Pseudo:
(limité à 25 caractères)
E-Mail:
Cochez cette case pour être averti à l'adresse ci-dessus d'une réponse sur ce fil de discussion

Sujet: Re: Comprendre un programme langage c

Commentaires:

Créer un blog aminaute gratuitement et facilement


Alerter Rezoweb si ce message est illégal

Créez votre Forum Rezoweb gratuitement !

Vous pouvez rechercher un mot ou une expression
dans les messages indexés par Google :

Créez votre Forum gratuit Rezoweb

RezoSite hébergé gratuitement par Rezoweb