?? matrixop.cpp
字號:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "MatrixOp.h"
#include "MatrixOP_Assign.h"
#include "MatrixOP_Tranfer.h"
#include "reset.h"
//---------------------------------------------------------------------------
#pragma link "Grids"
#pragma resource "*.dfm"
Tfrm_MatrixOp *frm_MatrixOp;
//---------------------------------------------------------------------------
__fastcall Tfrm_MatrixOp::Tfrm_MatrixOp(TComponent* Owner)
: TForm(Owner)
{
fMatA = new TMatrix(ROWCOUNT,COLCOUNT);
fMatB = new TMatrix(ROWCOUNT,COLCOUNT);
fMatC = new TMatrix(ROWCOUNT,COLCOUNT);
// glb_SetGrid(fMatA,sg_A);
// glb_SetGrid(fMatB,sg_B);
// glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::FormDestroy(TObject *Sender)
{
delete fMatA;
delete fMatB;
delete fMatC;
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_AResetClick(TObject *Sender)
{
frm_reset->fRowCount = fMatA->GetRowCount();
frm_reset->fColCount = fMatA->GetColCount();
if (frm_reset->ShowModal() == mrOk) {
fMatA->Reset(frm_reset->fRowCount,frm_reset->fColCount);
glb_SetGrid(fMatA,sg_A);
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_BResetClick(TObject *Sender)
{
frm_reset->fRowCount = fMatB->GetRowCount();
frm_reset->fColCount = fMatB->GetColCount();
if (frm_reset->ShowModal() == mrOk) {
fMatB->Reset(frm_reset->fRowCount,frm_reset->fColCount);
glb_SetGrid(fMatB,sg_B);
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_plusClick(TObject *Sender)
{
if (fMatA->GetRowCount() != fMatB->GetRowCount() || fMatA->GetColCount() != fMatB->GetColCount()) {
glb_UserInfo("A和B的維數(shù)不相等,不能相加!");
return;
}
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (!glb_GetData(fMatB,sg_B,"B"))
return;
delete fMatC;
fMatC = new TMatrix(fMatA->GetRowCount(),fMatA->GetColCount());
*fMatC = *fMatA + *fMatB;
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_minusClick(TObject *Sender)
{
if (fMatA->GetRowCount() != fMatB->GetRowCount() || fMatA->GetColCount() != fMatB->GetColCount()) {
glb_UserInfo("A和B的維數(shù)不相等,不能相減!");
return;
}
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (!glb_GetData(fMatB,sg_B,"B"))
return;
delete fMatC;
fMatC = new TMatrix(fMatA->GetRowCount(),fMatA->GetColCount());
*fMatC = *fMatA - *fMatB;
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_timesClick(TObject *Sender)
{
if (fMatA->GetColCount() != fMatB->GetRowCount()) {
glb_UserInfo("A的列數(shù)和B的行數(shù)不相等,不能相乘!");
return;
}
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (!glb_GetData(fMatB,sg_B,"B"))
return;
delete fMatC;
fMatC = new TMatrix(fMatA->GetRowCount(),fMatB->GetColCount());
*fMatC = *fMatA * *fMatB;
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_inverseClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (fMatA->GetColCount() != fMatA->GetRowCount()) {
glb_UserInfo("A的列數(shù)和行數(shù)不相等,不能計算逆!");
return;
}
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (!glb_GetData(fMatB,sg_B,"B"))
return;
delete fMatC;
fMatC = new TMatrix(fMatA->GetRowCount(),fMatA->GetColCount());
try {
*fMatC = *fMatA^-1;
}
catch (...) {
glb_UserInfo("A不滿秩,不能計算逆!");
return;
}
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_turnClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
try {
delete fMatC;
fMatC = new TMatrix(fMatA->GetColCount(),fMatA->GetRowCount());
*fMatC = ~*fMatA;
}
catch (...) {
glb_UserInfo("操作失敗!");
return;
}
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_ladderClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
try {
delete fMatC;
fMatC = new TMatrix(fMatA->GetRowCount(),fMatA->GetColCount());
*fMatC = *fMatA;
fMatC->Ladder();
}
catch (...) {
glb_UserInfo("操作失敗!");
return;
}
glb_SetGrid(fMatC,sg_C);
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_rankClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
glb_UserInfo("矩陣A的秩為'"+IntToStr(fMatA->Rank())+"'");
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_assignClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (!glb_GetData(fMatB,sg_B,"B"))
return;
if (!glb_GetData(fMatC,sg_C,"C"))
return;
if (frm_MatrixOP_Assign->ShowModal()==mrOk) {
int i1 =frm_MatrixOP_Assign->CB1->ItemIndex;
int i2 =frm_MatrixOP_Assign->CB2->ItemIndex;
if (i1==i2)
return;
//注意,這里使用了指針的指針
TMatrix** tA = (TMatrix**)frm_MatrixOP_Assign->CB1->Items->Objects[i1];
TMatrix** tB = (TMatrix**)frm_MatrixOP_Assign->CB2->Items->Objects[i2];
delete *tA;
*tA = new TMatrix((*tB)->GetRowCount(),(*tB)->GetColCount());
**tA = **tB;
if (i1 == 0)
glb_SetGrid(fMatA,sg_A);
else if(i1 == 1)
glb_SetGrid(fMatB,sg_B);
else if(i1 == 2)
glb_SetGrid(fMatC,sg_C);
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_tranferClick(TObject *Sender)
{
//先取得數(shù)據(jù)
if (!glb_GetData(fMatA,sg_A,"A"))
return;
if (frm_MatrixOp_Tranfer->rb_row->Checked && frm_MatrixOp_Tranfer->Count != fMatA->GetRowCount())
frm_MatrixOp_Tranfer->rb_rowClick(frm_MatrixOp_Tranfer->rb_row);
else if (!frm_MatrixOp_Tranfer->rb_row->Checked && frm_MatrixOp_Tranfer->Count != fMatA->GetColCount())
frm_MatrixOp_Tranfer->rb_rowClick(frm_MatrixOp_Tranfer->rb_col);
if (frm_MatrixOp_Tranfer->ShowModal()==mrOk) {
//某行(列)乘于n倍
if (frm_MatrixOp_Tranfer->RB1->Checked) {
if (frm_MatrixOp_Tranfer->rb_row->Checked)
fMatA->RScale(StrToInt(frm_MatrixOp_Tranfer->CB1->Text),frm_MatrixOp_Tranfer->fTimesNum);
else
fMatA->CScale(StrToInt(frm_MatrixOp_Tranfer->CB1->Text),frm_MatrixOp_Tranfer->fTimesNum);
}
//交換兩行(列)
if (frm_MatrixOp_Tranfer->RB2->Checked) {
if (frm_MatrixOp_Tranfer->rb_row->Checked)
fMatA->RExchange(StrToInt(frm_MatrixOp_Tranfer->CB2->Text),StrToInt(frm_MatrixOp_Tranfer->CB3->Text));
else
fMatA->CExchange(StrToInt(frm_MatrixOp_Tranfer->CB2->Text),StrToInt(frm_MatrixOp_Tranfer->CB3->Text));
}
//某行(列)加上另一行(列)的n倍
if (frm_MatrixOp_Tranfer->RB3->Checked) {
if (frm_MatrixOp_Tranfer->rb_row->Checked)
fMatA->RAddition(StrToInt(frm_MatrixOp_Tranfer->CB4->Text),StrToInt(frm_MatrixOp_Tranfer->CB5->Text),frm_MatrixOp_Tranfer->fPlusNum);
else
fMatA->CAddition(StrToInt(frm_MatrixOp_Tranfer->CB4->Text),StrToInt(frm_MatrixOp_Tranfer->CB5->Text),frm_MatrixOp_Tranfer->fPlusNum);
}
glb_SetGrid(fMatA,sg_A);
}
}
//---------------------------------------------------------------------------
void __fastcall Tfrm_MatrixOp::btn_closeClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -