Friday, 11 May 2012

Binary Decimal Conversion in C


#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>


void bindec(char result[]); 
void decbin(int decimal,char binary[]); 


main()
{
int ch,n1,n2,i=0,j,k,l,C,r,x1,x2,x;
char bin1[30],bin2[30],result[30],binary[30];
char multi[30][30];
clrscr();
do
{
printf("1 Enter First Operand \n");
printf("2 Enter Second Operand \n");
printf("3 Perform Binary Addition \n");
printf("4 Perform Binary Subtraction \n");
printf("5 Perform Binary Multiplation \n");
printf("6 Result in Decimal \n");
printf("7 Exit \n\n");
do
{
printf("Enter your choice ");
scanf("%d",&ch);
}while(ch>7 || ch<1);
switch (ch)
{
case 1:
printf("\n Enter First Operand ");
scanf("%d",&n1);
x1=n1;
decbin(n1,binary);
for(i=0;binary[i]!='\0';++i)
bin1[i]=binary[i];
bin1[i]='\0';
break;
case 2:
printf("\n Enter Second Operand  ");
scanf("%d",&n2);
x2=n2;
decbin(n2,binary);
for(i=0;binary[i]!='\0';++i)
bin2[i]=binary[i];
bin2[i]='\0';
break;
case 3:
for(i=0;i<30;++i)   
result[i]='\0';
C=0;
if(strlen(bin1)<strlen(bin2))
r=strlen(bin2);
else
r=strlen(bin1);
for(i=0;i<r;++i)
{
result[i+1]='\0';
if(C==0)
{
if(bin1[i]-48+bin2[i]-48+C==1)
result[i]=bin1[i]-48+bin2[i]-48+48;
else
result[i]=0+48;
}
else
{
if(bin1[i]-48+bin2[i]-48+C==2)
result[i]=0+48;
else
result[i]=1+48;
}
if(bin1[i]-48+bin2[i]-48+C>1)
C=1;
else
C=0;
if(C==1)
result[i+1]=C+48;
}
printf("\n%s\n",strrev(result));
break;
case 4:
for(i=0;i<30;++i)      
result[i]='\0';
C=0;
if(strlen(bin1)<strlen(bin2))
r=strlen(bin2);
else
r=strlen(bin1);
for(i=0;i<r;++i)
{
result[i+1]='\0';
if(bin1[i]<bin2[i])
C=2,--bin1[i+1];
else
C=0;
if(C+bin1[i]-48-bin2[i]+48==1)
result[i]=1+48;
else
if(C+bin1[i]-48-bin2[i]+48==0)
result[i]=0+48;
}
printf("\n%s\n",strrev(result));
break;
case 5:
for(i=0;i<30;++i)      
result[i]='\0';
strrev(bin2); 
k=0,x=0;
for(i=0;i<strlen(bin2);++i)  
if(bin2[i]=='1')
{
for(j=i+1;bin2[j]!='\0';++j)
multi[k][x++]='0';
for(l=0;bin1[l]!='\0';++j,++l)
multi[k][x++]=bin1[l];
for(;x<30;++j)
multi[k][x++]='0';
++k,x=0;
}
l=0;
for(j=0;j<30;++j)  
{
x=0;
for(i=0;i<k;++i)
x+=(multi[i][j]-48);
multi[0][l++]=x;
}
for(i=0;i<30;++i)   
if(multi[0][i]>1)
multi[0][i+1]+=((multi[0][i]-(multi[0][i]%2))/2);
printf("\n");
for(i=29;i>=0;--i) 
if(multi[0][i]!=0)
break;
j=0;
for(;i>=0;--i)  
if(multi[0][i]<48)
{
multi[0][i]%=2;
result[j++]=multi[0][i]+48;
      
}
printf("\n");
printf("%s\n",result);
break;
case 6:
bindec(result);
printf("\n");
break;
}
n1=x1;
decbin(n1,binary);
for(i=0;binary[i]!='\0';++i)
bin1[i]=binary[i];
bin1[i]='\0';


n2=x2;
decbin(n2,binary);
for(i=0;binary[i]!='\0';++i)
bin2[i]=binary[i];
bin2[i]='\0';


}while(ch!=7);
printf("\n");
getch();
return 0;
}


void bindec(char result[]) 
{
short int i;
long int decimal=0;
strrev(result);
for(i=0;i<strlen(result);++i)
decimal+=(result[i]-48)*pow(2,i);
printf("Result in Decimal is %ld\n",decimal);
strrev(result);
}


void decbin(int decimal,char binary[]) 
{
int i=0;
while(decimal>0)
{
binary[i++]=decimal%2+48;
binary[i]='\0';
decimal-=(decimal%2);
decimal/=2;
}
}

No comments:

Post a Comment