K
koka278
Здравствуйте, помогите пожалуйста дописать. Нужно было реализовать в виде модуля, программку, которая выполняет действия над квадратными матрицами:
1) нахождение определителя матрицы
2) сложение 2х матриц
3) умножение 2х матриц
4) транспонирование матрицы
Как не пробывал, но что-то 2,3,4 не получается
вот что уже написал:
и еще чтобы, после выполнения программа не завершала работу, а спрашивала "выполнить что-нибудь еще?"
1) нахождение определителя матрицы
2) сложение 2х матриц
3) умножение 2х матриц
4) транспонирование матрицы
Как не пробывал, но что-то 2,3,4 не получается
вот что уже написал:
C++:
#include <iostream.h>
#include <math.h>
#include <windows.h>
char FileName[256];
char Stroka[100];
char RusText[100];
char *slovo;
double **Matrix,**Matrix2,Osndet;
int i,j,N=0;
double Determinant()
{
int maxl,k;
double del, det=1,d;
//приведение матрицы к треугольному виду
for(k=0;k<N-1;k++)
{
maxl=k;
for(i=k+1;i<N;i++)
{
if(abs(Matrix[i][k])>abs(Matrix[k][k]))
{
maxl=i;
}
}
if(maxl!=k)//если максимальный элемент не на диагонали, тогда переставляем строки с учетом изменения определителя
{
det=det*(-1);
for(j=0;j<N;j++)
{
d=Matrix[k][j];
Matrix[k][j]=Matrix[maxl][j];
Matrix[maxl][j]=d;
}
}
if(Matrix[k][k]!=0)
{
for(i=k+1;i<N;i++)
{
del=Matrix[i][k]/Matrix[k][k];
for(j=0;j<N;j++)
{
Matrix[i][j]=Matrix[i][j]-del*Matrix[k][j];//вычитание верхней строки от нижних
}
}
}
else
{
return 0;
}
}
//вычисление определителя путем премножения диагональных элементов
for(i=0;i<N;i++)
det*=Matrix[i][i];
return det;
}
main()
{
char RusMatrVvd[20],RusMatrStr[15],RusMatrStlb[15];
CharToOem("Введите элемент ",RusMatrVvd);
CharToOem("-ой стоки ",RusMatrStr);
CharToOem("-ого столбца: ",RusMatrStlb);
CharToOem("Введите размерность квадратной матрицы : ",RusText);
cout<<RusText;
cin>>N;
Matrix=new double*[N];
for(i=0;i<N;i++)
{
Matrix[i]=new double[N];
for(j=0;j<N;j++)
{
cout<<RusMatrVvd<<i+1<<RusMatrStr<<j+1<<RusMatrStlb;
cin>>Matrix[i][j];
}
}
CharToOem("Исходная матрица:",RusText);
cout<<endl<<RusText<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
cout<<Matrix[i][j]<<"\t";
}
cout<<endl;
}
CharToOem("Что делать? ",RusText);
cout<<endl<<RusText<<endl;
CharToOem("1 - Вычисление определителя матрицы",RusText);
cout<<endl<<RusText<<endl;
CharToOem("2 - Сложение двух матриц ",RusText);
cout<<endl<<RusText<<endl;
CharToOem("3 - Умножение одной матрицы на другую ",RusText);
cout<<endl<<RusText<<endl;
CharToOem("4 - Нахождение транспонированной матрицы ",RusText);
cout<<endl<<RusText<<endl<<endl;
int vop1;
cin>>vop1;
switch(vop1)
{
case 1:
{
Osndet = Determinant();
CharToOem("Определитель равен: ",RusText);
cout<<endl<<RusText<<Osndet<<endl;
break;
}
case 2:
{
CharToOem("Введите элементы второй матрицы : ",RusText);
cout<<RusText<<endl;
Matrix2=new double*[N];
for(i=0;i<N;i++)
{
Matrix2[i]=new double[N];
for(j=0;j<N;j++)
{
cout<<RusMatrVvd<<i+1<<RusMatrStr<<j+1<<RusMatrStlb;
cin>>Matrix2[i][j];
}
}
CharToOem("Вторая матрица:",RusText);
cout<<endl<<RusText<<endl;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
cout<<Matrix2[i][j]<<"\t";
}
cout<<endl;
}
//дальше не знаю как сложить
}
break;
}
case 3:
{
//помогите умножить
case 4:
{
//помогите найти транспонированную матрицу
}
getch();
return 0;
}