Programma per conversione da decimale a binario

di il
3 risposte

Programma per conversione da decimale a binario

Buongiorno, ho creato questo programma per convertire un numero decimale in binario (accetta solo numeri interi positivi). Il problema sta nel fatto che non mi fa comparire tutte le cifre del numero binario corrispondente ma solo la prima, cioè quella derivante dall'ultima operazione (perchè il numero si legge dal basso verso l'alto). Vi posto il listato:

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n; //dati di input //contiene il numero che si inserisce
int d; //variabili di lavoro // contiene il valore di n, su cui andremo poi a lavorare successivamente
int r; //dati di output //contiene il numero binario corrispondente

printf("Programma per convertire un numero da decimale a binario.\n");

printf("Inserisci un numero senza virgola e positivo: ");
scanf("%d",&n);

d=n;

if((d<0) || (d=1)){
if(d<0)
printf("Impossibile calcolare il numero binario.");
else
r=1;
printf("Il numero binario e\': %d",r);}
else
do{
if(d%2==0){
d=d/2;
r=0;
printf("Il numero binario e\': %d",r);}
else{
d=(d-1)/2;
r=1;
printf("Il numero binario e\': %d",r);}
}
while(d!=0);

return 0;
}

Cosa ho sbagliato? Grazie mille!

3 Risposte

  • Re: Programma per conversione da decimale a binario

    Ciao,

    Allora tanto per cominciare ti consiglio vivamente di utilizzare il tag code quando inserisci un codice e soprattutto di indentare il suddetto codice, ho fatto più fatica a leggere il codice che a far altro...

    in secondo luogo il primo errore grave che ho riscontrato è l'assegnamento di variabile nel primo if:
    
    [...]
    if((d<0) || (d=1)){
    [...]
    
    è errato, bisogna inserire == per comparare e non = quindi corretto è:
    
    [...]
    if((d<0) || (d==1)){
    [...]
    

    ora ti posto il tuo codice corretto, sappi che esistono modi più eleganti e molto più funzionali per convertire un numero in binario.. ma a parte questo uno dei tuoi errori è complicarti la vita, un metodo corretto per scrivere il tuo codice in modo leggibile e chiaro saprebbe questo:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
      int n; //dati di input //contiene il numero che si inserisce
      int d; //variabili di lavoro // contiene il valore di n, su cui andremo poi a lavorare successivamente
      int r; //dati di output //contiene il numero binario corrispondente
    
      printf("Programma per convertire un numero da decimale a binario.\n");
    
      printf("Inserisci un numero senza virgola e positivo: ");
      scanf("%d",&n);
    
      d=n;
    
      if((d<0) || (d==1)){
        if(d<0)
        printf("Impossibile calcolare il numero binario.");
        else{
          r=1;
          printf("Il numero binario e\': %d",r);
        }
      }
      else
        do{
          r = d % 2;
          printf("%i ",r);
          if (r == 0)
            d /= 2;
          else
            d = (d-1)/2;
        }
        while(d>0);
        printf("\n");
    
      return 0;
    }
    
    inoltre non capisco perché utilizzi la variabile n, consiglio di ricevere subito il dato nella variabile d ed evitare di allocare memoria inutile.
    per fare bene questo esercizio inoltre dovresti salvare r in un array e poi stamparlo rovescio perché altrimenti il numero esce completamente rovesciato..
  • Re: Programma per conversione da decimale a binario

    Grazie per la risposta e scusa se ho risposto in ritardo, ho avuto da fare. Comunque, non ho usato gli array perchè ancora a scuola non li abbiamo fatti.
  • Re: Programma per conversione da decimale a binario

    Nosba ha scritto:


    per fare bene questo esercizio inoltre dovresti salvare r in un array e poi stamparlo rovescio perché altrimenti il numero esce completamente rovesciato..
    non serve utilizzare un array, puoi anche giocare con potenze di 10 che si incrementano man mano per ottenere il numero binario "girato" nel modo corretto.
Devi accedere o registrarti per scrivere nel forum
3 risposte