Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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 :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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:

PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
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
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
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 ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
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
PM Quote
Avatar
tuttodiMC (Normal User)
Expert


Messaggi: 327
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
PM Quote