Exercice langage C corrigé modularisation

#include 

using namespace std;

// calcule a^b
int puissance(int a, int b) {
  int resultat = 1;
  for (int i=0; i<b; i++)
    resultat *= a;

  return resultat;
}

// calcule le log entier de n en base 'base'
int log_entier(int n, int base) {
  int resultat = 0;
  while (n > 0) {
    resultat++;
    n /= base;
  }

  return resultat;
}

// converti 'original', de taille 'bits' bits de la
// base de depart a la base d'arrivee
int conversion(int original, int bits, 
               int base_depart, int base_arrivee) {
  int converti = 0;
  int puissance_depart;
  int puissance_arrivee;
  for (int i=bits-1; i>=0; i--) {
    puissance_depart = puissance(base_depart, i);
    puissance_arrivee = puissance(base_arrivee, i);

    if (original / puissance_arrivee > 0) {
      original -= puissance_arrivee;
      converti += puissance_depart;
    }
  }

  return converti;
}

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

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

  // calcul du nombre de bits de 'decimal'
  bits = log_entier(decimal, 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
  binaire = conversion(decimal, bits, 10, 2);

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

  // calcul du nombre de bits
  bits = log_entier(binaire, 10);

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

  // conversion de binaire en decimal
  original = conversion(binaire, bits, 2, 10);

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

  return 0;
}

Télécharger aussi :

Laisser un commentaire

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