View Single Post
Old 13-06-2011, 18:27   #1
Vincenzoflaminio
Member
 
Iscritto dal: Jul 2006
Messaggi: 96
[C] conversione di base

Salve, devo implementare il seguente algoritmo:
Scrivere una function C di conversione di un intero positivo da base 10 a base 2 mediante l'algoritmo delle divisioni successive
- Usando gli operatori di quoziente e resto
- Usando gli operatori bitwise
e una Function C di conversione di un intero positivo da base 2 a base 10 mediante l'algoritmo delle divisioni successive , che generi un array di carattery contenenti le cifre decimali.

Ecco quanto ho scritto :
Codice:
#include "function5.h"
void main ()
{
int base=2,num,resti[size],i,sum;
printf("Inserire il numero che si vuole convertire da base 10 a base 2:");
scanf("%d",&num);
for(i=0;i<size;i++)
	{
	resti[i]=0;			/*azzero l'array*/
	}
array_resti(num,base,resti);
printf("\nIl numero in binario e':\n");
visualizza_a(resti);
potenze(resti,size); /*function per calcolare le potenze del numero binario */
sum=somma_a(resti,size);
for(i=0;i<size;i++)
	{
	resti[i]=0;			/*azzero l'array*/
	}
array_resti(sum,10,resti);	/*utilizzo la function delle divisioni successive per ottenere l'array contenente le cifre decimali*/
puts("\nIl numero ritrasformato in decimale e':");
visualizza_a(resti);
printf("\n");
system("PAUSE");

FILE function5.h
Codice:
void array_resti(int num,int base,int resti[])
{
int Quoz1,i; /* Quoz1 = nuovo quoziente */
i=0;
while(num>0)			/*fin quando il numero (quoziente) non è =0 */
	{
	Quoz1=num/base;		
	resti[i]= num - (Q1*base);
	num=Q1;			/*Aggiorno num(quoziente vecchio) con il nuovo quoziente */
	i++;
	}
}
void visualizza_a(int resti[])
{
int j;
for(j=size-1;j>=0;j--)
	printf("%d",resti[j]);		/*visualizzo i resti in ordine decrescente che equivale a vedere il numero trasformato in binario*/	
}
//calcolo le potenze del numero binario (per ritrasformarlo in base 10)
void potenze(int binario[], int n)
{
int i;
i=0;
while(i<n)
	{
	binario[i]=binario[i]  * (int)pow(2,i);		
	i++;
	}
}
//sommo le potenze ricavate dal numero binario
int somma_a(int binario[],int n)
{
int i,somma;
somma=0;
for(i=0;i<n;i++)
	somma= somma + binario[i];	
return somma;
}
Ora non saprei come fare lo stesso utilizzando gli operatori bitwise,
inoltre volevo sapere se in qualche modo potevo evitare di visualizzare in output gli 0 inutili (il size è 32) .
Vincenzoflaminio è offline   Rispondi citando il messaggio o parte di esso