ورود

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



mopo5115
چهارشنبه 18 دی 1392, 14:12 عصر
سلام. لطفا سورس برنامه رو نگاه کنید و و راهنمایی بفرمایید پیغامهای خطای زیر برای چیه؟

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



115060115061

کامبیز اسدزاده
چهارشنبه 18 دی 1392, 17:58 عصر
از _itoa_s استفاده کنید ببینید.

mopo5115
پنج شنبه 19 دی 1392, 16:49 عصر
این تابع اشکال داره(تعریف نشده)