?? resultdlg.cpp
字號:
// ResultDlg.cpp : implementation file
//
#include "stdafx.h"
#include "ProGram2.h"
#include "ResultDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CResultDlg dialog
CResultDlg::CResultDlg(CWnd* pParent /*=NULL*/)
: CDialog(CResultDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CResultDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CResultDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CResultDlg)
DDX_Control(pDX, IDC_LIST1, m_List1);
//}}AFX_DATA_MAP
}
BOOL CResultDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_List1.AddString(" ");
m_List1.AddString("==============================================================分析結果=========================================================");
m_List1.AddString(" ");
m_List1.AddString(" ");
CString black=" ";//矩陣距離左邊的距離
///
///
///顯示測試
/* // TODO: Add extra initialization here
m_List1.AddString("--------------------結果顯示窗口測試---------------");
m_List1.AddString(" ");
m_List1.AddString("_____________________________________________________");
m_List1.AddString(" . \t 454545 4545");
m_List1.AddString(" . 11 11");
m_List1.AddString(" . 22 22");
m_List1.AddString(" . ");
m_List1.AddString(" . ");
m_List1.AddString(" . ");
m_List1.AddString(" . ");
m_List1.AddString(" . ");
m_List1.AddString("____________________________________________________");
MatrixOut(m_Matrix[m_matrixNum-1],black);
MatrixOut(m_Matrix[m_matrixNum-1],black);*/
//for(int i=1;i<=m_matrixNum;i++)
//{
// MatrixOut(m_Matrix[i-1]," ");
//}
//////////////////////////////////////
///
///結果輸出
if(m_resultkind==1)
{//主成分分析結果輸出
m_List1.AddString("標準化樣本數據:");
MatrixOut(m_Matrix[0],black);
m_List1.AddString(" ");
CString s;
s.Format("前%d個主成分的特征根、貢獻率和累積貢獻率:",m_J[1]);
m_List1.AddString(s);
m_List1.AddString("(第一行為特征根,第二行為貢獻率,第三行為累積貢獻率)");
MatrixOut(m_Matrix[1],black);
m_List1.AddString(" ");
s.Format("前%d個主成分的特征間量(各行對應一個指標):",m_J[1]);
m_List1.AddString(s);
MatrixOut(m_Matrix[2],black);
m_List1.AddString(" ");
m_List1.AddString("因子載荷陣(行對應指標,列對應主成分):");
MatrixOut(m_Matrix[4],black);
m_List1.AddString(" ");
s.Format("樣本的前%d個主成分得分值:",m_J[1]);
m_List1.AddString(s);
MatrixOut(m_Matrix[3],black);
}
else if(m_resultkind==2)
{//對應分析結果輸出
CMatrix a(m_Matrix[0]);
CString s;
s.Format("%d個樣本的主成分得分值:",a.GetNumRows());
m_List1.AddString(s);
MatrixOut(m_Matrix[0],black);
m_List1.AddString(" ");
a=m_Matrix[1];
s.Format(" R型因子載荷陣:");
m_List1.AddString(s);
MatrixOut(m_Matrix[1],black);
m_List1.AddString(" ");
a=m_Matrix[2];
s.Format("%d個性狀的主成分得分:",a.GetNumRows());
m_List1.AddString(s);
MatrixOut(m_Matrix[2],black);
m_List1.AddString(" ");
a=m_Matrix[3];
s.Format(" Q型因子載荷陣:",a.GetNumRows());
m_List1.AddString(s);
MatrixOut(m_Matrix[3],black);
m_List1.AddString(" ");
}
else if(m_resultkind==3)
{//因子分析結果輸出
if(m_J[0])
{
m_List1.AddString("標準化矩陣:");
MatrixOut(m_Matrix[0],black);
}
if(m_J[1])
{
m_List1.AddString(" ");
m_List1.AddString("相關矩陣:");
MatrixOut(m_Matrix[1],black);
}
if(m_J[2])
{
m_List1.AddString(" ");
m_List1.AddString("特征值與特征矩陣(第一行為特征根,其后為相應特征向量):");
MatrixOut(m_Matrix[2],black);
}
if(m_J[3])
{
m_List1.AddString(" ");
m_List1.AddString("因子載荷陣:");
MatrixOut(m_Matrix[3],black);
}
m_List1.AddString(" ");
m_List1.AddString("因子模型:");
CMatrix a(m_Matrix[4]);
if(a.GetNumCols()>8)
MatrixOut(m_Matrix[4],black,1,false);
else
MatrixOut(m_Matrix[4],black,1,true);
if(m_J[5])
{
m_List1.AddString(" ");
m_List1.AddString("旋轉后的主因子載荷陣:");
MatrixOut(m_Matrix[5],black);
}
m_List1.AddString(" ");
m_List1.AddString("因子得分(行對應因子):");
MatrixOut(m_Matrix[6],black);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BEGIN_MESSAGE_MAP(CResultDlg, CDialog)
//{{AFX_MSG_MAP(CResultDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CResultDlg message handlers
void CResultDlg::TranMemberNumber(int resultkind, CMatrix Matrix[], int matrixNum,int J[])
{
m_resultkind=resultkind;
m_matrixNum=matrixNum;
m_Matrix=new CMatrix[m_matrixNum];
m_Matrix=Matrix;
m_J=J;
}
///
///
///接下來是兩個重載函數,第一個輸出一般矩陣,第二個輸出、、、
void CResultDlg::MatrixOut(CMatrix matrix,CString black)
{
if(matrix==NULL)
{
MessageBox("空矩陣");
return;
}
int n=matrix.GetNumRows(),p=matrix.GetNumCols();
int i,j;
if(matrix.GetNumCols()>8)
{
CMatrix matrix1(n,8);
CMatrix matrix2(n,p-8);
for(i=0;i<n;i++)
{
for(j=0;j<8;j++)
{
matrix1.SetElement(i,j,matrix.GetElement(i,j));
}
for(j=0;j<p-8;j++)
{
matrix2.SetElement(i,j,matrix.GetElement(i,8+j));
}
}
MatrixOut(matrix1,black);
MatrixOut(matrix2,black);
}
else
{
//black為矩陣距離左邊的距離
CString s,member,t=" ";//t為矩陣中數據之間的距離
s=black;
for(i=0;i<=p+1;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);//輸出矩陣前面的橫線
for(i=0;i<n;i++)
{
s=black+black;
for(j=0;j<p;j++)
{
member.Format("%f",(double)matrix.GetElement(i,j));// 取矩陣元素
s=s+member;
s=s+t;
}
m_List1.AddString(s);
}
s=black;
for(i=0;i<=p+1;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);//輸出矩陣后面的橫線
m_List1.AddString(" ");
}
}
void CResultDlg::MatrixOut(CMatrix matrix, CString black, int matrixNum, bool isLastMatrix)
{
int i,j;
if(matrix.GetNumCols()==9)
{
CString s,member,t=" ";
s=black;
for(i=0;i<=9;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
s=black+black;
for(i=1;i<8;i++)
{
member.Format("因子%d",(matrixNum-1)*8+i);
s=s+member;
s=s+t+t;
}
s=s+"共同度";
m_List1.AddString(s);
for(i=0;i<matrix.GetNumRows();i++)
{
s=black+black;
for(j=0;j<8;j++)
{
member.Format("%f",(double)matrix.GetElement(i,j));
s=s+member;
s=s+t;
}
m_List1.AddString(s);
}
s=black;
for(i=0;i<=9;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
s=black;
for(i=0;i<=2;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
s=black+black;
s=s+"特殊方差";
m_List1.AddString(s);
for(i=0;i<matrix.GetNumCols();i++)
{
s=black+black;
member.Format("%f",(double)matrix.GetElement(i,8));
s=s+member;
s=s+t;
m_List1.AddString(s);
}
s=black;
for(i=0;i<=2;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
}
else if(matrix.GetNumCols()<=8 && isLastMatrix==true)
{
CString s,member,t=" ";
int i,j;
int n=matrix.GetNumRows();
int p=matrix.GetNumCols();
s=black;
for(i=0;i<p+1;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
s=black+black;
for(i=0;i<p-2;i++)
{
member.Format("因子%d",(matrixNum-1)*8+i+1);
s=s+member;
s=s+t+t;
}
s=s+"共同度";
s=s+t+t;
s=s+"特殊方差";
m_List1.AddString(s);
for(i=0;i<n;i++)
{
s=black+black;
for(j=0;j<p;j++)
{
member.Format("%f",(double)matrix.GetElement(i,j));
s=s+member;
s=s+t;
}
m_List1.AddString(s);
}
s=black;
for(i=0;i<p+1;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
}
else if(matrix.GetNumCols()>8)
{
CString s,member,t=" ";
int i,j;
int n=matrix.GetNumRows();
int p=matrix.GetNumCols();
CMatrix matrixA(n,p-8);
for(i=0;i<n;i++)
{
for(j=8;j<p;j++)
{
matrixA.SetElement(i,j-8,matrix.GetElement(i,j));//將第8列后面的值放在另一個矩陣中
}
}
//輸出前8列;
s=black;
for(i=0;i<=9;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
s=black+black;
for(i=1;i<=8;i++)
{
member.Format("因子%d",(matrixNum-1)*8+i);
s=s+member;
s=s+t+t;
}
m_List1.AddString(s);
for(i=0;i<8;i++)
{
s=black+black;
for(j=0;j<8;j++)
{
member.Format("%f",(double)matrix.GetElement(i,j));
s=s+member;
s=s+t;
}
m_List1.AddString(s);
}
s=black;
for(i=0;i<=9;i++)
s=s+"~~~~~~~~~~~";
m_List1.AddString(s);
if(matrixA.GetNumCols()>8)
MatrixOut(matrixA,black,matrixNum+1, false);
else
MatrixOut(matrixA,black,matrixNum+1, true);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -