Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35

    [C/C++] Convertire numero in binario

    Buongiorno a tutti,

    sono alle prime armi con il ling. di programmazione e devo risolvere un esercizio:
    convertire un numero in binario


    //Direttiva al preprocessore

    #include <iostream>
    using namespace std;

    #include <math.h>
    //N=100
    #define N 100

    //Definisco il tipo intero array: vettore[N]
    typedef int vettore[N];

    int main () {
    //Dichiaro le variabili
    int numero,uscita;
    int i=0;
    int j=0;
    int n;
    vettore resto;
    vettore definitivo;

    cout<<"Inserire il numero che vuoi trasformare in binario: ";
    cin>>numero;

    cout<<endl;

    uscita=numero;

    do{
    resto[i++]=uscita%2;
    uscita=uscita/2;
    }
    while ( uscita>=1 );

    /*********
    SCRITTURA MANUALE
    cout<<"il valore in binario e': " <<resto[0]<<resto[1]<<resto[2]<<resto[3]<<endl;
    ********/

    //Scrittura con il ciclo for
    n=i;
    for (i=0;i<n;i++)
    cout << resto[i];
    cout<<endl;

    /*************************
    Da questo punto in poi, ho tentato più volte di riuscire ad ordinare l'array, senza alcun risultato positivo.
    So che devo far corrispondere al resto[i] (nel caso in cui i=max) l'array definitivo[j] (con j=0),
    però non riesco a scriverlo in un codice accettabile.



    ********************************/


    //Numero in binario invertendo la divisione in successione
    for (j=0; j<n; j++){
    definitivo[j++];
    for (i=n;i>0;i--)
    definitivo[j]=resto[i];
    cout << definitivo[j];
    }


    cout<<endl;













    system ("PAUSE");
    return 0;




    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    La prossima volta che posti il codice usa i tag "code", vedi il punto 6 del regolamento interno.

    Comunque rivediti il ciclo di inversione...

    codice:
    for (j = 0; j < n; j++) {
        definitivo[j] = resto[n-j-1];
        cout << definitivo[j];
    }
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35
    Grazie, mi puoi spiegare perchè si mette quell'apice?

    codice:
    definitivo[n-j-1]

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da AngeloV
    mi puoi spiegare perchè si mette quell'apice?
    Quale apice?
    every day above ground is a good one

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35
    scusa, l'indice tra le parentesi quadre, perchè è proprio [n-j-1]?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Se ti fai i conti noterai che in quel modo in "definitivo" hai proprio il numero binario invertito alla fine del ciclo.

    Se n (che è la lunghezza del numero binario) è ad esempio 5, alla prima iterazione (j=0) hai

    definitivo[0] = resto[5-0-1] -> definitivo[0] = resto[4]

    dove definitivo[0] è il primo elemento di "definitivo" e resto[4] è l'ultimo elemento di "resto".

    All'iterazione successiva (j=1) hai

    definitivo[1] = resto[5-1-1] -> definitivo[1] = resto[3]

    quindi al secondo elemento di "definitivo" assegni il penultimo di "resto" e così via... alla fine all'ultimo elemento di "definitivo" assegnerai il primo di "resto" e il ciclo termina.
    every day above ground is a good one

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35
    Sei gentilissimo, ti ringrazio!

    Ho capito l'errore che facevo.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35

    da binario a decimale

    Posto uno simile che sto tentando di fare. Penso sempre che al ciclo for sbaglio qualcosa.

    codice:
    //direttiva al preprocessore
    #include <iostream>
    using namespace std;
    //sostituzione N con 100
    #define N 100
    //definisco il tipo array
    typedef int vettore[N];
    #include <math.h>
    
    //funz. principale
    
    int main(){
        //dichiarazioni variabili
        vettore numbin;
        int nummax;
        
        
        //dato un numero in input
        cout<<"Inserisci il numero massimo di cifre che dovrai inserire:  ";
        cin>>nummax;
        cout<<"Inserisci il numero in binario:  ";
        cin>>numbin[nummax];
        
        cout<<"il numero e':  " <<numbin[nummax] <<endl;
        
        //in numbin[nummax] c'è il valore massimo dell'indice scelto dall'utente
        
        int somma=0;
        int i=nummax;
        for(i=nummax;i>0;i--)
        somma += (numbin[i]*(2^(nummax-i)));
        cout<<"il numero e':  " <<somma <<endl;
        
        
        
        
        
        
        
        system ("PAUSE");
        return 0;
        
        
        
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: da binario a decimale

    Se il tuo scopo con queste righe

    codice:
        cout<<"Inserisci il numero in binario:  ";
        cin>>numbin[nummax];
    è quello di leggere un numero binario e di salvare ogni cifra in un elemento dell'array diverso, stai sbagliando. Per assegnare ogni cifra binaria ad un elemento diverso devi leggerle una per una in un ciclo iterativo e procedere con l'assegnazione; in quel modo stai soltanto salvando il numero binario (tra l'altro letto come un normalissimo numero decimale) nella componente di indice "nummax" dell'array numbin.
    every day above ground is a good one

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    35
    Io ti ringrazio sempre per l'aiuto. Ho modficato infatti ed ora mi trovo in questo punto

    codice:
    //direttiva al preprocessore
    #include <iostream>
    using namespace std;
    //sostituzione N con 100
    #define N 100
    //definisco il tipo array
    typedef int vettore[N];
    #include <math.h>
    
    //funz. principale
    
    int main(){
        //dichiarazioni variabili
        vettore numbin, definitivo;
        int nummax;
        int i=0;
        
        //dato un numero in input
        cout<<"Inserisci il numero massimo di cifre che dovrai inserire:  ";
        cin>>nummax;
        cout<<"Inserisci ogni cifra del numero in binario e premi invio:\n";
            do
              for (i=0;i<nummax;i++)
              cin>>numbin[i];
              while((numbin[i]>1)&&(numbin[i]<0));
        cout<<endl;
        cout<<"Il numero in binario che hai scritto e':  ";
        for (i=0;i<nummax;i++)
            cout<<numbin[i];
        cout<<endl;
    
    int j=0;
    
        cout<<"Il numero ordinato e':  ";
        for (j=0;j<nummax;j++){
            definitivo[j]=numbin[nummax-j-1];
            cout << definitivo[j];
    }
    
        cout<<endl;
        
    //uscita del numero in decimale
    
    int somma=0;
    
        for (j=0;j<nummax;j++)
            somma += ((definitivo[j])*(2^(j)));
            
        cout<<"Il numero in decimale e':  " <<somma <<endl;
        
        
        
        
        
        system ("PAUSE");
        return 0;
        
        
        
    }
    Come vedi mi trovo sempre male con il definitivo... Poi prima ancora quando ho impostato il Do...while, non riesco a dirgli che se il numero non è (0,1) deve far riscrivere.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.