1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/* Fichier d'en-tête */
#include <stdio.h>
#include <stdlib.h>
/*Prototypes*/
int read_file(char freq[256],FILE *fichier);
char carac_plu_frequent(char freq[256]);
char lecture_8octets_aff_topo(char tab[8],FILE *fichier,char freq[256]);
char miseaX (int x,int i,char c);
/*Fonction read_file permettant de lire le fichier et de stocker les caractere dans un tableau ce qui permettra de voir le nombre de caractere et le caractere le plus frequent*/
int read_file(char freq[256],FILE *fichier)/*Elle renvoi un int normal c'est le nombre de caractere*/
{
int nb_carac;/*Variable de type entier pour le nombre de caractere*/
int i;/*Pour la scrutation*/
char c;/*Pour stocker les caractere scruter*/
fichier = fopen("fichier.txt","r+");/*On ouvre le fichier qu'on veut lire*/
nb_carac = 0;/*on met a 0 le nombre de caractere*/
for(i=0;i<256;i++)/*On met toutes les cases du tableau à 0*/
{
freq[i] = 0;/* voila qui est fait ...*/
}
if(fichier == NULL)/*On verifie bien que le fichier existe*/
{
printf("Erreur pendant la lecture du fichier\n");
exit(0);/*On sort du programme si le fichier n'existe pas*/
}
while(!feof(fichier))/*Tant qu'on est pas arrivé a la fin du fichier*/
{
c = fgetc(fichier);/*c prend la valeur d'un caractere*/
freq[c] = freq[c] + 1;/*dans le tableau on increment la case du tableau correspondant a la valeur ASCII du caractere*/
nb_carac++;/*Sert a compter le nombre de caractere*/
}
nb_carac = nb_carac - 1; /*C'est bizare ca lit un caractère en plus ...*/
return nb_carac;/*La fonction retourne le nombre de caractere au cas ou on en aurai besoin*/
}
/*fonction carac_plu_frequent permettant en sorti de voir le fichier le plus frequent dans le fichier*/
char carac_plu_frequent(char freq[256])/*Elle renvoi un caractere ( le plus frequent )*/
{
int frequence_max_du_carac ;/*Permet de stocker le nombre de fois qu' un caractere est present*/
int carac_plus_frequent;/*Permet de stocker le caractere le plus fréquent*/
int i;/*Pour la scrutation*/
carac_plus_frequent = 0; /*On met a 0 ....(normal)*/
frequence_max_du_carac = 0;/*On met a 0 ....(normal)*/
for(i=0;i<256;i++) /* on scrut le tableau de caractere afin de determiner le caractere le + fréquent */
{
if(freq[i] > frequence_max_du_carac)/*Si le nombre de caractere est superieur au debut a 0 alors on entre*/
{
carac_plus_frequent = i; /*le caractere le plus fréquent prend alors la valeur de i */
frequence_max_du_carac = freq[i]; /*Et le nombre de fois qu'apparai le caractere est mis dans la variable frequence_max*/
}
}
printf("Le caractere le plus fréquent apparait %d fois \n",frequence_max_du_carac);
return carac_plus_frequent;/*On retourne le fameux caractere */
}
/*Fonction lecture_8octets_aff_topo permettant de lire 8 caractere et d'en sortir le topologique */
char lecture_8octets_aff_topo(char tab[8],FILE *fichier,char freq[256])
/*elle renvoi le caractere topologique*/
{
char temp;/*Temp sera ici le caractere le plus frequent (on appelera la fonction précédente) */
char c;/*C servira pour stocker les caractere lu dans le fichier */
int i;/*tjs pour la scrutation */
char topo ;/*topo sera le nombre topologique */
for(i=0;i<8;i++)
{
tab[i] = 0;
}
temp = 0;
for(i=0;i<8;i++)/*On veut 8 caractere donc de 0 a 7 */
{
c =0;/*on met c a 0 normal */
if(!feof(fichier))/*Si on est pas arriver a la fin du fichier on fait ...*/
{
c = fgetc(fichier);/*c prend la valeur d'un caractere*/
}
tab[i] = c;/*tab[i] prend la valeur de c pour tab allant de 0 a 7 inclus*/
}
topo = 0; /*Normal*/
temp = carac_plu_frequent(freq);
for(i=0;i<8;i++)
{
if(tab[i] == temp) /*si tab[i] est notre caractere le plus fréquent */
{
topo = miseaX(1,7-i,topo); /*Donc la ....on fait un maskage 00000000 | 00000001 : pour i = 0 il n'y a pas de decalage donc si tab[i] = temp le bit de poit faible = 1 .. etc .. */
}
}
return topo;/*on retourne le topologique */
}
char miseaX (int x,int i,char c)
{
if(x == 0)
{
return(c&~(1<<i));
}
else
{
return(c|(1<<i));
}
}
int main(void)
{
FILE *fichier;
char topo;
char tab[8];
char freq[256];
int n;
char c;
n = read_file(freq,fichier);
printf("Le fichier contient : %d caractere(s)\n",n);
c = carac_plu_frequent(freq);
printf("Le caractere le plus fréquent dans le fichier est : %c\n",c);
fseek(fichier,0,0);
topo = lecture_8octets_aff_topo(tab,fichier,freq);
printf("Le caractere topologique est : %c",topo);
fclose(fichier);
return 0;
} |
Partager