From da46906e65498700f0eb0e1a858dfe652b5593b6 Mon Sep 17 00:00:00 2001 From: Adrien Van Date: Sat, 4 Feb 2017 11:10:08 +0100 Subject: [PATCH] add exam colin22 --- colin22.c | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 colin22.c diff --git a/colin22.c b/colin22.c new file mode 100644 index 0000000..afbcb80 --- /dev/null +++ b/colin22.c @@ -0,0 +1,227 @@ +//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 + +//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) +void LireDonnees (FILE*fichier, char tab[N]) +{ + int i; + char donnee[9]; + for(i=0; i=0; j--) + { + if (tab[i] & m) + b[j]='1'; + else b[j]='0'; + m<<=1; + } + b[9]='\0'; + printf ("%s", b); + printf("\n"); + } + 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 == 1) + return 0; + else + return 1; +}