Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив3 / OOP_kursach / ООП_курсач.doc
Скачиваний:
96
Добавлен:
07.08.2013
Размер:
393.73 Кб
Скачать

Unit2.H

//---------------------------------------------------------------------------

#ifndef Unit2H

#define Unit2H

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

//*****************************************************************************

//******************************* CLASS TMATRIX *******************************

//*****************************************************************************

class TMatrix

{

private:

//----------------- ??????????

int **_mat;

public:

unsigned char _NNUM1, _NNUM2;

//----------------- Constructors

TMatrix();

TMatrix(int);

//----------------- Metods

//----------- Init operations

void InitRandom();

void InitZero();

void InitE();

//----------- One element operations

void InitElem(int, int, int);

int GetElem(int, int);

//----------- Matrix operations

void MScalMult(int);

void MSumm(TMatrix &, TMatrix &);

void MDiff(TMatrix &, TMatrix &);

void MMult(TMatrix &, TMatrix &);

void MNegative();

void MTrans();

void MMod();

void MMin();

//----------- Size operations

void DeleteOldMatrix();

void InitNewMatrix1();

void InitNewMatrix1(int, int);

};

//---------------------------------------------------------------------------

#endif

Unit2.Cpp

//---------------------------------------------------------------------------

#pragma hdrstop

#include "Unit2.h"

#include "Unit1.h"

//*****************************************************

//********************* Constructors ******************

//*****************************************************

TMatrix :: TMatrix(void)

{

_NNUM1 = 3;

_NNUM2 = 3;

_mat = new int *[_NNUM1];

for (int i = 0; i < _NNUM1; i++)

_mat[i] = new int[_NNUM2];

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = 0;

}

//*****************************************************************************

TMatrix :: TMatrix(int InitNum)

{

_NNUM1 = 3;

_NNUM2 = 3;

_mat = new int *[_NNUM1];

for (int i = 0; i < _NNUM1; i++)

_mat[i] = new int[_NNUM2];

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = InitNum;

}

//***************************************************************************

//***************************** CLASS FUNCTIONS

//***************************************************************************

//***************************** INITNEWMATRIX

void TMatrix :: InitNewMatrix1(int m, int n)

{

_NNUM1 = m;

_NNUM2 = n;

_mat = new int *[_NNUM1];

for (int i = 0; i < _NNUM1; i++)

_mat[i] = new int[_NNUM2];

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = rand()%100-50;

}

//***************************** DELETEOLDMATRIX

void TMatrix :: DeleteOldMatrix()

{

for (int i = 0; i < _NNUM1; i++)

delete _mat[i];

_NNUM1 = 0;

_NNUM2 = 0;

}

//***************************** INITRANDOM

void TMatrix :: InitRandom()

{

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = rand()%100-50;

}

//***************************** INITE

void TMatrix :: InitE()

{

if (_NNUM1 != _NNUM2)

throw 1;

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

if (i == j)

_mat[i][j] = 1;

else

_mat[i][j] = 0;

}

//***************************** MSCALMULT

void TMatrix :: MScalMult(int Scal)

{

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] *= Scal;

}

//***************************** MSUMM

void TMatrix :: MSumm(TMatrix & A, TMatrix & B)

{

if ((A._NNUM1 != B._NNUM1) || (A._NNUM2 != B._NNUM2))

throw 2;

InitNewMatrix1(A._NNUM1, A._NNUM2);

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = A._mat[i][j] + B._mat[i][j];

}

//***************************** MDIFF

void TMatrix :: MDiff(TMatrix & A, TMatrix & B)

{

if ((A._NNUM1 != B._NNUM1) || (A._NNUM2 != B._NNUM2))

throw 2;

InitNewMatrix1(A._NNUM1, A._NNUM2);

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = A._mat[i][j] - B._mat[i][j];

}

//***************************** MMULT

void TMatrix :: MMult(TMatrix & A, TMatrix & B)

{

if (A._NNUM2 != B._NNUM1)

throw 5;

InitNewMatrix1(A._NNUM1, B._NNUM2);

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

{

_mat[i][j] = 0;

for (int k = 0; k < A._NNUM2; k++)

_mat[i][j] += A._mat[i][k] * B._mat[k][j];

}

}

//***************************** MTRANS

void TMatrix :: MTrans()

{

if (_NNUM1 != _NNUM2)

throw 1;

int buf;

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < i; j++)

{

buf = _mat[i][j];

_mat[i][j] = _mat[j][i];

_mat[j][i] = buf;

}

}

//***************************** MNEGATIVE

void TMatrix :: MNegative()

{

for (int i = 0; i < _NNUM1; i++)

for (int j = 0; j < _NNUM2; j++)

_mat[i][j] = -_mat[i][j];

}

//---------------------------------------------------------------------------

#pragma package(smart_init)