the_king
مدیرکل انجمن
برنامه زیر یک کلاس به نام matrix معرفی می کند که دارای قابلیت های زیر است :
- دریافت کردن مولفه های ماتریس n در n ای را از ورودی cin توسط عملگر <<
- ارسال و نمایش مولفه های ماتریس در خروجی cout توسط عملگر >>
- جمع کردن دو ماتریس توسط عملگر +
- تفریق کردن دو ماتریس توسط عملگر -
- ضرب کردن دو ماتریس توسط عملگر *
- محاسبه کردن دترمینان ماتریس توسط متد ()det
- بدست آوردن نقاط زین اسبی توسط متد ()zin
کد:
#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
class matrix
{
private:
int data[10][10];
int n;
public:
matrix(int);
matrix operator +(matrix&);
matrix operator -(matrix&);
matrix operator *(matrix&);
double det();
void zin();
friend ostream &operator <<(ostream&,matrix&);
friend istream &operator >>(istream&,matrix&);
};
matrix::matrix(int m)
{
int i,j;
n=m;
for (i=0;n>i;i++)
for (j=0;n>j;j++)
data[i][j]=0;
}
void IntToStr(int i,char str[])
{
int j;
_itoa(i,str,10);
for (j=0;str[j];j++);
for (;j<7;j++) str[j]=32;
str[7]=0;
}
matrix matrix::operator +(matrix &operand)
{
int i,j;
matrix result(n);
if (n==operand.n)
{
for (i=0;n>i;i++)
for (j=0;n>j;j++)
result.data[i][j]=data[i][j]+operand.data[i][j];
}
return result;
}
matrix matrix::operator -(matrix &operand)
{
int i,j;
matrix result(n);
if (n==operand.n)
{
for (i=0;n>i;i++)
for (j=0;n>j;j++)
result.data[i][j]=data[i][j]-operand.data[i][j];
}
return result;
}
matrix matrix::operator *(matrix &operand)
{
int i,j,k,sum;
matrix result(n);
if (n==operand.n)
{
for (i=0;n>i;i++)
for (j=0;n>j;j++)
{
sum=0;
for (k=0;n>k;k++)
sum+=data[i][k]*operand.data[k][j];
result.data[i][j]=sum;
}
}
return result;
}
void matrix::zin()
{
int count=0;
int min,i,j,k;
for (i=0;n>i;i++)
{
min=data[i][0];
k=0;
for (j=1;n>j;j++)
if (min>data[i][j])
{
min=data[i][j];
k=j;
}
for (j=0;n>j;j++)
if (min<data[j][k])
break;
if (j==n)
{
count++;
cout << "[" << i << "," << k << "] is a zin point." << endl;
}
}
if (count==0)
cout << "Any zin points not found." << endl;
}
double matrix::det()
{
int i,j,k;
int sign=1;
double d,temp;
double mat[10][10];
for (i=0;n>i;i++)
for (j=0;n>j;j++)
mat[i][j]=data[i][j];
for (i=0;n>i;i++)
{
for (j=i;n>j;j++)
if (mat[i][j]!=0)
break;
if ((j>i) && (n>j))
{
for (k=0;n>k;k++)
{
temp=mat[i][k];
mat[i][k]=mat[j][k];
mat[j][k]=temp;
}
sign=-sign;
}
else if (j==n)
continue;
for (j=i+1;n>j;j++)
if (mat[j][i]!=0)
{
temp=mat[j][i]/mat[i][i];
for (k=i;n>k;k++)
mat[j][k]-=mat[i][k]*temp;
}
}
d=sign;
for (i=0;n>i;i++)
d*=mat[i][i];
return d;
}
ostream &operator <<(ostream &output,matrix &mat)
{
int i,j;
char str[8];
for (i=0;i<mat.n;i++)
{
for (j=0;j<mat.n;j++)
{
IntToStr(mat.data[i][j],str);
output << str;
}
output << endl;
}
return output;
}
istream &operator >>(istream &input,matrix &mat)
{
int i,j;
for (i=0;i<mat.n;i++)
for (j=0;j<mat.n;j++)
{
cout << "[" << i+1 << "," << j+1 << "] = ";
input >> mat.data[i][j];
}
return input;
}
int main()
{
matrix a(2),b(2);
cout << "Please enter matrix A : " << endl;
cin >> a;
cout << "Please enter matrix B : " << endl;
cin >> b;
cout << endl << "A + B = " << endl << a+b;
cout << endl << "A - B = " << endl << a-b;
cout << endl << "A * B = " << endl << a*b;
cout << endl << "det [A] = " << a.det() << endl;
cout << endl << "zin [A] = " << endl;
a.zin();
cout << "Press any key to continue" << endl;
getch();
return 0;
}