Вычисления значений матрицы - 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;
};

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы