Conversione da binario a decimale in c++

L’esercizio della conversione da binario a decimale è affrontato in diverse materie e annualità degli istituti tecnici, spesso come introduzione e potenziamento dell’uso di excel in TIC o trattazione dell’informazione in TPSIT. Vediamo come affrontarlo con il C++ e le funzioni.

Vogliamo inserire da tastiera un numero binario di 8 cifre. Ovvero l’utente da tastiera deve inserire 8 simboli che siano 0 o 1. Li carichiamo quindi in un vettore. Stampiamo il vettore appena inserito e procediamo col convertire in base 10 il numero binario.

Il procedimento della conversione non dovrebbe essere difficile. Vediamo un esempio

binario11001110
posizione76543210
potenza27*126*125*024*023*122*121*120*0
12864008420

Non resta che fare la somma e trovare il numero convertito in decimale ovvero: 128 + 64 + 4+ 2 = 198

Nella logica del nostro software vogliamo dividere le varie responsabilità: una funzione per la lettura del vettore, una per la stampa, una per il calcolo della potenza passati come parametro base ed esponente, una funzione per il calcolo della conversione vera e propria. Le funzioni di lettura e stampa sono void, potenza e conversione tornano invece il valore numerico della loro elaborazione.

/*
* Inserire un numero di binario di 8 cifre 
* sotto forma di vettore. Stampalo per verifica.
* Fai la conversione di tale numero in decimale
*/

#include <iostream>
using namespace std;

int const DIM = 8;

int potenza(int _base, int _esponente)
{
  int potenza = 1;
  
  for (int i=0; i < _esponente; i++)
  {
    potenza = potenza * _base;  
  }  

  return potenza;
}

int converti(int vettore[])
{
  int somma = 0;
  for (int i=0; i < DIM; i++)
  {
    somma += potenza(2, i)* vettore[i];
  }  

  return somma;
}

void leggi(int vettore[])
{
  cout<< endl;
  cout<< "-------------------------"<< endl;
  cout<< "        LETTURA          "<< endl;
  cout<< "-------------------------"<< endl;
  for (int i=0; i < DIM; i++)
  {
    do
    {
    cout << "Inserisci bit in posizione " << i << " ";
    cin >> vettore[i];      
    }  
    while(vettore[i] != 0 && vettore[i] != 1);
  }

  return;
}

void stampa(int vettore[])
{
  cout<< endl;
  cout<< "-------------------------"<< endl;
  cout<< "         STAMPA          "<< endl;
  cout<< "-------------------------"<< endl;
  for (int i=0; i < DIM; i++)
  {
    cout << vettore[i] << " ";
  }  
  
  return;
}

int main() 
{
  int vettore[DIM];
  int decimale = 0;
  
  leggi(vettore);
  stampa(vettore);
  decimale = converti(vettore);

  cout << endl;
  cout << "Il numero convertito in decimale e' " << decimale << endl;
  return 0;
}

Listato del codice su GitHub -> https://github.com/alfredocentinaro/esercizi-cplusplus

Ultima modifica 26 Ottobre 2022