Tuesday, May 21, 2013

Implementation of Binary Division algorithm in c++

Implementation of Binary Division algorithm in C++:

Source code: 

#include<iostream.h>
#include<conio.h>

void add(int &e,int a[],int x[],int n)
{
                int i;
                for(i=0;i<n;i++)
                {              a[i]=a[i]+x[i]+e;
                                if(a[i]>1)
                                {              a[i]=a[i]%2;
                                                e=1;
                                }
                                else
                                                e=0;
                }
}

void complement(int a[],int n)
{              int i,c=0;

                int x[5]={NULL};
                x[0]=1;
                for(i=0;i<n;i++)
                a[i]=(a[i]+1)%2;
               
                add(c,a,x,n);
                cout<<"complement=";
                for(i=n-1;i>=0;i--)
                cout<<a[i];
}

void shl(int &e,int da[],int dq[],int bn)
{              int temp,i;
                temp=dq[bn-1];
                e=da[bn-1];
                for(i=bn-1;i>=0;i--)
                {              da[i]=da[i-1];
                                dq[i]=dq[i-1];
                }
                dq[0]=0;
                da[0]=temp;
}

void display(int da[],int dq[],int bn)
{
                int i;
               
                for(i=bn-1;i>=0;i--)
                cout<<da[i];

                cout<<" ";
                for(i=bn-1;i>=0;i--)
                cout<<dq[i];
}





void main()
{
                int b[5]={NULL},da[5]={NULL},dq[5]={
                NULL},bc[5]={NULL};
                int bn,dn,i,sc,e=0;
                clrscr();
                cout<<"\nEnter the divisor and the dividend";

                cout<<"\nenter the number of bits of the divisor";
                cin>>bn;
                cout<<"\nenter divisor=";
                for(i=bn-1;i>=0;i--)
                cin>>b[i];                          //store the bits of divisor to b[]
                sc=bn;
                for(i=bn-1;i>=0;i--)
                bc[i]=b[i];                         //copy the bits of b[] to bc[] for complement
                complement(bc,bn);              /* calculates the 2's complements of bc[]
                                                                                 and stores in bc[] itself */
                dn=2*bn;
                cout<<"\nThe no. of bits of the dividend(2*no of bits of the divisor)="<<dn;

                cout<<"\ndividend=";
                for(i=bn-1;i>=0;i--)
                cin>>da[i];
                for(i=bn-1;i>=0;i--)
                cin>>dq[i];

                while(sc!=0)
                {             
                                shl(e,da,dq,bn);                                 //shift left operation
                                add(e,da,bc,bn);                              //subtracting da and divisor
                                if(e==1)
                                {              dq[0]=e;
                                }
                                else if(e==0)
                                {              dq[0]=e;
                                                add(e,da,b,bn);              //restoring da by adding divisor
                                }
                                sc--;
                }
               

cout<<"\n\nresult:";
               
                display(da,dq,bn);
                getch();
}

Output:





No comments:

Post a Comment