PDA

View Full Version : [C]conversione di un intero da base 10 a base 2


devil_prince
24-05-2011, 11:41
Salve ragazzi, devo fare questo esercizio per l'esame:
Scrivere due function C di conversione di un intero positivo (int) da base 10 a base 2 mediante l'algoritmo delle divisioni successive realizzato rispettivamente:
1. usando gli operatori quoziente e resto della divisione intera;
2. usando gli operatori bitwise

Ed ecco quello che ho provato a fare (ho provato prima con gli operatori quoziente e resto della divisione intera):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define BIT 16
void divisioni_successive (unsigned int, unsigned char[]);
void main ()
{
unsigned int x;
unsigned char bit[BIT];
int k;
for (k=0;k<BIT;k++)
bit[k]=0;
k=0;
printf("Inserire il numero intero da convertire in binario: ");
scanf("%d",&x);
divisioni_successive (x, bit[BIT]);
puts("Ecco il risultato:\n");
printf("dec=%d in binario=");
for(k=0;k<BIT;k++)
(k%4 == 0) ? printf(" %1u",bit[k]): printf("%1u",bit[k]);
fflush(stdin); getchar();}

void divisioni_successive (unsigned int n, unsigned char bit[BIT])
{ int k=0,j;
do
{ bit[k++]=n%2;
n=n/2;
}while (n>0);
for (j=k;j<16;j++)
bit[j]=0;
}

però il compilatore mi dà errore alla riga della funzione bit[k++]=n%2, dicendo violazione di accesso alla scrittura del percorso.
Consigli? grazie in anticipo

sottovento
24-05-2011, 12:49
divisioni_successive (x, bit[BIT]);



Non capisco come sia riuscito a compilarlo. Qui stai passando un solo carattere alla funzione divisioni_successive() mentre si aspetta un array...

devil_prince
26-05-2011, 14:43
Non capisco come sia riuscito a compilarlo. Qui stai passando un solo carattere alla funzione divisioni_successive() mentre si aspetta un array...
infatti gli passo x e l'array bit[BIT] che ho precedentemente dichiarato, credi sia quello l'errore??

cirano994
26-05-2011, 19:29
infatti gli passo x e l'array bit[BIT] che ho precedentemente dichiarato, credi sia quello l'errore??

Non sono bravissimo con la programmazione C (terza superiore), ma che io sappia un Array si passa semplicemente suo nome, quindi:

divisioni_successive (x, bit);

nel modo in cui lo hai scritto tu invece, gli passi solamente il valore contenuto in bit[BIT], non tutto l'Array

poi magari mi sbaglio. :)

Ciao ;)