Wednesday, October 7, 2009

Booth's Algorithm(4bit positive number)

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

using namespace std;

void getdata();

void binary();
void display();
void putdata();
void reset();
void add();
void rshift();
void subtract();

int a,b,p[4],q[4],ac[4],i,q1,n,j,m[4];

int main()
{
    
     int ch,count;
     L1:getdata();
     binary();
     putdata();
     q1=0;
                       
      cout<<"\n";
     display();
      for(count=0;count<=3;count++)
     {
                       cout<<endl;
   
    
     if(q[3]==1&&q1==0)
     {
                       subtract();
     cout<<"\n";
     display();
     cout<<"\tAC=AC-M";
     }
     else if(q[3]==0&&q1==1)
     {add();
     cout<<"\n";
     display();
     cout<<"\tAC=AC+M";
     }
   
     rshift();
     cout<<"\n";
     display();
     cout<<"\tRightshift";
    
    
     cout<<endl;
     }
     n=0;
     int mult=1;
    
     for(i=3;i>=0;i--)
     {
     n=n+(q[i]*mult);
     mult=mult*2;
     }
     for(i=3;i>=0;i--)
     {
     n=n+(ac[i]*mult);
     mult=mult*2;
     }
     cout<<"\nthe answer:"<<n;
     cout<<"\ndo you wish to continue:\n1.yes\n2.no:";
     cin>>ch;
     if(ch==1)
     goto L1;
    
     }
    
    

void getdata()
{
     cout<<"enter the 1st no.:";
     cin>>a;
    
     cout<<"enteer the 2nd no:";
     cin>>b;
          }
    
void binary()
{
     int t1,t2;
     t1=a;
     t2=b;
    
   
     for(i=0;i<=3;i++)
     {
                      p[i]=0;
                      q[i]=0;
                      ac[i]=0;
                      }
              i=3;
     do
     {
            p[i]=t1%2;
            t1=t1/2;
            m[i]=p[i];
            i--;
            }while(t1>0);
     i=3;
     do
     {
      q[i]=t2%2;
      t2=t2/2;
      i--;
      }while(t2>0);
      a=256-a;
      i=3;
     do
     {
      m[i]=a%2;
      a=a/2;
      i--;
      }while(a>0);
     
      }
    


void putdata()
{
     cout<<"\nthe 1st no. is:"<<a<<":";
     for(i=0;i<=3;i++)
     cout<<p[i];
     cout<<"\nthe 2nd no. is:"<<b<<":";
     for(i=0;i<=3;i++)
     cout<<q[i];
}

void subtract()
{
      int cr=0;
     for(i=3;i>=0;i--)
     {
                      if(ac[i]==0&&m[i]==0&&cr==0)
                      {
                                                  ac[i]=0;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&m[i]==0&&cr==1)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&m[i]==1&&cr==0)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&m[i]==1&&cr==1)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&m[i]==0&&cr==0)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==1&&m[i]==0&&cr==1)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&m[i]==1&&cr==0)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&m[i]==1&&cr==1)
                      {
                                                  ac[i]=1;
                                                  cr=1;
                                                  }
                                                  }
}

void add()
{
     int cr=0;
     for(i=3;i>=0;i--)
     {
 if(ac[i]==0&&p[i]==0&&cr==0)
                      {
                                                  ac[i]=0;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&p[i]==0&&cr==1)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&p[i]==1&&cr==0)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==0&&p[i]==1&&cr==1)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&p[i]==0&&cr==0)
                      {
                                                  ac[i]=1;
                                                  cr=0;
                                                  }
                      else if(ac[i]==1&&p[i]==0&&cr==1)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&p[i]==1&&cr==0)
                      {
                                                  ac[i]=0;
                                                  cr=1;
                                                  }
                      else if(ac[i]==1&&p[i]==1&&cr==1)
                      {
                                                  ac[i]=1;
                                                  cr=1;
                                                  }
                                                  }   
}

void rshift()
{
     q1=q[3];
     for(i=2;i>=0;i--)
     q[i+1]=q[i];
    
     q[0]=ac[3];
    
     for(i=2;i>=0;i--)
     ac[i+1]=ac[i];
     ac[0]=q1;
    
}

void display()
{
     for(j=0;j<=3;j++)
     cout<<ac[j];
     cout<<"\t";
     for(j=0;j<=3;j++)
     cout<<q[j];
     cout<<"\t"<<q1;
     }
    
    

No comments:

Post a Comment