Oppure

Loading
12/11/13 14:11
VaboHack
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 :)?

#include <iostream>

using namespace std;

int main()
{
    int num, i=0, conv;
    int array[i];
    
    do
    {
        printf("Numero: ");
        scanf("%d", &num);
    }while(num<0);
    
    if(num==0)
    {
        printf("\nConversione: 0\n");
    }
    
    else
    {
        printf("\nConversione: ");
        
        while(num>=1)
        {
            array[i]=num%2;
            num=num/2;
            i++;
        }
    
        for(conv=i-1; conv>=0; conv--)
        {
            printf("%d ", array[conv]);
        }
        
        printf("\n\n");
    }
               
    cin.get();
}


Grazie :)
aaa
12/11/13 14:50
nessuno
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à.
12/11/13 14:55
VaboHack
Funziona! Grazie mille :asd:
aaa
13/11/13 12:41
tuttodiMC
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 13/11/13 12:42
aaa
13/11/13 13:19
nessuno
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 ...

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à.
13/11/13 13:50
VaboHack
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 13/11/13 13:50
aaa
13/11/13 14:13
tuttodiMC
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 13/11/13 18:53
aaa