420 231--Travail pratique #1--Énoncé

Ce qui suit constitue l'énoncé du travail pratique #1 (TP1).


Raccourcis vers les prototypes de sous-programmes demandés

  • Lire_Bit()
  • Forcer_Bit()
  • Inverser_Bit()
  • Lire_Octet()
  • Forcer_Octet()
  • Tester_Bit()
  • Imprimer_Mot_Binaire()

  • Contraintes générales à respecter

    Vous devrez:

  • implanter le type «partie_de_mot» comme étant un type énuméré pouvant prendre les valeurs «partie_haute» et «partie_basse» seulement;
  • les bits seront numérotés à partir de zéro (0). Ainsi, un entier sur 16 bits aura des bits aux positions de 0 à 15 inclusivement;
  • chaque sous-programme devra valider lui-même les valeurs de ses paramètres, et émettre un message d'erreur dans le cas où l'un d'entre eux serait invalide;
  • les sous-programmes ayant trait aux bits devront être déposés dans un fichier nommé «bits.cpp»;
  • les sous-programmes ayant trait aux octets devront être déposés dans un fichier nommé «octets.cpp»;
  • les sous-programmes ayant trait aux entrées/ sorties devront être déposés dans un fichier nommé «e_s.cpp»;
  • écrire un programme principal (procédure «main()») qui se trouvera dans un fichier nommé «principal.cpp», et qui démontrera le bon fonctionnement de chaque sous-programme que vous aurez implanté;
  • chaque fichier source (portant l'extension «.cpp»), à l'exception du fichier «principal.cpp», devra être accompagné d'un fichier d'en-tête contenant (a) les prototypes des sous-programmes y étant implantés, et (b) les types et constantes globales pertinentes, s'il y a lieu.
  • Détail de l'énoncé

    Le travail consiste à implanter cinq (5) sous-programmes permettrant de manipuler des bits et des octets.

    Ces sous-programmes respecteront les prototypes suivants:

    //////////////////////////////////////////////////////////// // Nom: Lire_Bit // Intrant(s): // Mot: entier duquel lire un bit // Position: position du bit à lire // Extrant(s): // retourne «true» si le bit à la position «Position» dans // l'entier «Mot» a la valeur 1, et «false» sinon // Description: // Retourne la valeur du bit à la position «Position» dans // l'entier «Mot» //////////////////////////////////////////////////////////// bool Lire_Bit (unsigned short Mot, unsigned char Position);

    //////////////////////////////////////////////////////////// // Nom: Forcer_Bit // Intrant(s): // Mot: entier dans lequel forcer un bit // Position: position du bit à forcer // Valeur: valeur à affecter au bit // Extrant(s): // Mot: entier dans lequel le bit aura été forcé // Description: // Affecte la valeur «Valeur» au bit à la position // «Position» dans l'entier «Mot» //////////////////////////////////////////////////////////// void Forcer_Bit (unsigned short &Mot, unsigned char Position, bool Valeur);

    //////////////////////////////////////////////////////////// // Nom: Inverser_Bit // Intrant(s): // Mot: entier dans lequel inverser un bit // Position: position du bit à inverser // Extrant(s): // Mot: entier dans lequel le bit aura été inversé // Description: // Inverse la valeur du bit à la position «Position» // dans l'entier «Mot» //////////////////////////////////////////////////////////// void Inverser_Bit (unsigned short &Mot, unsigned char Position);

    //////////////////////////////////////////////////////////// // Nom: Lire_Octet // Intrant(s): // Mot: entier duquel lire un octet // Partie: partie du mot à lire (partie haute ou basse) // Extrant(s): // retourne la valeur de l'octet lu // Description: // Retourne la valeur de la partie «Partie» du mot «Mot» //////////////////////////////////////////////////////////// unsigned char Lire_Octet (unsigned short Mot, partie_de_mot Partie);

    //////////////////////////////////////////////////////////// // Nom: Forcer_Octet // Intrant(s): // Mot: entier dans lequel forcer un octet // Partie: partie de mot à forcer // Valeur: valeur à affecter à l'octet // Extrant(s): // Mot: entier dans lequel l'octet aura été forcé // Description: // Affecte la valeur «Valeur» à la partie «Partie» de // l'entier «Mot» //////////////////////////////////////////////////////////// void Forcer_Octet (unsigned short &Mot, partie_de_mot Partie, unsigned char Valeur);

    //////////////////////////////////////////////////////////// // Nom: Tester_Bit // Intrant(s): // Mot: entier duquel tester un bit // Position: position du bit à tester // Valeur: valeur pour à laquelle comparer ce bit // Extrant(s): // retourne «true» si le bit à la position «Position» dans // l'entier «Mot» a la valeur «Valeur», et «false» sinon // Description: // Vérifie si la valeur d'un bit de l'entier passé en // paramètre est identique à celle spécifiée à l'appel //////////////////////////////////////////////////////////// bool Tester_Bit (unsigned short Mot, unsigned char Position, bool Valeur);

    //////////////////////////////////////////////////////////// // Nom: Imprimer_Mot_Binaire // Intrant(s): // Mot: entier à afficher // Extrant(s): // aucun // Description: // Affiche la valeur binaire d'un entier //////////////////////////////////////////////////////////// void Imprimer_Mot_Binaire (unsigned short Mot);

    Note: la procédure «Imprimer_Mot_Binaire()», si elle reçoit l'entier «139» (ou «0x008B»), devra afficher «0000000010001011».

    Raccourcis vers les prototypes de sous-programmes demandés

  • Lire_Bit()
  • Forcer_Bit()
  • Inverser_Bit()
  • Lire_Octet()
  • Forcer_Octet()
  • Tester_Bit()
  • Imprimer_Mot_Binaire()