/* WRITE A C PROGRAM TO CONVERT THE FOLLOWING :
a. DECIMAL TO BINARY NUMBER
b. BINARY TO DECIMAL NUMBER
c. REAL DECIMAL NUMBER TO HEXADECIMAL NUMBER
d. REAL DECIMAL TO OCTAL NUMBER
*/
#include<stdio.h>
#include<conio.h>
#include<ctype.h> /* isdigit */
#include<stdlib.h> /* atoi */
#include<math.h>
#define MAX 25
void dectobin()
{
int bin,dec,n,r,k;
printf("Enter a Decimal number \t");
scanf("%d",&dec);
n=dec; bin=0;k=1;
while(n>0)
{
r=n%2;
n=n/2;
bin=bin+r*k;
k=k*10;
}
printf("\n Decimal = %d \n Binary = %d",dec,bin);
}
void bintodec()
{
int bin,dec,n,r,k;
printf("Enter a Binary number \t");
scanf("%d",&bin);
n=bin; dec=0;k=1;
while(n>0)
{
r=n%10;
if(r>1)
{
printf("\t ERROR!! Not a Binary number");
return;
}
n=n/10;
dec=dec+r*k;
k=k*2;
}
printf("\n Binary = %d \n Decimal = %d",bin,dec);
}
void rdectohex()
{
char str[MAX],str1[MAX],str2[MAX],a;
int i,j,n,r,len,temp,sign=1;
printf("Enter a Real Decimal Number\t");
scanf("%s",str);
for(j=0,i=0 ; str[i]!='.' && str[i]!='\0' ; i++)
{
if(str[i]=='-')
sign=-1;
else if(str[i]=='+')
sign=1;
else if(str[i]>='0' && str[i]<='9')
str1[j++]=str[i];
else
{
printf("ERROR!! Not a Real Decimal Number");
return;
}
}
str1[j]='\0';
i++;
for(j=0 ; str[i]!='\0' ; i++)
{
if(str[i]>='0' && str[i]<='9')
str2[j++]=str[i];
else
{
printf("ERROR!! Not a Real Decimal Number");
return;
}
}
str2[j]='\0';
/* before decimal */
i=0;
n=atoi(str1);
while(n>0)
{
r=n%16;
if(r>9)
{
switch(r)
{
case 10:a='A';break;
case 11:a='B';break;
case 12:a='C';break;
case 13:a='D';break;
case 14:a='E';break;
case 15:a='F';break;
}
}
else
a=(char)r+'0';
n=n/16;
str1[i++]=a;
}
str1[i]='\0';
/* after decimal */
i=0;
j=0;
n=atoi(str2);
len=strlen(str2);
while(j<5)
{
temp=pow(10,len);
r=(n*16) / temp; /* r=quotient */
n=(n*16) % temp;
if(r>9)
{
switch(r)
{
case 10:a='A';break;
case 11:a='B';break;
case 12:a='C';break;
case 13:a='D';break;
case 14:a='E';break;
case 15:a='F';break;
}
}
else
a=(char)r+'0';
str2[i++]=a;
j++;
}
str2[i]='\0';
/* To Display */
strrev(str1);
if(sign==-1)
printf("\nHexadecimal : -%s.%s",str1,str2);
else
printf("\nHexadecimal : %s.%s",str1,str2);
}
void rdectooct()
{
char str[MAX],str1[MAX],str2[MAX];
int i,j,n,r,k,temp,len,sign=1,oct1,oct2;
printf("Enter a Real Decimal Number\t");
scanf("%s",str);
for(j=0,i=0 ; str[i]!='.' && str[i]!='\0' ; i++)
{
if(str[i]=='-')
sign=-1;
else if(str[i]=='+')
sign=1;
else if(str[i]>='0' && str[i]<='9')
str1[j++]=str[i];
else
{
printf("ERROR!! Not a Real Decimal Number");
return;
}
}
str1[j]='\0';
i++;
for(j=0 ; str[i]!='\0' ; i++)
{
if(str[i]>='0' && str[i]<='9')
str2[j++]=str[i];
else
{
printf("ERROR!! Not a Real Decimal Number");
return;
}
}
str2[j]='\0';
/* before decimal */
i=0;
n=atoi(str1);
oct1=0;k=1;
while(n>0)
{
r=n%8;
if(r>7)
{
printf("\t ERROR!! Not a Octal number");
return;
}
n=n/8;
oct1=oct1+r*k;
k=k*10;
}
/* After decimal */
oct2=0;
j=0;
n=atoi(str2);
len=strlen(str2);
temp=pow(10,len);
while(j<4)
{
r=(n*8)/temp; /* r is Quotient and generated
carry is indicated by it*/
n=(n*8)%temp;
oct2=(oct2*10)+r;
j++;
}
/* To Display */
if(sign==-1)
printf("\nOctal : -%d.%d",oct1,oct2);
else
printf("\nOctal : %d.%d",oct1,oct2);
}
void main()
{
int flag=1,choice=0;
while(flag!=0)
{
clrscr();
printf("1. Decimal to Binary\n");
printf("2. Binary to Decimal\n");
printf("3. Real Decimal to Hexadecimal\n");
printf("4. Real Decimal to Octal\n");
printf("5. Exit\n");
printf("Enter choice -->\t");
scanf("%d",&choice);
switch(choice)
{
case 1: dectobin();flag=1;getch();break;
case 2: bintodec();flag=1;getch();break;
case 3: rdectohex();flag=1;getch();break;
case 4: rdectooct();flag=1;getch();break;
default: flag=0;break;
}
choice=0;
}
}
/*
=====OUT PUT=====
1. Decimal to Binary
2. Binary to Decimal
3. Real Decimal to Hexadecimal
4. Real Decimal to Octal
5. Exit
Enter choice --> 1
Enter a Decimal number 10
Decimal = 10
Binary = 1010
1. Decimal to Binary
2. Binary to Decimal
3. Real Decimal to Hexadecimal
4. Real Decimal to Octal
5. Exit
Enter choice --> 2
Enter a Binary number 1010
Binary = 1010
Decimal = 10
1. Decimal to Binary
2. Binary to Decimal
3. Real Decimal to Hexadecimal
4. Real Decimal to Octal
5. Exit
Enter choice --> 3
Enter a Real Decimal Number 12.87
Hexadecimal : C.DEB85
1. Decimal to Binary
2. Binary to Decimal
3. Real Decimal to Hexadecimal
4. Real Decimal to Octal
5. Exit
Enter choice --> 4
Enter a Real Decimal Number 25.895
Octal : 31.7121
*/
No comments:
Post a Comment