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

Ваш аккаунт

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

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

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

лаба

52K
03 мая 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:
    float *mData;
    int  mSizeY;
    int  mSizeX;
    int  refCount;
    public:
    matrix (int sx,int sy)
    {
        int i=0;
        mSizeY   = sy;
        mSizeX   = sx;
        refCount = 0;
        mData    = new float[sx*sy];
        while(i<(sx*sy)){mData[i++]=0;};
    };
    ~matrix()  {if((refCount--)<1){delete[] mData;}}
    float   operator[](int i){return mData;}
    matrix operator=(matrix &b);
    matrix operator+(matrix &b);
    matrix operator-(matrix &b);
    matrix operator*(matrix &b);
    matrix operator*(float f);
    void Determinant();
    void Trans();
    void Matrix_obratnaya();
    //void PowMatr(int n)
    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 * (float 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]=%f ",i,j,mData[(j*mSizeX)+i]);}
        cout<<endl;
    }
    cout<<endl;
};


void matrix::Matrix_obratnaya()
{
    float d;
    d=1/(mData[0]*mData[3]- mData[1]*mData[2]);

    float *tmp = new float[mSizeX*mSizeY];
    for(int i=0;i<mSizeX;i++){
        for(int j=0;j<mSizeY;j++) {
    tmp[0]=d*mData[3];
    tmp[1]=(-1)*d*mData[1];
    tmp[2]=(-1)*d*mData[2];
    tmp[3]=d*mData[0];

    printf("[%d,%d]=%f",i,j,tmp[(i*mSizeY)+j]);}
        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]=%f ",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]);}
 }
};


/*void matrix::PowMatr(int n)
{
    int  *result  = new int[mSizeX*mSizeY];
    int k=0;
    while(k<(mSizeX*mSizeY)){result[k++]=0;};

    int  *temp  = new int[mSizeX*mSizeY];
    int t=0;
    while(t<(mSizeX*mSizeY))
    {
        temp[t]=mData[t];
        t++;
    };
   
    for (int i=0; i<n-1; i++)
    {
        if (i<1)
        {
        result[0]=temp[0]*mData[0]+temp[1]*mData[2];
        result[1]=temp[0]*mData[1]+temp[1]*mData[3];
        result[2]=temp[2]*mData[0]+temp[3]*mData[2];
        result[3]=temp[2]*mData[1]+temp[3]*mData[3];
        }
        else
        {
            t=0;
            while(t<(mSizeX*mSizeY))
            {
                temp[t]=result[t];
                t++;
            }
            result[0]=temp[0]*mData[0]+temp[1]*mData[2];
            result[1]=temp[0]*mData[1]+temp[1]*mData[3];
            result[2]=temp[2]*mData[0]+temp[3]*mData[2];
            result[3]=temp[2]*mData[1]+temp[3]*mData[3];
        }
   
    }

    for(int i=0;i<mSizeX;i++)
    {
        for(int j=0;j<mSizeY;j++)
        {printf("[%d,%d]=%f ",i,j,result[(i*mSizeY)+j]);}
        cout<<endl;
    }
    cout<<endl;
   
};*/

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