📄 ca2dlg.cpp
字号:
// CA2Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "CA2.h"
#include "CA2Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCA2Dlg dialog
CCA2Dlg::CCA2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CCA2Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCA2Dlg)
m_yk = 0;
m_ADD = 0;
m_bk = _T("");
m_bz = _T("");
m_q = 0;
m_z = 0;
m_xl = _T("");
m_tao = _T("");
number=0;
m_d = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
//m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
//m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
}
void CCA2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCA2Dlg)
DDX_Text(pDX, IDC_EDITK, m_yk);
DDX_Text(pDX, IDC_EDITADD, m_ADD);
DDX_Text(pDX, IDC_EDITBK, m_bk);
DDX_Text(pDX, IDC_EDITBZ, m_bz);
DDX_Text(pDX, IDC_EDITQ, m_q);
DDX_Text(pDX, IDC_EDITZ, m_z);
DDX_Text(pDX, IDC_EDITX, m_xl);
DDX_Text(pDX, IDC_EDITT, m_tao);
DDX_Text(pDX, IDC_EDIT8, m_d);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCA2Dlg, CDialog)
//{{AFX_MSG_MAP(CCA2Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_FIFO, OnFifo)
ON_BN_CLICKED(IDC_BUTTONF, OnButtonf)
ON_BN_CLICKED(IDC_BUTTONC, OnButtonc)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_LRU, OnLru)
ON_BN_CLICKED(IDC_OPT, OnOpt)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCA2Dlg message handlers
BOOL CCA2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CCA2Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CCA2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CCA2Dlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CCA2Dlg::OnFifo()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0,dx[10];
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
f=1;
break;
}
if(f==0)
{
nc[have]=xl[i];
have++;
qy++;
}
}
for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
f=1;
break;
}
if(f==0)
{
ttx[tt]=nc[ttw];
nc[ttw]=xl[i];
ttw=(ttw+1)%m_yk;
tt++;
qy++;
}
}
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
m_tao+=" ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*
m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
m_bk=m_ksb;
m_bz=m_zh;
UpdateData(false);
}
/*
void CCA2Dlg::ChuS()
{
m_yk = 0;
m_ADD = 0;
m_bk = _T("");
m_bz = _T("");
m_q = 0;
m_z = 0;
m_xl = _T("");
m_tao = _T("");
}*/
void CCA2Dlg::OnButtonf()
{
// TODO: Add your control notification handler code here
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
UpdateData(false);
}
void CCA2Dlg::OnButtonc()
{
// TODO: Add your control notification handler code here
number=0;
m_tao="";
m_bk="";
m_bz="";
m_xl="";
UpdateData(false);
}
void CCA2Dlg::OnAdd()
{
// TODO: Add your control notification handler code here
UpdateData(true);
xl[number]=m_ADD;
// xl[number]=50;
//number=20;
number++;
//m_q=number;
//m_xl+="1 "+m_ADD;
m_xl+=" ";
if(m_ADD>=10)
{
m_xl+=m_ADD/10+48;
m_xl+=m_ADD%10+48;
}
else
m_xl+=m_ADD+48;
UpdateData(false);
UpdateData(true);
//UpdateData(true);
}
/*
Bool CCA2Dlg::find()
{
}
*/
/*int CCA2Dlg::find()
{
return 0;
}*/
void CCA2Dlg::OnLru()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0,k,p=0,k1;
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
f=1;
k=j;
break;
}
if(f==0)
{
nc[have]=xl[i];
have++;
qy++;
}
else
{
k1=nc[k];
for(p=k;p<have-1;p++)
nc[p]=nc[p+1];
nc[have-1]=k1;
}
}
for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
f=1;
k=j;
break;
}
if(f==0)
{
ttx[tt]=nc[0];
for(p=0;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=xl[i];
tt++;
qy++;
}
else
{
k1=nc[k];
for(p=k;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=k1;
}
}
//m_q=nc[0];
/*
for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
f=1;
k=j;
break;
}
if(f==0)
{
ttx[tt]=nc[0];
for(p=0;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=m_xl[i];
tt++;
qy++;
}
else
{
k1=nc[k];
for(p=k;p<m_yk-1;p++)
nc[p]=nc[p+1];
nc[m_yk-1]=k1;
}
}
*/
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
m_tao+=" ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*
m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
//m_bk=m_ksb;
//m_bz=m_zh;
UpdateData(false);
}
void CCA2Dlg::OnOpt()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int i=0,qy=0,tt=0,ttx[50],nc[10],f=0,j=0,ttw=0,have=0,dx[10],p,max,q,k;
for(p=0;p<10;p++)
dx[p]=50;
for(i=0;have<m_yk;i++)
{
f=0;
for(j=0;j<have;j++)
if(xl[i]==nc[j])
{
f=1;
k=j;
break;
}
if(f==0)
{
nc[have]=xl[i];
for(p=i+1;p<number;p++)
if(xl[i]==xl[p])
{
dx[have]=p;
break;
}
if(p==number)
dx[have]=50;
have++;
qy++;
}
else
{
for(p=i+1;p<number;p++)
if(xl[i]==xl[p])
{
dx[k]=p;
break;
}
if(p==number)
dx[k]=50;
}
}
for(;i<number;i++)
{
f=0;
for(j=0;j<m_yk;j++)
if(xl[i]==nc[j])
{
f=1;
k=j;
break;
}
if(f==0)
{
max=0;
for(p=0;p<m_yk;p++)
if(dx[max]<dx[p])
max=p;
ttx[tt]=nc[max];
nc[max]=xl[i];
for(q=i+1;q<number;q++)
if(xl[i]==xl[q])
{
dx[max]=q;
break;
}
if(q==number)
dx[max]=50;
tt++;
qy++;
}
else
{
for(q=i+1;q<number;q++)
if(xl[i]==xl[q])
{
dx[k]=q;
break;
}
if(q==number)
dx[k]=50;
}
m_d="";
for(p=0;p<m_yk;p++)
{
m_d+=" ";
if(dx[p]>=10)
{
m_d+=dx[p]/10+48;
m_d+=dx[p]%10+48;
}
else
m_d+=48+dx[p];
}
UpdateData(false);
}
m_q=qy;
m_tao="";
for(i=0;i<tt;i++)
{
m_tao+=" ";
if(ttx[i]>=10)
{
m_tao+=48+ttx[i]/10;
m_tao+=48+ttx[i]%10;
}
else
m_tao+=48+ttx[i];
}
m_z=tt;
/*
m_zh="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
m_ksb="不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bk= "不同的物理块数,一般是物理块越多缺页次数和页面置换次数越多,因为它要进行频繁的换入换出";
m_bz="不同的置换算法OPT的缺页次数和页面置换次数最少,因为它是理想的方式,FIFO的最多,因为他没有考虑程序运行的特点";
*/
m_bk=m_ksb;
m_bz=m_zh;
UpdateData(false);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -