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); // проверка ортогональности
// операторы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.