<== PLAN | P.précédente | P.suivante | Corrigé | en bas

N.F.I. 2 ième année Langage C octobre 1999

Contrôle d'octobre 1999


Ce texte est un travail de simulation d'opérations logiques sur des groupes de 8 bits. Les deux caractères '0' et '1' sont appelés carBit. Une suite de 8 carBits est appelée un carOctet.

La disjonction entre deux carBits c et d est le carBit coud défini ci-contre:
  char c, d, coud;
  // évaluation de c, d ... puis
  if(c=='0' && d=='0') coud = '0';
  else                 coud = '1';
    
La disjonction entre deux carOctets est le carOctet, défini ci-contre :
  c1c2c3c4c5c6c7c8 OU d1d2d3d4d5d6d7d8 =
         c1OUd1 c2OUd2  . . .  c8OUd8
     
  1. Disjonction entre deux carOctets
    1. On représente un carOctet par un tableau de 8 caractères.
      Ecrire un programme qui initialise deux carOctets u et v, respectivement par des tableaux de 8 caractères, puis évalue dans un troisième tableau le résultat de l'opération 'OU' entre ces carOctets.
      Il est imposé que l'initialisation de u et v soit faîte à la déclaration des tableaux.
      Un exemple d'affichage figure ci-contre.
      
           u   =  xxxxxxxx     
           v   =  yyyyyyyy  
        u ou v =  ++++++++
                

    2. Ecrire une version du programme précédent, dans laquelle les carOctets sont représentés par des chaînes de caractères, ce qui change, en particulier, l'initialisation et l'affichage des carOctets.

  2. Conversion: entier vers carOctet

  3. Minimum et maximum
      Un carOctet étant codé comme une chaîne de 8 caractères, on définit le type CarOctet de la façon suivante:
        typedef char * CarOctet;

    1. On dispose de deux sous-programmes qui, à partir d'un tableau de n carOctets , fournissent respectivement l'indice du plus petit et du plus grand carOctet du tableau; leur prototype sont:
        int plusPetitInt( int n, CarOctet tc[]);
        int plusGrandInt( int n, CarOctet tc[]);

      Ecrire un seul sous-programme dont l'appel fournit, pour un tableau de carOctets, les indices dans ce tableau du plus petit et du plus grand carOctet (on utilisera les sous-programmes ci-dessus).

    2. Ecrire maintenant le sous-programme de nom minMaxCO qui détermine directement le plus petit et le plus grand carOctet d'un tableau de carOctets ; minMaxCO devra s'utiliser comme ci-dessous:
        CarOctet t[], ppCO, pgCO; int n;
        minMaxCO( n, t, &ppCO, &pgCO);
        printf("ppCO=%s, pgCO=%s\n", ppCO, pgCO);

    3. Ecrire un programme qui lit un entier n, puis alloue les zones mémoires nécessaires pour mémoriser un tableau de n carOctets. et enfin saisit n carOctets.


<== PLAN | P.précédente | P.suivante | Corrigé | en haut