Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Convertitore Binario
Forum - C/C++ - Convertitore Binario

Avatar
VaboHack (Normal User)
Newbie


Messaggi: 3
Iscritto: 12/11/2013

Segnala al moderatore
Postato alle 15:11
Martedì, 12/11/2013
Salve! Da poco  ho iniziato a studiare c++, usando come S.O. mavericks, uso come IDE xCode...

Vorrei chiedervi aiuto su questo piccolissimo programmino che "dovrebbe" convertire un numero decimale (intero) in ingresso in binario; fin quando inserisco un numero minore a 64 il programma funziona correttamente, altrimenti no... avete idee :)?

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     int num, i=0, conv;
  8.     int array[i];
  9.    
  10.     do
  11.     {
  12.         printf("Numero: ");
  13.         scanf("%d", &num);
  14.     }while(num<0);
  15.    
  16.     if(num==0)
  17.     {
  18.         printf("\nConversione: 0\n");
  19.     }
  20.    
  21.     else
  22.     {
  23.         printf("\nConversione: ");
  24.        
  25.         while(num>=1)
  26.         {
  27.             array[i]=num%2;
  28.             num=num/2;
  29.             i++;
  30.         }
  31.    
  32.         for(conv=i-1; conv>=0; conv--)
  33.         {
  34.             printf("%d ", array[conv]);
  35.         }
  36.        
  37.         printf("\n\n");
  38.     }
  39.                
  40.     cin.get();
  41. }



Grazie :)


--------------------------
-vabo_hack@me.com-
--------------------------
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:50
Martedì, 12/11/2013
Devi preparare un array con il massimo numero di bit, magari 32

int array[32];

non con i elementi (che vale 0)


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
VaboHack (Normal User)
Newbie


Messaggi: 3
Iscritto: 12/11/2013

Segnala al moderatore
Postato alle 15:55
Martedì, 12/11/2013
Funziona! Grazie mille :asd:


--------------------------
-vabo_hack@me.com-
--------------------------
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 318
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 13:41
Mercoledì, 13/11/2013
do
    {
        printf("Numero: ");
        scanf("%d", &num);
    }while(num<0);


che mi rappresenta num < 0? Devi convertire tutti i numeri sotto lo zero?

Guarda io la faccio così:

public static int ConvertToBin(int numero) {
int risultato = 0;
int iterazioni = 0;
do {
    int resto = numero % 2;
    numero /= 2;
    risultato += resto * (int)Math.Pow(10, iterazioni);
    iterazioni++;
} while (numero > 0);
return risultato;
}


Il codice è in C# ma siamo lì. Così però non ti sbagli dato che non devi nemmeno usare un array. Anche io usavo la tua soluzione ma poi ho trovato questo altro metodo.

Ultima modifica effettuata da tuttodiMC il 13/11/2013 alle 13:42


Assembly is the way
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:19
Mercoledì, 13/11/2013
Testo quotato

Postato originariamente da tuttodiMC:

  do
    {
        printf("Numero: ");
        scanf("%d", &num);
    }while(num<0);


che mi rappresenta num < 0? Devi convertire tutti i numeri sotto lo zero?



Mi sembra che sia il controllo per fare in modo che il valore in input non sia minore di zero.
In quel caso, viene ripetuta la domanda ...

Testo quotato

Anche io usavo la tua soluzione ma poi ho trovato questo altro metodo.



Non è un altro metodo. Lui usa un array e tu no.

Con l'array, in teoria, puoi rielaborare il valore in seguito. Se non lo usi no.
Tutto dipende da cosa devi fare dopo con il valore convertito ma, in assoluto, un metodo non è migliore dell'altro.

Semmai un metodo diverso (e migliore) sarebbe quello di utilizzare lo shift e l'and binario al posto di divisione e modulo.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
VaboHack (Normal User)
Newbie


Messaggi: 3
Iscritto: 12/11/2013

Segnala al moderatore
Postato alle 14:50
Mercoledì, 13/11/2013
Testo quotato

Postato originariamente da tuttodiMC:

  do
    {
        printf("Numero: ");
        scanf("%d", &num);
    }while(num<0);



Esatto, richiedo il numero finché non mi viene dato un numero maggiore o uguale a 0 :)!

Ultima modifica effettuata da VaboHack il 13/11/2013 alle 14:50


--------------------------
-vabo_hack@me.com-
--------------------------
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 318
Iscritto: 29/10/2012

Segnala al moderatore
Postato alle 15:13
Mercoledì, 13/11/2013
Giustoooooooooooooo :rofl:  :pat: E comunque usare lo shift e l'and porta a complicare il problema e ad avere una soluzione non astratta. Io in c# non li uso quasi mai proprio per questo.

Ultima modifica effettuata da tuttodiMC il 13/11/2013 alle 19:53


Assembly is the way
PM Quote