Halaman

Rabu, 02 November 2011

Coding Determinan Matrik C++


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

typedef vector<double>Vect;
typedef vector<Vect>Matr;

int fact(int a);

int main()
{
 
 int i;
 int counter = 0;
 int nb = 0;
 cout << " number of rows or columns :\n";
 cin >> nb;
 
 cout << " Enter the square matrix :\n";
 Vect row(nb);
 Vect determinant;
 Matr a;
 int product = 1;
 int determ = 0;
 int ve1 = 0;

 for(i = 0; i < nb; i++)
 {
  for(int j = 0; j < nb; j++)
  {
   if(j<(nb-1))
    cout << " enter element\n";
   else cout << " enter last element of this row\n";
   cin >> row[j];
  }
  a.push_back(row);
 }
 
 for(i = 0; i < nb; i++)
 {
  cout << endl;
  for(int j = 0; j < nb; j++)
  {
   cout << a[i][j] << " ";
  }
 }
 cout << endl;



 vector<int>vec;
 for(i = 1; i <= nb; i++)
  vec.push_back(i);
 vector<int>::iterator iter1 = vec.begin();
 vector<int>::iterator iter2 = vec.end();


 for(i = 0; i < fact(nb); i++)
 {
   /* copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));;*/
    vector<int>vec1(nb);
    copy(vec.begin(), vec.end(), vec1.begin());
    for(int j = 0; j < (nb); j++)
     cout << vec1[j];
    for(int i = 0; i < vec1.size(); i++)
    {
   
     for(int j = i; j < vec1.size(); j++)
     {
      if(vec1[j]<vec1[i])
       counter++;
     }
    }
    if(counter%2==0)
     cout << " even ";
    else 
     cout << " odd ";
    
    
    for(int w = 0; w < nb; w++)
    {
     ve1 = (vec1[w])-1;
     product *= (a[w][ve1]);
    } 
    if(counter%2!=0)
     product = (- product);

    determinant.push_back(product); 

          counter = 0;
    product = 1;
    next_permutation(iter1, iter2);
    cout << endl;
 }
 
 for(int x = 0; x < determinant.size(); x++)
 {
  determ += determinant[x];
 }
 
 for(i = 0; i < nb; i++)//print the matrix
 {
  cout << endl;
  for(int j = 0; j < nb; j++)
  {
   cout << a[i][j] << " ";
  }
 }
 cout << endl;


 cout << " The determinant is :\n";
 cout << determ << endl;


  
    return 0;
}

int fact(int a)
{
 if(a<=1)
  return a;

 return (a * fact(a - 1));
}

Tidak ada komentar:

Posting Komentar