ورود

View Full Version : آموزش: محاسبه دترمینان ماتریسn*n



seven0721
یک شنبه 29 دی 1392, 12:18 عصر
سلام دوستان عزیز وقت بخیر:
اگه بتونید منو تو نوشتن دترمینان ماتریس راهنمایی کنید ممنونتون میشم....


باتشکر از عزیزانی که تجربیاتشونو در اختیار بنده قرار بدن!!!!!!

omidshaman
یک شنبه 29 دی 1392, 12:29 عصر
http://www.7khatcode.com/372/%D8%AF%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%86-%D9%85%D8%A7%D8%AA%D8%B1%DB%8C%D8%B3-n-n?show=372#q372

Tiyana
یک شنبه 29 دی 1392, 12:43 عصر
این کد رو خودم نوشتم با این کد میتونید هر کاری که میخواید رو روی ماتریسا انجام بدید(البته قسمت معکوسش کامل نیست)



#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
int ar,ac,br,bc,result_op;
int t[100][100];
int op();
int det();
void input1();
void show1();
void input2();
void show2();
void sum_minus();
void produce();
void output1();
void output2();
void khad();
void inverse();
int main()
{
int ans;
do{
result_op=op();
if(result_op==1||result_op==2||result_op==3)
{
printf("\nEnter row and column for mat1:\n");
scanf("%d%d",&ar,&ac);
printf("Enter row and column for mat2:\n");
scanf("%d%d",&br,&bc);
int mat1[ar][ac],mat2[br][bc];
if(result_op==1||result_op==2)
{
if(ar==br&&ac==bc)
{
input1(mat1,mat2);
show1(mat1,mat2);
sum_minus(mat1,mat2);
}
else
printf("\n***Error In Row-Column***");
}

if(result_op==3)
{
if(ac==br)
{
input1(mat1,mat2);
show1(mat1,mat2);
produce(mat1,mat2);
}
else
printf("\n***Error In Row-Column***");
}
}
if(result_op==4||result_op==6)
{
int n;
printf("\nEnter n[matrix is n*n]:");
scanf("%d",&n);
int a[100][100];
input2(a,n);
show2(a,n);
if(result_op==4)
{
int finall;
finall=det(a,n);
printf("\nDeterminan=%d",finall);
}
if(result_op==6)
inverse(a,n);
}
if(result_op==5)
{
printf("\nEnter row and column for mat1:\n");
scanf("%d%d",&ar,&ac);
int a[100][100];
input2(a,0);
show2(a,0);
tar(a,0);
}
printf("\nDo You Want To Continue?[y/n]:");
ans=getche();
printf("\n--------------------------------------------------------------------------------");
}while(ans=='y');
return 0;
}
//define operator---------------------------------------------
int op()
{
char op;
printf("***Select Operator***\n+,-,*,d[determinan],t[taranahade],i[inverse]:");
op=getche();
printf("\n--------------------------------------------------------------------------------");
switch(op){
case'+':
return 1;
case'-':
return 2;
case'*':
return 3;
case'd':
return 4;
case't':
return 5;
case'i':
return 6;
default:
printf("\nUnknow Operator");
}
}
//Input 1--------------------------------------------------------
void input1(int mat1[ar][ac],int mat2[br][bc])
{
int i,j;
for(i=0;i<ar;i++)
for(j=0;j<ac;j++)
{
printf("Enter mat1 array[%d][%d]:",i,j);
scanf("%d",&mat1[i][j]);
}
for(i=0;i<br;i++)
for(j=0;j<bc;j++)
{
printf("Enter mat2 array[%d][%d]:",i,j);
scanf("%d",&mat2[i][j]);
}

}
//Show 1------------------------------------------------------------
void show1(int mat1[ar][ac],int mat2[br][bc])
{
int i,j;
printf("\nMatrix1:\n\n");
for(i=0;i<ar;i++)
{
for(j=0;j<ac;j++)
printf("%5d",mat1[i][j]);
printf("\n");
}
printf("\nMatrix2:\n\n");
for(i=0;i<br;i++)
{
for(j=0;j<bc;j++)
printf("%5d",mat2[i][j]);
printf("\n");
}
}
//Input 2-----------------------------------------------------------
void input2(int a[100][100],int n)
{
int i,j;
if(result_op==5)
{
for(i=0;i<ar;i++)
for(j=0;j<ac;j++)
{
printf("Enter array[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
}
}
else
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("Enter array[%d][%d]:",i,j);
scanf("%d",&a[i][j]);
}
}
}
//show 2------------------------------------------------------------
void show2(int a[100][100],int n)
{
int i,j;
if(result_op==5)
{
printf("\nMatrix is:\n");
for(i=0;i<ar;i++)
{
printf("\n");
for(j=0;j<ac;j++)
{
printf("%5d",a[i][j]);
}
}
}
else
{
printf("\nMatrix is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
}
//Sum_Minus---------------------------------------------------------
void sum_minus(int mat1[ar][ac],int mat2[br][bc])
{
int i,j,mat3[ar][bc];
for(i=0;i<ar;i++)
{
for(j=0;j<ac;j++)
{
if(result_op==1)
mat3[i][j]=mat1[i][j]+mat2[i][j];
if(result_op==2)
mat3[i][j]=mat1[i][j]-mat2[i][j];

}
}
output1(mat3);
}
//Produce-----------------------------------------------------
void produce(int mat1[ar][ac],int mat2[br][bc])
{
int i,j,k,mat3[ar][bc];
for(i=0;i<ar;i++)
{
for(j=0;j<bc;j++)
{
mat3[i][j]=0;
for(k=0;k<ac;k++)
mat3[i][j]=mat3[i][j]+mat1[i][k]*mat2[k][j];
}
}
output1(mat3);
}
//Output 1-------------------------------------------------------
void output1(int mat3[ar][bc])
{
int i,j;
printf("\nResult is:\n\n");
for(i=0;i<ar;i++)
{
for(j=0;j<bc;j++)
printf("%5d",mat3[i][j]);
printf("\n");
}
}
//Output 2------------------------------------------------------
void output2(int a[100][100],int n)
{
int i,j;
printf("\nResult is:\n");
if(result_op==4||result_op==6)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
}

//Determinan---------------------------------------------------
//******************calculate determinte***********************
int det(int a[][100],int n)
{
int i,sum=0;
int b[100][100];
if(n==2)
{
sum=a[0][0]*a[1][1]-a[0][1]*a[1][0];
return sum;
}
else
{
for(i=0;i<n;i++)
{
khad(b,a,i,n);
sum+=a[0][i]*pow(-1,i)*det(b,(n-1));
}
}
return sum;
}
//**********************khad************************ ***********
void khad(int b[100][100],int a[100][100],int i,int n)
{
int j,l;
int h = 0,k = 0;
for(l=1;l<n;l++)
{
for( j=0;j<n;j++)
{
if(j==i)
continue;
b[h][k] = a[l][j];
k++;
if(k == n-1)
{
h++;
k = 0;
}
}
}
}
//taranahade---------------------------------------------------------
void tar(int a[100][100],int n)
{
int i,j,exp=0;
for(i=0;i<ar;i++)
for(j=0;j<ac;j++)
{
t[j][i]=a[i][j];
}
if(result_op==5)
{
printf("\nResult is:\n");
for(i=0;i<ac;i++)
{
for(j=0;j<ar;j++)
{
printf("%5d",t[i][j]);
if(t[i][j]!=a[i][j])
exp=1;
}
printf("\n");
}
if(exp==0)
printf("\n***Matris Motegharen Ast***");
}
}
//inverse------------------------------------------------------------
void inverse(int a[100][100],int n)
{
float d;
float I[100][100];
int i,j;
d=det(a,n);
if(n==2)
{
I[0][0]=a[1][1]/d,I[1][1]=a[0][0]/d,I[0][1]=-a[1][0]/d,I[1][0]=-a[0][1]/d;
}
printf("\nResult:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%6.2f",I[i][j]);
printf("\n");
}
}
//-------------------------------------------------------------------