1. Составить следующие функции для работы с матрицей: ввод матрицы; вывод; транспонирование матрицы с сохранением результата на новом месте; умножение исходной матрицы на транспонированную; головную функцию для проверки этих функций:
const int n2=3;
void INP1(double x[][n2] , int );
void OUT1(double x[][n2], int );
void TRANS(double x[][n2], double y[][n2], int );
void MULT(double x[][n2], double y[][n2], double z[][n2], int );
int main()
{ const int size=3; int k;
double a[size][n2],b[size][n2],c[size][n2]; INP1(a,size);
cout<<"\nOld matrix\n"; OUT1(a,size);
TRANS(a,b,size); cout<<"\nTrans matrix \n"; OUT1(b,size);
MULT(a,b,c,size); cout<<"\nMultiplication \n"; OUT1(c,size);
getch(); return 0;
}
void TRANS(double x[][n2], double y[][n2], int n)
{ for(int i=0; i<n; i++)
for(int j=0; j<n2; j++)
y[i][j]=x[j][i];
}
void MULT(double x[][n2], double y[][n2], double z[][n2], int n)
{ int l, i, j, s;
for (i=0; i<n; i++)
for ( j=0; j<n2; j++)
{ s=0;
for (l=0; l<n2; l++)
s+=x[i][l]*y[l][j];
z[i][j]=s;
}
}
void OUT1(double x[][n2], int n)
{ int X,j,Y=wherey();
for (int i=0; i<n; i++, Y++)
for (X=1, j=0; j<n2; j++, X+=7)
{ gotoxy(X,Y);
cout<<x[i][j];
}
cout<<endl;
}
void INP1(double x[][n2],int n)
{ int Y=1,X;
for (int i=0; i<n; i++)
{ Y++; X=-14;
for (int j=0; j<n2; j++)
{ X+=16; gotoxy(X,Y);
cout<<"a["<<i<<","<<j<<"]"<<" ";
cin>>x[i][j];
}
}
}
2. Составить класс для работы с целочисленной матрицей, включив в него матрицу, конкретные текущие размерности и следующие методы: конструктор для ввода и проверки текущих размерностей матрицы; ввод матрицы; вывод матрицы; поиск наибольшего и наименьшего значений матрицы и номеров строк, где они находятся; перестановку двух строк матрицы. В функции main ввести размерности матрицы, создать объект и проверить составленные методы:
const n1max=10, n2max=5;
class ClMatr
{ int a[n1max][n2max], n1, n2;
public:
ClMatr(int size1=5, int size2=3)
{ if (size1>0 && size1<n1max)
n1=size1; else n1=5;
if (size2>0 && size2<n2max)
n2=size2; else n2=3;
}
void MyInp();
void MyOut();
void MaxMin(int &, int &, int &, int &);
void Change(int, int);
};
void ClMatr::MyInp()
{ int x, y=1;
for (int i=0; i<n1; i++)
{ y++; x=-14;
for (int j=0; j<n2; j++)
{ x+=16; gotoxy(x,y);
cout<<"a["<<i<<","<<j<<"]"<<" ";
cin>>a[i][j];
}
}
};
void ClMatr::MyOut()
{ int x, y=wherey()+1, j;
for (int i=0; i<n1; i++, y++)
for (x=1, j=0; j<n2; j++, x+=7)
{ gotoxy(x,y);
cout<<a[i][j];
}
cout<<endl;
}
void ClMatr::MaxMin(int &max, int &Nmax, int &min, int &Nmin)
{ max=min=a[0][0]; Nmax=Nmin=0;
for (int i=0;i<n1;i++)
for (int j=0;j<n2;j++)
if (max<a[i][j])
{ max=a[i][j]; Nmax=i;
}
else if (min>a[i][j])
{ min=a[i][j]; Nmin=i;
}
}
void ClMatr::Change(int k1, int k2)
{ int d;
if (k1!=k2)
for (int j=0; j<n2; j++)
{ d=a[k1][j]; a[k1][j]=a[k2][j];
a[k2][j]=d;
}
}
int main()
{ int n1, n2, Nmax, Nmin, max, min; clrscr();
cout<<"\nn1="; cin>>n1; cout<<" n2="; cin>>n2;
ClMatr ob(n1,n2); clrscr();
ob.MyInp(); cout<<"\nOld matrix\n"; ob.MyOut();
ob.MaxMin(max,Nmax,min,Nmin);
cout<<"Max element= "<<max <<" in "<< Nmax << " row\n";
cout<<"Min element= "<<min <<" in "<< Nmin << " row\n";
if (Nmax!=Nmin)
{ ob.Change(Nmax,Nmin);
cout<<"Matrix after changing "; ob.MyOut();
}
else cout<<"Matrix is not changed \n";
getch(); return 0;
}
Замечания.
1) Во всех задачах предполагается, что матрица имеет фиксированную размерность, при этом количество строк и столбцов — константы.
2)В зависимости от способностей студентов задания выполняются в модульном и (или) объектно–ориентированном стиле, что влияет на оценку. Каждый проект необходимо разделить на несколько функций (методов).