//Compl�tez le programme en respectant les consignes donn�es en commentaires. //Biblioth�ques (2 pts) #include #include //D�finition d'une constante N de valeur 10 (2 pts) #define N 10 //#define __DEBUG__ //Prototypes des fonctions d�finies par apr�s (7 pts) FILE* OuvrirFichier (); void EncoderNomFichier (char[]); char ChaineVersOctet (char[]); void LireDonnees (FILE*, char[]); void AfficherDonnees (char[]); void CorrigerDonnee (char[], int); int ParitePaire (char); int main() { int i, erreur=0; //D�claration d'un pointeur fichier permettant de manipuler un fichier, initialis� //� NULL (2 pts) FILE* fichier = NULL; //D�claration d'un tableau tab de N �l�ments de 8 bits (2 pts) char tab[N]; //Le pointeur fichier prend la valeur retourn�e par OuvrirFichier (2 pts) fichier = OuvrirFichier (); //Si la valeur du pointeur fichier indique que le fichier a pu �tre ouvert (1 pt) if (fichier != NULL) {//Appel de la fonction LireDonnees (2 pts) LireDonnees(fichier, tab); //Fermeture du fichier (1 pt) fclose (fichier); printf("\nDonnees lues :"); //Affichage en binaire des N �l�ments de tab (1 pt) AfficherDonnees (tab); for (i=0; i=0; i--) { //Si l��l�ment i de chaine est le caract�re 1, positionner le bit //correspondant de la variable octet � 1, sinon le laisser � 0. (4 pts) if (chaine[i] == '1') octet = octet|masque; //D�caler masque pour traiter le bit suivant (1 pt) masque<<=1; } return octet; } //La fonction LireDonnees re�oit en arguments un pointeur fichier permettant //de manipuler un fichier et un tableau tab dont chaque �l�ment est une donn�e //cod�e sur 8 bits. Elle ne retourne aucune valeur. (3 pts) G:\PROJET_FINAL_HTML\progra\colin22.txt void LireDonnees (FILE *fichier, char *tab) { int i; char donnee[10]; char *p; for(i=0; i0; j--) { if (tab[i] & m) { #ifdef __DEBUG__ printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); #endif b[j-1]='1'; } else { #ifdef __DEBUG__ printf("DEBUG i%d j%d: DONNE tab[i] %c avec masque %x\n",i,j,tab[i], tab[i]&0xff&m); #endif b[j-1]='0'; } m<<=1; } b[8]='\0'; printf ("%s", b); } printf("\n"); } //La fonction CorrigerDonnee re�oit en arguments un tableau tab dont chaque �l�ment //est une donn�e cod�e sur 8 bits et un entier i. Elle ne retourne aucune valeur. //(3 pts) void CorrigerDonnee(char tab[N], int i) { char donnee[9]; printf("\nLa donnee %d est erronnee; veuillez la reencoder:", i+1); //Vider la m�moire clavier et saisir la valeur de donnee.(3 pts) fflush (stdin); gets(donnee); //Remplacer l��l�ment i de tab par la donnee r�encod�e convertie en octet. (2 pts) tab[i] = ChaineVersOctet(donnee); } //La fonction ParitePaire re�oit un argument octet cod� sur 8 bits. Elle retourne //"vrai" ou "faux". (2 pts) int ParitePaire (char octet) {//D�claration et �ventuellement initialisation des variables locales (3 pts) int i, compteur = 0, masque = 1; for (i=0; i<8; i++) {//Si le bit i de l�argument octet vaut 1, incr�menter la variable compteur //d�une unit� (3 pts) if (octet & masque) compteur++; //D�caler masque pour traiter le bit suivant (1 pt) masque <<= 1; } //Si compteur est impair retourner "faux", sinon retourner "vrai" (2 pts) if (compteur%2) return 0; else return 1; }