Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107

    [C] Da decimale a binario

    salve, ho scritto questo programma, ma in output non ottengo il risultato corretto, ad esempio inserendo come numero 8 ottengo 100 quando dovrebbe essere 1000, cioè è come se il programma "saltasse" un iterazione qualcuno saprebbe dirmi come mai?
    sono convinto si tratti di una sciocchezza, ma purtroppo non risco a trovarla

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define  size (sizeof(int)*8)
    
    int* dec_bin(int);
    
    int main()
    {
       int n,*p,i;
       printf("inserire numero decimale da convertire: ");
       scanf("%d",&n);
       p=dec_bin(n);
       printf("risultato: ");
       for(i=0;i<size;i++)
       printf("%d",p[i]);
       return 0;
    }
    
    int* dec_bin(n)
    {
       int i,*p;
       n=n+1;
       i=size;
       p=(int*)calloc(size,sizeof(int));
    
        if(p != NULL)
         {
          while(i>0 && n!=0)
           {
              if(n%2!=0)
               p[i]=1;
               n=n/2;
               i--;
               printf("%d ",n);
           }
         }
         return p;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non mi è chiaro il metodo che usi nella funzione dec_bin per convertire il valore.

    Non capisco perché lo aumenti di 1 con

    n=n+1;

    E se ci fai caso, i parte da 32 mentre saprai che gli elementi del vettore vanno da 0 a 31 ...

    Se fai un po' di debugging (o usi delle printf per controllare le variabili) ti accorgi che c'è qualcosa che non va ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    n=n+1 era una prova, l'ho già tolto, comunque è vero, non avevo consideranto che dandogli il size non avrebbe corrisposto con gli elementi dell'array, errore di distrazione, che vuoi farci la stanchezza

    risolto, il programma funzionante è...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define  size (sizeof(int)*8)
    
    int* dec_bin(int);
    
    int main()
    {
       int n,*p,i;
       printf("inserire numero decimale da convertire: ");
       scanf("%d",&n);
       p=dec_bin(n);
       printf("risultato: ");
       for(i=0;i<size;i++)
       printf("%d",p[i]);
       return 0;
    }
    
    int* dec_bin(n)
    {
       int i,*p;
       i=size-1;
       p=(int*)calloc(size,sizeof(int));
    
        if(p != NULL)
         {
          while(i>0 && n!=0)
           {
              if(n%2!=0)
               p[i]=1;
               n=n/2;
               i--;
           }
         }
         return p;
    }
    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    piuttosto sarebbe possibile strutturare questa funzione con gli operatori bitwise?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da darksergio
    piuttosto sarebbe possibile strutturare questa funzione con gli operatori bitwise?
    Cioè ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    niente, visto che ho creato questa funzione per implementarla negli esercizi in cui mi verrà chiesto di estrarre i bit per farci determinate operazioni, mi chiedevo se fosse possibile riscrivere la funzione utilizzando gli operatori bitwise per svolgere l'estrapolazione invece del metodo delle divisioni ripetute, così giusto per mettere il codice più in linea con l'argomento

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ok ... al posto delle divisioni, esegui una AND del valore da convertire con un altro valore (maschera) che ha il bit da testare a 1 e tutti gli altri a 0.

    Per cominciare, utilizzerai il valore 1 come maschera, poi diventerà 2, poi 4 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    dovrebbe essere qualcosa del genere, ovviamente invece degli uno, nelle posizione apposite ci sono i resti, ma sono dettagli xD
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define  size (sizeof(int)*8)
    
    int* dec_bin(int);
    
    int main()
    {
       int n,*p,i;
       printf("inserire numero decimale da convertire: ");
       scanf("%d",&n);
       p=dec_bin(n);
       printf("risultato: ");
       for(i=0;i<size;i++)
       printf("%d",p[i]);
       return 0;
    }
    
    int* dec_bin(n)
    {
       int i,*p,m=1;
       i=size-1;
       p=(int*)calloc(size,sizeof(int));
    
        if(p != NULL)
         {
          while(i>0 && m<=0)
           {
               p[i]=n&m;
               m=m<<1;
               i--;
           }
         }
         return p;
    }
    dove sto sbagliando?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' un po' criptico, ma potrebbe essere

    p[i]=!!(n&m);


    p.s. ricordati che deve essere int* dec_bin(int n)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    io ho pensato a

    p[i](n&m)/m;

    che ne pensi?

    forse è meno drastico...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.