Разработка программы "Тензорный калькулятор", страница 3

TfmMatrix* MR;          // последняя созданная матрица с помощью NewMatrix(операции)

MAXARGS константа – максимум аргументов объявлена в "Defines.h"

Подогнать размер после первого вывода данных позволит флаг bool sizMatrix

Пример1:

if(OperName==TEST_FUNCTION){

NewMatrix(1,1,NewDataName);

mm->Lines->Add("Была создана матрица с миенем: "+MR->DataName);

mm->Lines->Add("Были введены следующие аргументы: ");

mm->Lines->Add("    Матрица 1: "+MFA[1]->FullDataName);

mm->Lines->Add("    Матрица 2: "+MFA[2]->FullDataName);

mm->Lines->Add("    Матрица 3: "+MFA[3]->FullDataName);

mm->Lines->Add("    Число 1: "+String(DA[1]));

mm->Lines->Add("    Число 2: "+String(DA[2]));

mm->Lines->Add("    Число 3: "+String(DA[3]));

}

Пример2:

if(OperName==MUL){

NewMatrix(1,1,NewDataName);

err=MULLMat(MR->Matrix,MFA[1]->Matrix,MFA[2]->Matrix);

mm->Lines->Add("Результат умножения: "+MR->FullDataName);

}

Перед  эксплуатацией рекомендуется удалить проверочную операцию

Памятка при добавлении операций:

// задает операцию

int err;                   // код ошибки

String OperName;           // имя операции (строка)

int ARGS;                  // количество аргументов у операции(осталось ввести)(матричные)

int DARGS;                 // количество аргументов у операции(осталось ввести)(типа double)

String ANames[MAXARGS];    // имена аргументов (матриц)

String DANames[MAXARGS];   // имена аргументов (типа double)

TfmMatrix *MFA[MAXARGS];   // передаваемые аргументы матричные нумерация с 1

double DA[MAXARGS];        // аргументы типа double нумерация с 1

void ClearOperation();     // сброс операции

void AfterOperation();     // по завершению аперации

void OperList();           // формирует список операций

void InitOperation();      // инициализация операции

void exeOperation();       // выполнение операций

bool sizMatrix;            // выставить размер окна размром матрицы

// служебное для операций

int NARG;                  // номер текущего вводимого аргумента

int DNARG;                 // номер текущего вводимого аргумента (типа double)

Таким образом можно вставлять новые операции  с любым количеством матричных и числовых аргументов. Причем выбором выполняемой операции, вводом аргументов и обработкой ошибок  занимается система и при доработке программы задумываться о том, как это происходит не обязательно.

Класс KMatrix:

// модуль описывает данные и функции работы с ними

#ifndef _KMatrix_h

#define _KMatrix_h

#include <math.h>

#include <stdio.h>

//#include "KVector.h"

class KMatrix

{

public:

KMatrix(int _RowCount, int _ColCount);

~KMatrix();

// функции формирования матрицы

void NewMatrix(int _RowCount, int _ColCount);    // сформировать новую матрицу

void DeleteMatrix(); // очистить данные

void ResizeMatrix(int _RowCount, int _ColCount); // изменить размерность матрицы

bool created;                                    // создана ли матрица

// для работы с матрицами

void MatCpy(KMatrix *M1,KMatrix *M2);  // копировать матрицу M2 в M1

// описание матрицы тензора

unsigned int RowCount, ColCount;    // количество строк/столбцов

double **Data;             // указатель на ДАННЫЕ МАТРИЦЫ

// стандартные функции преобразования

void NullMatrix();         // обнуление матрицы

void OneMatrix();          // преобразование к единичной матрице

void ThreeDiagonal();      // преобразование к 3-х диагональной матрице

void Transponir();         // транспонировать матрицу

void MulToScal(double D);  // умножить каждый элемент на число

// функции с одним матричным аргументом

double NormMatr();         // норма матрицы(модуль вектора)

double DetMat3(int &err);  // определитель матрицы 3х3

int checkOrt3(int &err);   // проверка ортогональности

// операторы