Programma conversione binario-decimale

di Anonimizzato14951 il
12 risposte
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

  • 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
  • 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?
  • 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.
  • ^ è un operazione tra bit

    Per la potenza devi usare una funzione (es. pow() )
  • 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 ?
  • 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
  • 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 <.
  • Hai ragione, è sufficiente sostituire la ^ con pow ed aggiungere la moltiplicazione per il bit
    Ciao
  • 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
  • In genere chi inizia con questi programmini non ha ancora acquisito il concetto di "operatore di shifting".
  • 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.
  • Ok grazie mille a tutti per l'aiuto, ora funziona!!!!
Devi accedere o registrarti per scrivere nel forum
12 risposte