کلاسی برای محاسبه جمع، تفریق، ضرب، دتمرینان و زین اسبی ماتریس های n در n به زبان ++C

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;
}
 

جدیدترین ارسال ها

بالا