Sunday, 7 June 2015

Program that reads in a matrix and checks if it has the parity property


 # include <iostream.h>
 # include <fstream.h>
 # include <string.h>
 # include <stdlib.h>
 # include <conio.h>

 int main( )
    {
       clrscr( );

       fstream File("CP-24.txt",ios::in|ios::nocreate);

       if(!File)
      {
         cout<<"\n Unable to open the input file."<<endl;
         cout<<"\n Press any key to exit.";

         getch( );
         exit(EXIT_FAILURE);
      }

       char Data[220]={NULL};

       do
      {
         strset(Data,NULL);

         File.getline(Data,100);

         if(strcmp(Data,"0")==0)
        break;

         int matrix[101][101]={0};

         int n=atoi(Data);

         int i;
         int j;

         for(i=0;i<n;i++)
        {
           strset(Data,NULL);

           File.getline(Data,200);

           for(j=0;j<n;j++)
              matrix[i][j]=(int(Data[(j*2)])-48);
        }

         for(i=0;i<n;i++)
        {
           for(j=0;j<n;j++)
              {
             matrix[i][n]+=matrix[i][j];
             matrix[n][i]+=matrix[j][i];
              }
        }

         int parity=1;
         int corrupt_rows=0;
         int corrupt_columns=0;

         for(i=0;i<n;i++)
        {
           if((matrix[i][n]%2)!=0 || (matrix[n][i]%2)!=0)
              {
             if((matrix[i][n]%2)!=0)
                corrupt_rows++;

             elseif((matrix[n][i]%2)!=0)
                corrupt_columns++;

             parity=0;
              }
        }

         if(parity==1)
        cout<<"Ok"<<endl;

         elseif(parity==0)
        {
           if(corrupt_rows>1 || corrupt_columns>1)
              cout<<"Corrupt"<<endl;

           else
              {
             int row=0;
             int column=0;

             for(i=0;i<n;i++)
                {
                   if((matrix[i][n]%2)!=0)
                  row=i;

                   if((matrix[n][i]%2)!=0)
                  column=i;
                }

             if(matrix[row][column]==0)
                matrix[row][column]=1;

             elseif(matrix[row][column]==1)
                matrix[row][column]=0;

             matrix[row][n]=0;
             matrix[n][column]=0;

             for(i=0;i<n;i++)
                {
                   matrix[row][n]+=matrix[row][i];
                   matrix[n][column]+=matrix[i][column];
                }

             if((matrix[row][n]%2)!=0 || (matrix[n][column]%2)!=0)
                cout<<"Corrupt"<<endl;

             else
                cout<<"Chamge Bit ("<<(row+1)<<","<<(column+1)<<")"<<endl;
              }
        }
      }
       while(1);

       File.close( );

       getch( );
       return 0;
    }

No comments:

Post a Comment