واضح آرشیو وب فارسی:سایت ریسک: کلاسی برای محاسبه جمع، تفریق، ضرب، دتمرینان و زین اسبی ماتریس های n در n به زبان ++C the_king 07 تير 1388, 07:02برنامه زیر یک کلاس به نام 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; }
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1019]