Programma conversione binario-decimale

di il
12 risposte

Programma conversione binario-decimale

Salve a tutti, stavo svolgendo un esercizio sulla programmazione in c++ che mi chiede di scrivere un programma che faccia una conversione da binario a decimale di un qualsiasi numero; ho svolto il programma in vari modi ma non riesco a capire dov'è il mio errore. Potreste darmi una mano? Il programma da me scritto è il seguente: 

#include <iostream>
using namespace std;
int main (){

int N, bit, base;
int numero = 0;
int potenza = 0;
   

 cout << "inserisci il numero di bit " << endl;
    cin >> N;
    cout << "inserisci base " << endl;
    cin >> base;    
    while (potenza < N){
    cout << "inserisci numero binario partendo dalla cifra meno significativa " << endl;
    cin >> bit;
    numero = numero + base^potenza;
    potenza++;
    }
    cout << " il numero convertito e' : " << numero << endl;
    
system("pause");
}

12 Risposte

  • Re: Programma conversione binario-decimale

    Ciao,
    allora secondo me: innanzitutto non dovresti dare all'utente la possibilità di inserire la base. Se devi trasformare un numero binario in decimale la base sarà sempre 2 a meno che tu non voglia fare un programma general purpose ma rischieresti di uscire dalla traccia dell'esercizio.
    Il problema del calcolo è che tu fai inserire all'utente il bit ma poi non ne tieni conto; ovvero sia che egli inserisca 0 o 1 tu continui a calcolare il numero solo in base al numero di bit totali.
    Dovresti modificarlo facendo :

    numero = numero + ((base^potenza)*bit); <== Se il bit inserito è zero il risultato darà numero,
    altrimenti ti aggiungerà il nuovo valore.

    Prova e fammi sapere.
    Ciao
  • Re: Programma conversione binario-decimale

    Ciao, prima di tutto grazie mille per la risposta!
    Se modifico il programma come mi hai detto tu non viene lo stesso la conversione. Il numero che inserisco io come binario è 10011 che in decimale è 19, ma il programma mi dice invece che in decimale risulta 11.
    Se non dovessi inserire la base da tastiera, come fa il programma a capire che tipo di conversione voglio fare io?
  • Re: Programma conversione binario-decimale

    AliceInWonderland ha scritto:


    Se non dovessi inserire la base da tastiera, come fa il programma a capire che tipo di conversione voglio fare io?
    Dal testo dell'esercizio pare chiaro che la conversione è sempre da binario a decimale, quindi le basi sono note a priori: da base 2 a base 10.
  • Re: Programma conversione binario-decimale

    ^ è un operazione tra bit

    Per la potenza devi usare una funzione (es. pow() )
  • Re: Programma conversione binario-decimale

    Che vuol dire "come fa il programma a capire che tipo di conversione voglio fare io?" ??

    1) Sei tu che imposti la base nel programma.

    2) L'elevamento a potenza non si fa con il ^ (non stai usando il BASIC) ma la funzione pow()

    3) L'algoritmo che hai usato non è corretto; per esempio, cosa ne fai nel ciclo del valore della variabile bit ?
  • Re: Programma conversione binario-decimale

    Come dice oregon, metti una costante che indichi la base = 2 ed inoltre non calcoli l'ultimo bit perchè fai :
    while (potenza < N){
    prova con

    while (potenza <= N){

    e vedrai che funziona.
    Ciao
  • Re: Programma conversione binario-decimale

    steve1 ha scritto:


    non calcoli l'ultimo bit perchè fai :
    while (potenza < N){
    prova con

    while (potenza <= N){

    e vedrai che funziona.
    Secondo me non è vero. Infatti in un numero a N cifre ci sono potenze da 2^0 fino a 2^(N-1), quindi secondo me è giusto il <.
  • Re: Programma conversione binario-decimale

    Hai ragione, è sufficiente sostituire la ^ con pow ed aggiungere la moltiplicazione per il bit
    Ciao
  • Re: Programma conversione binario-decimale

    Puoi evitare di utilizzare la funzione pow() e pure evitare che il numero binario venga inserito in maniera invertita semplicemente seguendo questa procedura:
    a) numero = 0
    b) "Inserisci cifra, -1 per uscire"
    c) input
    d) bit = input
    e) se bit == -1 stampi numero ed esci
    f) numero = numero * 2 + bit
    g) vai a b)

    Aggiunta: se riscrivi il punto f) così
    numero = (numero << 1) + bit
    capirai un sacco di cose
  • Re: Programma conversione binario-decimale

    In genere chi inizia con questi programmini non ha ancora acquisito il concetto di "operatore di shifting".
  • Re: Programma conversione binario-decimale

    In genere chi inizia con questi programmini non ha ancora acquisito il concetto di "operatore di shifting".
    Infatti si tratta di una considerazione che ho aggiunto dopo; non ho modificato l'algoritmo che avevo inizialmente postato perchè credo che sia di facile comprensione e generalizzabile anche per potenze diverse da 2.
  • Re: Programma conversione binario-decimale

    Ok grazie mille a tutti per l'aiuto, ora funziona!!!!
Devi accedere o registrarti per scrivere nel forum
12 risposte