Вычисления значений матрицы - VB
Формулировка задачи:
пытался написать прогр по вычислению матрицы(в итоге завис на 4ч и разрядилась аккум). нужна помощь
а именно - Написать программу для вычисления значений матрицы С
A(4,4)
B(4,4) K=SG(A) L=MAXG(B))
С=(K*B *A)+L*A^2 сама формула
Также Ввод, вывод, умножение матрицы на константу
перемножение матриц желательно оформить с использованием подпрограмм
правильность вычисления проверять с помощью этих матриц
Решение задачи: «Вычисления значений матрицы»
textual
Листинг программы
#ifndef MATRIX_H #define MATRIX_H class Matrix { int n,m; double **array; public: Matrix(int z,int x);//---котструктор с параметрами, z и x размеры матрицы Matrix();//--- контсруктор по умолчанию Matrix(Matrix & A);//--конструктор копирования ~Matrix(void);//---деструктор void OutMatrix(void);//---вывод матрицы на экран void EnterMatrix(void);//---ввод матрицы void SerchAkstrem(void); //---поиск эксремумов и их строки void Polindrom(void); //---поиск чисел полиндромов //-----перегрузка операторов---- Matrix&operator=(Matrix &a); //---оператор = Matrix operator+(Matrix &a);//---оператор + Matrix operator-(Matrix &a);//---оператор - Matrix operator*(double a);//---оператор *a Matrix operator/(double a);//---оператор /a Matrix operator*(Matrix & a);//---оператор Matrix*Matrix Matrix Transponiring(void);//---транспонирование матрицы double SkPrOnVek(Matrix b);//---сколярное произведение 2х векторов doublel Matrix1(Matrix2) Matrix operator-(void);//---внесение минуса в матрицу (*(-1)) double Determinant3x3max(void);//---детерминант матрицы. 3х3-максимальный рамер матрицы }; #endif; #include "Matrix.h" #include <conio.h> #include <iostream> #include <math.h> using namespace std; //---конструктор с параметрами--- Matrix::Matrix(int z,int x) { cout<<"constructor\n"; n=z;m=x; array=new double*[n]; for(int i=0;i<n;i++) array[i]=new double[m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) array[i][j]=0; }; //---конструктор по умолчанию--- Matrix::Matrix() { n=0;m=0; array[0][0]=0; printf("\n\nOpen construct without parametr!") ; }; //---конструктор копирования--- Matrix::Matrix(Matrix & A) { cout<<"copi"<<endl; n=A.n;m=A.m; array=new double*[n]; for(int i=0;i<n;i++) array[i]=new double[m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) array[i][j]=A.array[i][j]; }; //---деструктор--- Matrix::~Matrix() { cout<<"destruct \n"; delete array; }; //---вывод матрицы на экран--- void Matrix::OutMatrix() { cout<<"\n\n matrix =" ; for(int i=0;i<n;i++) { printf("\n"); for(int j=0;j<m;j++) printf(" %lf ", array[i][j]); }; }; //---ввод матрицы--- void Matrix::EnterMatrix() { for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%lf",&array[i][j]); }; double Matrix::SkPrOnVek(Matrix a) { double s=0; if(n==a.n&&m==a.m) { for(int i=0;i<n;i++) for(int j=0;j<m;j++) s=s+array[i][j]*a.array[i][j]; } return s; }; //---поиск экстремумов--- void Matrix::SerchAkstrem(void) { int nMax=0,nMin=0; OutMatrix(); double min=array[0][0],max=array[0][0]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(array[i][j]<min) { min=array[i][j]; nMin=i; } if(array[i][j]>max) { max=array[i][j]; nMax=i; } } printf("\n\nMin= %Lf in %d string",min,nMin+1); printf("\nMax= %Lf in %d string",max,nMax+1); }; //---поиск чисел полиндромов--- void Matrix::Polindrom() { int k=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { double p=array[i][j]; if(((int)fmod(p,10)==(int)(p/10))||((int)fmod(p,10)==(int)(p/100))) k++; } printf("\n\nNamber polindrom = %d",k); }; //---перегрузка оператора "="--- Matrix & Matrix::operator=(Matrix & a) { n=a.n;m=a.m; if(n==a.n&&m==a.m) { if(this==&a) return *this; for(int j=0;j<n;j++) for(int i=0;i<m;i++) array[j][i]=a.array[j][i]; cout<<"operator ="<<endl; return *this; } else { printf("Can nnot do operator =. Becouse past operator Error(+-*/)\n"); return *this; } }; //---перегрузка оператора "+"--- Matrix Matrix::operator+(Matrix & a) { if(n==a.n&&m==a.m) { Matrix t=a; for(int i=0;i<n;i++) for(int j=0;j<m;j++) t.array[i][j]=array[i][j]+a.array[i][j]; cout<<"operator +"<<endl; return t; } else { Matrix t(0,0); printf("\n Can not do operator +. Gabarits!!!"); return t; } }; //---перегрузка оператора "-"--- Matrix Matrix::operator-(Matrix & a) { if(n==a.n&&m==a.m) { Matrix t=a; for(int i=0;i<n;i++) for(int j=0;j<m;j++) t.array[i][j]=array[i][j]-a.array[i][j]; cout<<"operator -"<<endl; return t; } else { Matrix t(0,0); printf("\n Can not do operator -. Gabarits!!!"); return t; } }; //---перегрузка оператора "* на число"--- Matrix Matrix::operator*(double a) { cout<<"operator *\n"; Matrix t(n,m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) t.array[i][j]=array[i][j]*a; return t; }; //---перегрузка оператора "/ на число"--- Matrix Matrix::operator/(double a) { cout<<"operator /\n"; Matrix t(n,m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) t.array[i][j]=array[i][j]/a; return t; }; //---транспонирование матрицы--- Matrix Matrix::Transponiring(void) { Matrix t(m,n); for(int i=0;i<n;i++) for(int j=0;j<m;j++) t.array[j][i]=array[i][j]; return t; }; //---перегрузка оператора "* Matrix на Matrix"--- Matrix Matrix::operator*(Matrix & a) { Matrix t(n,a.m); if(m==a.n) { for(int x=0;x<a.m;x++) { for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { t.array[i][x]=t.array[i][x]+array[i][j]*a.array[j][x]; } } } cout<<"\noperator Matrix*Matrix\n"; } else { printf("\n Can not do operator *. Gabarits!!!"); } return t; }; Matrix Matrix::operator-(void) { return *this*(-1); }; //---детерминант матрицы. 3х3-максимальный рамер матрицы--- double Matrix::Determinant3x3max(void) { double x=0; if(n==m) { if(n==1) x=array[0][0]; if(n==2) x=array[0][0]*array[1][1]-array[0][1]*array[1][0]; if(n==3) { x=array[0][0]*array[1][1]*array[2][2]+array[0][1]*array[1][2]*array[2][0]+array[1][0]*array[2][1]*array[0][2]- array[0][2]*array[1][1]*array[2][0]-array[1][2]*array[2][1]*array[0][0]-array[1][0]*array[0][1]*array[2][2]; } if(n>3) { printf("\n Can not serch determinant. Gabarits > 3x3!!!"); x=-666; } } else { printf("\n Can not serch determinant. Gabarits!!!"); x=-666; } return x; };
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д