:: Enseignements :: ESIPE :: E3INFO :: 2007-2008 :: Programmation C - Slot 1 ::
[LOGO]

Manipulation de bits et ensembles


Dans ce TD, nous implémenterons les opérations sur la manipulation de bits, puis nous verrons leur application pour les opérations sur les ensembles.

Exercice 1 - Manipulation de bits

  • Ecrire les fonctions de base suivantes :
    • teste_bit qui permet de savoir la valeur d'un des bits d'un octet (char); elle renvoie 0 ou 1.
    • allume_bit qui positionne un bit donné d'un octet à 1.
    • eteint_bit qui positionne un bit donné d'un octet à 0.
  • Ecrire les fonctions suivantes :
    • compte qui reçoit un octet et compte le nombre de bits égaux à 1.
    • est_palindrome qui renvoie 1 ou 0 selon que l'entier passé en paramètre a une représentation binaire palindromique ou non.

Exercice 2 - Ensembles

Un ensemble d'entiers peut être réprésenté comme un tableau de bits. Chaque indice i du tableau correspond à l'entier i ; la valeur dans le tableau à cet indice est 1 si l'entier appartient à l'ensemble, elle est 0 sinon.
  • Définir la structure ensemble qui contient un pointeur vers un tableau d'octets et le nombre d'octets maximum de ce tableau.
  • Ecrire les fonctions creer_ensemble et libere_ensemble qui respectivement alloue et libère un ensemble.
  • Ecrire une fonction ajoute qui ajoute un entier dans un ensemble.
  • Ecrire une fonction affiche_ensemble qui affiche un ensemble.
  • Ecrire une fonction appartient qui indique si un entier donné en paramètre appartient à un ensemble.
  • Ecrire une fonction cardinal qui renvoie le nombre d'élements de l'ensemble passé en paramètre.
  • Ecrire une fonction union qui fait l'union de deux ensembles passés en paramètres.
  • Ecrire une fonction intersection qui fait l'intersection de deux ensembles passés en paramètres.
  • Ecrire une fonction complementation qui fait la complémentation d'un ensemble passé en paramètre.
  • Ecrire une fonction difference qui fait la différence entre deux ensembles passés en paramètres.
  • Bonus: Ecrire une fonction diff_sym qui calcule la différence symétrique entre deux ensembles passés en paramètres.

Exercice 3 - Bonus

Ecrire les fonctions de conversion suivantes :
  • str2bin qui reçoit une chaîne de caractères de longueur maximum 8. Elle vérifie que cette chaîne n'est composée que de 0 ou de 1, puis renvoie l'entier dont la représentation binaire correspond à la chaîne saisie.
  • bin2str qui reçoit un octet et renvoie une chaîne de caractères le représentant dans sa forme binaire.
  • Modifier bin2str pour qu'elle ne retourne que les bits significatifs. Exemple : l'octet 00101001 peut s'écrire 101001.