Exercice langage C corrigé modularisation

Exercice langage C corrigé modularisation, tutoriel & guide de travaux pratiques en pdf.

Le code ci-dessous convertit un nombre décimal en binaire, l’affiche et fait la conversion inverse. Recopiez ce code dans un buffer d’Emacs, et essayez de le comprendre. Vous pouvez ensuite le compiler – il devrait fonctionner sans problème – et le tester.

#include 

using namespace std;

int main(int argc, char **argv) {
  const int max_bits = 10;
  int decimal, binaire, original, n, bits;
  long puissance2, puissance10;

  cout << "Entrez un nombre entier: ";
  cin >> decimal;

  // calcul du nombre de bits
  n = decimal;
  bits = 0;
  while (n > 0) {
    bits++;
    n /= 2;
  }

  cout << decimal << " a " << bits << " bits." << endl;
  if (bits > 10) {
    cout << "Nous ne pouvons pas convertir de nombres plus grands que " 
	 << max_bits << " bits." << endl;
    return 0;
  }

  // conversion en binaire
  n = decimal;
  binaire = 0;
  for (int i=bits-1; i>=0; i--) {
    puissance2 = 1;
    for (int j=0; j<i; j++)
      puissance2 *= 2;

    puissance10 = 1;
    for (int j=0; j<i; j++)
      puissance10 *= 10;

    if (n / puissance2 > 0) {
      n = n - puissance2;
      binaire += puissance10;
    }
  }

  cout << decimal << " vaut '" << binaire << "' en binaire." << endl;

  // calcul du nombre de bits
  n = binaire;
  bits = 0;
  while (n > 0) {
    bits++;
    n /= 10;
  }

  cout << decimal << " a " << bits << " bits." << endl;

  // conversion de binaire en decimal
  original = 0;
  n = binaire;
  for (int i=bits-1; i>=0; i--) {
    puissance2 = 1;
    for (int j=0; j<i; j++)
      puissance2 *= 2;

    puissance10 = 1;
    for (int j=0; j<i; j++)
      puissance10 *= 10;

    if (n / puissance10 > 0) {
      n = n - puissance10;
      original += puissance2;
    }
  }

  cout << "Nombre original: " << original << endl;

  return 0;
}

La correction exercice langage C (voir page 2 en bas)

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *