Учебный курс: Парадигмы программирования
Кафедра: ИС Факультет: ИТиП
Лабораторная работа №2.
Выполнил: Смирнов Р. А. Группа: 2517
Преподаватель: Зинчик А. А.
Описать класс, реализующий тип данных «вещественная матрица» и работу с ними. Класс должен реализовывать следующие операции над матрицами:
1)сложение, вычитание, умножение, деление (+, –, *, /) (умножение и деление как на другую матрицу, так и на число);
2)комбинированные операции присваивания (+=, –=, *=, /=);
3)операции сравнения на равенство/неравенство;
4)операции вычисления обратной и транспонированной матрицы, операцию возведения в степень;
5)методы вычисления детерминанта и нормы;
6)методы, реализующие проверку типа матрицы (квадратная, диагональная, нулевая, единичная, симметрическая, верхняя треугольная, нижняя треугольная);
7)операции ввода/вывода в стандартные потоки.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Класс TMatr-класс содержащий описание и методы для работы с матрицей
Переменные класса TMatr
double **a-массив размера сxr, где содержится сама матрица
int r-колличество строк
int c-колличество столбцов
Методы класса TMatr:
TMatr()-задает переменную типа TMatr
TMatr(int c, int r)-задает и передает значения в переменную типа TMatr
void set()-заполнят матрицу
void Info()-выводит матрицу
TMatr operator+(TMatr b)-скадывает 2 матрицы одинакого размера
TMatr operator-(TMatr b)-вычитает 2 матрицы одинакого размера
TMatr operator*(TMatr b)-умножает 2 матрицы размера NxN
TMatr operator/(TMatr b)-делит 2 матрицы размера NxN
TMatr operator*=(double b)-умножает матрицу на число
TMatr operator/=(double b)-делит матрицу на число
TMatr operator^(int b)-возводит матрицу типа NxN в степень
bool operator==(TMatr b)-проверяет матрицы на равенство
void ObratMatr()-вычисляет обратную матрицу, только для NxN
void TransMatr()-вычисляет транспонированную матрицу, только для NxN
double det(int n)-вычисление детерминаты, только для NxN
void MatrNorm()-вычисление нормы
double Minor(int x,int y)-вычисление минора
void MatrType()-определение типа матрицы
bool TypeSq()-проверка на квадратный тип матрицы
bool TypeUpRec()-проверка на тип верхнего треугольника
bool TypeDownRec()-проверка на тип нижнего треугольника
bool TypeZero()-проверка на нулевой тип матрицы
bool TypeOne()-проверка на единичный тип матрицы
bool TypeSimetr()-проверка на симметричный тип матрицы
void menu()-меню
#ifndef TMATR_H
#define TMATR_H
#include <string>
using namespace std;
class TMatr{
double **a;
int r;
int c;
public:
TMatr();//задает переменную типа TMatr
TMatr(int c, int r);//задает и передает значения в переменную типа TMatr
void set();//заполнят матрицу
void Info();//выводит матрицу
TMatr operator+(TMatr b);//скадывает 2 матрицы одинакого размера
TMatr operator-(TMatr b);//вычитает 2 матрицы одинакого размера
TMatr operator*(TMatr b);//умножает 2 матрицы размера NxN
TMatr operator/(TMatr b);//делит 2 матрицы размера NxN
TMatr operator*=(double b);//умножает матрицу на число
TMatr operator/=(double b);//делит матрицу на число
TMatr operator^(int b);//возводит матрицу типа NxN в степень
bool operator==(TMatr b);//проверяет матрицы на равенство
void ObratMatr();//вычисляет обратную матрицу, только для NxN
void TransMatr();//вычисляет транспонированную матрицу, только для NxN
double det(int n);//вычисление детерминаты, только для NxN
void MatrNorm();//вычисление нормы
double Minor(int x,int y);//вычисление минора
void MatrType();//определение типа матрицы
bool TypeSq();//проверка на квадратный тип матрицы
bool TypeUpRec();//проверка на тип верхнего треугольника
bool TypeDownRec();//проверка на тип нижнего треугольника
bool TypeZero();//проверка на нулевой тип матрицы
bool TypeOne();//проверка на единичный тип матрицы
bool TypeSimetr();//проверка на симметричный тип матрицы
void menu();//меню
};
#endif
****************************************************************************************************************
#include "TMatr.h"
#include <iostream>
double TMatr::det(int n){
double res=0;
TMatr q(c,r);
if(n==2){
return (a[0][0]*a[1][1]-a[0][1]*a[1][0]);
}
for(int i=0;i<n;i++){
for(int y=1; y<n; y++)
for(int x=0; x<n; x++){
if(x==i) continue;
if(x<i)
q.a[y-1][x]=a[y][x];
else
q.a[y-1][x-1]=a[y][x];
}
res+=pow(-1,(double)(2+i))*a[0][i]*q.det(n-1);
}
return res;
}
TMatr::TMatr(int c, int r){
this->c=c;
this->r=r;
a=new double *[c];
for (int i=0;i<c;i++){
a[i]=new double [r];
}
for (int i=0;i<r;i++){
for (int j=0;j<c;j++){
a[i][j]=NULL;
}
}
}
TMatr::TMatr(){}
void TMatr::set(){
cout<<"Enter the matrix "<<c<<"x"<<r<<endl;
for (int i=0;i<r;i++){
for (int j=0;j<c;j++){
cin>>a[i][j];
}
}
}
void TMatr::Info(){
for (int i=0;i<r;i++){
for (int j=0;j<c;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
TMatr TMatr::operator+(TMatr b){
TMatr c(c,r);
for (int i=0;i<c.r;i++){
for (int j=0;j<c.c;j++){
c.a[i][j]=a[i][j]+b.a[i][j];
}
}
return c;
}
TMatr TMatr::operator-(TMatr b){
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.