Thursday, August 30, 2012

Matrix Operation in C++


                                                                     
                                                                     
                                                                     
                                             
#include<iostream.h>
#include<iomanip.h>

int main()
{
 const int maxsize=10;
 int matrix[maxsize][maxsize];
 int i,j,rows,cols, swap;
 bool quit=true;
 char mop;
         
     /*************Matrix Input Starts************/
 
 do
 {
  cout<<"Enter No.of Rows Between 0 To 10: ";
  cin>>rows;
  if(rows<0 || rows>11)
   cout<<"Please Enter in Range."<<endl;
 }
 while(rows<0 || rows>11);
 do
 {
  cout<<"Enter No.of Cols Between 0 To 10 : ";
  cin>>cols;
  if(cols<0 || cols>11)
   cout<<"Please Enter in Range."<<endl;
 }
 while(cols<0 || cols>11);
 
 for(i=0;i<rows;i++)
 {
  for(j=0;j<cols;j++)
  {
   cout<<"Enter element at index["<<i<<"]["<<j<<"] ";
   cin>>matrix[i][j];
  }
 }
 cout<<endl<<"Orignal Matrix"<<endl;
 for(i=0;i<rows;i++)
 {
  for(j=0;j<cols;j++)
  {
   cout<<matrix[i][j]<<"\t";
  }
  cout<<endl;
 }

      /************* Matrix Input Ends ************/

 cout<<endl<<endl;

      /************* Matrix Operational Loop Starts ************/  

 while(quit)
 {
  do
  {
   cout<<endl;
   cout<<setw(39)<<"Matrix Operations"<<endl;
   cout<<setw(40)<<"Transpose   :   [T]"<<endl;
   cout<<setw(40)<<"Insert      :   [I]"<<endl;
   cout<<setw(40)<<"Delete      :   [D]"<<endl;
   cout<<setw(40)<<"Find        :   [F]"<<endl;
   cout<<setw(40)<<"Swap        :   [W]"<<endl;
   cout<<setw(40)<<"Print       :   [P]"<<endl;
   cout<<setw(40)<<"Quit        :   [Q]"<<endl;
   cout<<setw(35)<<"Enter Option: ";
   cin>>mop;
  }
  
  while(mop!='T' && mop!='t' && mop!='I' && mop!='i' && mop!='D' && mop!='d' && mop!='F' 
   && mop!='f' && mop!='P' && mop!='p' && mop!='W' && mop!='w' && mop!='Q' && mop!='q');
  cout<<endl<<endl;
  
  switch(mop)
  {

     /***** CASE OT TRANSPOSE *****/

  case 'T':
  case 't':
   {
    int tmatrix[maxsize][maxsize];
    swap=rows;
    rows=cols;
    cols=swap;
    for(i=0;i<rows;i++)
    {
     for(j=0;j<cols;j++)
     {
      tmatrix[i][j]=matrix[j][i];
     }
    }
    for(i=0;i<=rows;i++)
    {
     for(j=0;j<cols;j++)
     {
      matrix[i][j]=tmatrix[i][j];
     }
    }
    cout<<endl<<"Transposed Matrix"<<endl;
    for(i=0;i<rows;i++)
    {
     for(j=0;j<cols;j++)
     {
      cout<<matrix[i][j]<<"\t";
     }
     cout<<endl;
    }
    
    
    break;
   }

     /***** CASE OF INSERTION *****/

  case 'I':
  case 'i':
   {
    char ins;
    int rowindex,colindex;
    do
    {
     cout<<"Enter R To Insert Row OR C To Insert column: ";
     cin>>ins;
     if (ins!='R' && ins!='r' && ins!='C' && ins!='c')
     {
      cout<<endl<<"Enter Valid Input"<<endl<<endl;
     }
    }
    while(ins!='R' && ins!='r' && ins!='C' && ins!='c');
    switch(ins)
    {

      /***** CASE TO INSERT A ROW *****/

    case 'R':
    case 'r':
     {
      do
      {
       cout<<"Enter Index  Where To Insert a Row: ";
       cin>>rowindex;
      }
      while(rowindex>=rows+1);
      for(i=rows;i>rowindex;i--)
      {
       for(j=0;j<cols;j++)
       {
        matrix[i][j]=matrix[i-1][j];
       }
      }
      for(j=0;j<cols;j++)
      {
       cout<<"Enter Element At Index["<<rowindex<<"]["<<j<<"] ";
       cin>>matrix[rowindex][j];
      }
      cout<<endl<<"Matrix After Inserting A Row"<<endl;
      for(i=0;i<=rows;i++)
      {
       for(j=0;j<cols;j++)
       {
        cout<<matrix[i][j]<<"\t";
       }
       cout<<endl;
      }
      
      rows++;
      break;
     }

      /***** CASE TO INSERT A COLUMN *****/

    case 'C':
    case 'c':
     {
      do
      {
       cout<<"Enter Index  Where To Insert a Col: ";
       cin>>colindex;
      }
      while(colindex>=cols+1);
      for(i=0;i<rows;i++)
      {
       for(j=cols;j>colindex;j--)
       {
        matrix[i][j]=matrix[i][j-1];
       }
      }
      for(i=0;i<rows;i++)
      {
       cout<<"Enter Element At Index["<<i<<"]["<<colindex<<"] ";
       cin>>matrix[i][colindex];
      }
      cout<<endl<<"Matrix After Inserting A Column"<<endl;
      for(i=0;i<rows;i++)
      {
       for(j=0;j<=cols;j++)
       {
        cout<<matrix[i][j]<<"\t";
       }
       cout<<endl;
      }
      
      cols++;
      break;
     }
    }
    
    break;
   }

     /***** CASE OF DELETION *****/

  case 'D':
  case 'd':
   {;
   char del;
   int rowindex,colindex;
   do
   {
    cout<<"Enter R To Delete Row OR C TO Delete Column: ";
    cin>>del;
    if(del!='R' && del!='r' && del!='C' && del!='c')
    {
     cout<<endl<<"Enter Valid Input"<<endl<<endl;
     
    }
    
   }
   while(del!='R' && del!='r' && del!='C' && del!='c');
   
   switch(del)
   {

      /***** CASE TO DELETE A ROW *****/

   case 'R':
   case 'r':
    {
     do
     {
      cout<<"Enter Row Index that You want to Delete: ";
      cin>>rowindex;
     }
     while(rowindex<0 || rowindex>=rows);
     for(i=rowindex;i<rows;i++)
     {
      for(j=0;j<cols;j++)
      {
       matrix[i][j]=matrix[i+1][j];
      }
     }
     cout<<endl<<"Matrix After Deleting A Row"<<endl;
     for(i=0;i<rows-1;i++)
     {
      for(j=0;j<cols;j++)
      {
       cout<<matrix[i][j]<<"\t";
      }
      cout<<endl;
     }
     rows--;
     break;
    }

      /***** CASE TO DELETE A COLUMN *****/

   case 'C':
   case 'c':
    {
     do
     {
      cout<<"Enter Column Index that You want to Delete: ";
      cin>>colindex;
     }
     while(colindex<0 || colindex>=cols);
     for(i=0;i<rows;i++)
     {
      for(j=colindex;j<cols;j++)
      {
       matrix[i][j]=matrix[i][j+1];
      }
     }
     cout<<endl<<"Matrix After Deleting A Column"<<endl;
     for(i=0;i<rows;i++)
     {
      for(j=0;j<cols-1;j++)
      {
       cout<<matrix[i][j]<<"\t";
      }
      cout<<endl;
     }
     cols--;
     break;
    }
    
   }
   break;
   }

     /***** CASE OF FINDING A VALUE *****/

  case 'F':
  case 'f':
   {
    int value;
    bool flag=false;
    cout<<"Enter Value To Find In MAtrix: ";
    cin>>value;
    cout<<endl;
    for(i=0;i<rows;i++)
    {
     for(j=0;j<cols;j++)
     {
      if(matrix[i][j]==value)
      {
       cout<<"Value Placed At Index ["<<i<<"] ["<<j<<"]"<<endl;
       flag=true;
      }
     }
     
    }
    if(!flag)
    {
     cout<<"Value Doesn't Found"<<endl;
    }
    break;
   }

     /***** CASE OF SWAPING *****/

  case 'W':
  case 'w':
   {
    
    char swap;
    int temp;
    do
    {
     cout<<"Enter R to Swap Row or C to Swap Column :";
     cin>>swap;
     if(swap!='r' && swap!='R' && swap!='c' && swap!='C')
      cout<<"Invalid Option"<<endl;
    }
    while(swap!='r' && swap!='R' && swap!='c' && swap!='C');
    switch(swap)
    {

      /***** CASE TO SWAP A ROW *****/

    case 'R':
    case 'r':
     {
      int index1,index2;
      
      do
      
      {
       cout<<"Enter Index Of 1st Row To Swap Between 0-"<<rows-1<<": ";
       cin>>index1;
       if(index1<0 || index1>rows-1)
        cout<<endl<<"Enter Valid Input"<<endl;
      }
      while(index1<0 || index1>rows-1);
      
      do
      
      {
       cout<<"Enter Index Of 2nd Row To Swap Between 0-"<<rows-1<<": ";
       cin>>index2;
       if(index2<0 || index2>rows-1)
        cout<<endl<<"Enter Valid Input"<<endl;
      }
      while(index2<0 || index2>rows-1);
      for(i=index1;i==index1;i++)
      {
       for(j=0;j<cols;j++)
       {
        temp=matrix[i][j];
        matrix[i][j]=matrix[index2][j];
        matrix[index2][j]=temp;
       }
      }
      cout<<endl<<"Matrix After Swapping Rows"<<endl;
      for(i=0;i<rows;i++)
      {
       for(j=0;j<cols;j++)
       {
        cout<<matrix[i][j]<<"\t";
       }
       cout<<endl;
      }
      break;
     }

      /***** CASE TO SWAP A COLUMN *****/ 

    case 'C':
    case 'c':
     {   
      int index1,index2;
      
      do
      {
       cout<<"Enter Index Of 1st Col To Swap Between 0-"<<cols-1<<": ";
       cin>>index1;
       if(index1<0 || index1>cols-1)
        cout<<endl<<"Enter Valid Input"<<endl;
      }
      while(index1<0 || index1>cols-1);
      
      do
      {
       cout<<"Enter Index Of 2nd Col To Swap Between 0-"<<cols-1<<": ";
       cin>>index2;
       if(index2<0 || index2>cols-1)
        cout<<endl<<"Enter Valid Input"<<endl;
      }
      while(index2<0 || index2>cols-1);
      for(j=index1;j==index1;j++)
      {
       for(i=0;i<cols;i++)
       {
        temp=matrix[i][j];
        matrix[i][j]=matrix[i][index2];
        matrix[i][index2]=temp;
       }
      }
      cout<<endl<<"Matrix After Swapping Columns "<<endl;
      for(i=0;i<rows;i++)
      {
       for(j=0;j<cols;j++)
       {
        cout<<matrix[i][j]<<"\t";
       }
       cout<<endl;
      }
      break;
     }
    }
    
    break;
   }

     /***** CASE OF PRINT *****/

  case 'P':
  case 'p':
   {
    for(i=0;i<rows;i++)
    {
     for(j=0;j<cols;j++)
     {
      cout<<matrix[i][j]<<"\t";
     }
     cout<<endl;
    }
    break;
   }

     /***** CASE OF QUIT *****/

  case 'Q':
  case 'q':
   {
    cout<<"Quiting Program"<<endl;
    quit=false;
    break;
   }
   
  }
 }
 
     /************ Matrix Operational Loop Ends ***********/
 return 0;
}



No comments:

Post a Comment