Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Класс матриц

52K
02 мая 2011 года
Gevorg
22 / / 10.04.2011
Доброго времени суток. Нужна помощь. Задание звучит так : разработать класс для работы с матрицами 2х2 .Вот код . Он работает , просто нужно еще реализовать нахождение обратной матрицы. Помогите плиз
Код:
#ifndef CLASS_DEFINITION_H
#define CLASS_DEFINITION_H

#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>


#define MATRIX_SIZE_X 2
#define MATRIX_SIZE_Y 2

class matrix {   // класс матрица
    private:
    int *mData;
    int  mSizeY;
    int  mSizeX;
    int  refCount;
    public:
    matrix (int sx,int sy)
    {
        int i=0;
        mSizeY   = sy;
        mSizeX   = sx;
        refCount = 0;
        mData    = new int[sx*sy];
        while(i<(sx*sy)){mData[i++]=0;};
    };
    ~matrix()  {if((refCount--)<1){delete[] mData;}}
    int    operator[](int i){return mData;}
    matrix operator=(matrix &b);
    matrix operator+(matrix &b);
    matrix operator-(matrix &b);
    matrix operator*(matrix &b);
    matrix operator*(int f);
    void Determinant();
    void Trans();
    void Matrix_obratnaya();
    void    In_put();
    void    Out_put();
};
 
matrix matrix::operator = (matrix &b)
{
    int i=0; refCount++;
    while(i<(mSizeX*mSizeY)){mData=b;i++;}
    return *this;
};

matrix matrix::operator * (matrix &b)
{
    int i=0; refCount++;
    while(i<(mSizeX*mSizeY)){mData[i++]*=b;i++;}
    return *this;
};

matrix matrix::operator * (int f)
{
    int i=0; refCount++;
    while(i<(mSizeX*mSizeY)){mData[i++]*=f;}
    return *this;
};

 
matrix matrix::operator + (matrix &b)
{
    int i=0; refCount++;
    while(i<(mSizeX*mSizeY)){mData+=b;i++;}
    return *this;
};
 
matrix matrix::operator - (matrix &b)
{
    int i=0; refCount++;
    while(i<(mSizeX*mSizeY)){mData-=b;i++;}
    return *this;
};

void matrix::Determinant()
{
cout<<"detM="<<mData[0]*mData[3]- mData[1]*mData[2]<<endl;
};

void matrix::Trans()
{
 for(int i=0;i<mSizeX;i++)
    {
        for(int j=0;j<mSizeY;j++)

        {printf("[%d,%d]=%u ",i,j,mData[(j*mSizeX)+i]);}
        cout<<endl;
    }
    cout<<endl;
};


 
void matrix::Out_put()
{
    for(int i=0;i<mSizeX;i++)
    {
        for(int j=0;j<mSizeY;j++)

        {printf("[%d,%d]=%u ",i,j,mData[(i*mSizeY)+j]);}
        cout<<endl;
    }
    cout<<endl;
};
 
void matrix::In_put()
{
 for(int i=0;i<mSizeX;i++)
 {
    for(int j=0;j<mSizeY;j++){cin>>(mData[(i*mSizeX)+j]);}
 }
};

#endif
316
05 мая 2011 года
Alm3n
889 / / 29.05.2009
http://ru.wikipedia.org/wiki/Обратная_матрица#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B
Код:
void matrix::Matrix_obratnaya()
{
    float k=1/((mData[0]*mData[2])-(mData[1]*mData[3]));
    for(int i=0;i<mSizeX;i++)
    {
        for(int j=0;j<mSizeY;j++)

        {printf("[%d,%d]=%u ",i,j,k*mData[(i*mSizeY)+j]);}
        cout<<endl;
    }
    cout<<endl;
}
52K
06 мая 2011 года
Gevorg
22 / / 10.04.2011
спс , а вот еще такой вопрос : как возвести матрицу в степень ?
316
06 мая 2011 года
Alm3n
889 / / 29.05.2009
конструктор копий допиши.
 
Код:
matrix matrix::power(matrix a, int n)
{
    if (n==1) return a;
    else return a*power(a,n-1);
}
52K
06 мая 2011 года
Gevorg
22 / / 10.04.2011
и как правильно этот конструктор написать ?
316
06 мая 2011 года
Alm3n
889 / / 29.05.2009
Цитата: Gevorg
и как правильно этот конструктор написать ?



о конструкторах

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог