Vincenzoflaminio
13-06-2011, 17:27
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 :
#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
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) .
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 :
#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
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) .