Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<fstream>
- using namespace std;
- ifstream f("prob.in");
- ofstream g("prob.out");
- // Dimension of input square matrix
- int prim(int a) {
- if(a < 2)
- return 0;
- for(int i = 2; i * i <= a; i++)
- if(a % i == 0)
- return 0;
- return 1;
- }
- // Function to get determinant of matrix
- int determinant(int mat[10][10], int n)
- {
- int num1,num2,det = 1,index,total = 1; // Initialize result
- // temporary array for storing row
- int temp[n + 1];
- //loop for traversing the diagonal elements
- for(int i = 0; i < n; i++)
- {
- index = i; // intialize the index
- //finding the index which has non zero value
- while(mat[index][i] == 0 && index < n) {
- index++;
- }
- if(index == n) // if there is non zero element
- {
- // the determinat of matrix as zero
- continue;
- }
- if(index != i)
- {
- //loop for swaping the diagonal element row and index row
- for(int j = 0; j < n; j++)
- {
- swap(mat[index][j],mat[i][j]);
- //determinant sign changes when we shift rows
- //go through determinant properties
- det = det*pow(-1,index-i);
- }
- }
- //storing the values of diagonal row elements
- for(int j = 0; j < n; j++)
- {
- temp[j] = mat[i][j];
- }
- //traversing every row below the diagonal element
- for(int j = i+1; j < n; j++)
- {
- num1 = temp[i]; //value of diagonal element
- num2 = mat[j][i]; //value of next row element
- //traversing every column of row
- // and multiplying to every row
- for(int k = 0; k < n; k++)
- {
- //multiplying to make the diagonal
- // element and next row element equal
- mat[j][k] = (num1 * mat[j][k]) - (num2 * temp[k]);
- }
- total = total * num1; // Det(kA)=kDet(A);
- }
- }
- //mulitplying the diagonal elements to get determinant
- for(int i = 0; i < n; i++)
- {
- det = det * mat[i][i];
- }
- return (det/total); //Det(kA)/k=Det(A);
- }
- // Driver code
- int main()
- {
- // i rand
- //j coloana
- int n, i, j,x;
- int m[10][10],a[10][10],b[1][10],c[10][10],d[10][10],w,e[10][10],h[10][10];
- f >> n;
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- f >> m[i][j];
- }
- }
- g<<" Ati introdus matricea principala : "<<endl;
- for (i = 0; i < n; i++) {
- for (j = 0; j < n+1; j++)
- g << m[i][j] <<" ";
- g<<endl;
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- a[i][j]=m[i][j];
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- b[i][j]=a[i][j];
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- c[i][j]=b[i][j];
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- d[i][j]=c[i][j];
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- e[i][j]=d[i][j];
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n+1; j++)
- {
- d[i][j]=e[i][j];
- }
- }
- int k=0;
- x=determinant(a, n);
- g<<" Determinantul principal : "<<x <<endl;
- if (x==0){ g<<" Sunt o infinitate de solutii"<<endl;}
- if(x!=0){
- if ( n>=2) {
- for (i = 0; i < n; i++)
- {
- b[i][0]=b[i][n];
- }
- int x1=0;
- x1=determinant(b, n);
- g<<" Determinantul lui x1 : "<<x1 <<endl;
- g<<" x1 : " << x1/x<<endl;
- for (i = 0; i < n; i++)
- {
- c[i][1]=c[i][n];
- }
- int x2=0;
- x2=determinant(c, n);
- g<<" Determinantul lui x2 : "<<x2 <<endl;
- g<<" x2 : " << x2/x<<endl;
- }
- if(n>=3){
- for (i = 0; i < n; i++)
- {
- d[i][2]=d[i][n];
- }
- int x3=0;
- x3=determinant(d, n);
- g<<" Determinantul lui x3 : "<<x3 <<endl;
- g<<" x3 : " << x3/x<<endl;
- }
- if(n>=4){
- for (i = 0; i < n; i++)
- {
- e[i][3]=e[i][n];
- }
- int x4=0;
- x4=determinant(e, n);
- g<<" Determinantul lui x4 : "<<x4 <<endl;
- g<<" x4 : " << x4/x<<endl;
- }
- if(n>=5){
- for (i = 0; i < n; i++)
- {
- h[i][4]=h[i][n];
- }
- int x5=0;
- x5=determinant(h, n);
- g<<" Determinantul lui x5 : "<<x5 <<endl;
- g<<" x5 : " << x5/x<<endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement