切换到宽版
  • 2331阅读
  • 3回复

[已解决]请教这段代码 [复制链接]

上一主题 下一主题
离线scode

UID: 568920

 
发帖
431
金币
12
道行
168
原创
0
奖券
1
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 113(小时)
注册时间: 2008-10-30
最后登录: 2018-01-17
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-01-07
— 本帖被 兵马大元帅 执行加亮操作(2015-12-05) —
请问这段代码的意思:
#include<iostream.h>
#define  M  40
int N;
struct Pro
{
    int num,time;
};
int Input(int m,Pro p[M])
{  
    cout<<"请输入实际页数:";
    do
    {
        cin>>m;
        if(m>M)cout<<"数目太多,请重试"<<endl;
        else break;
    }while(1);
    cout<<endl<<"请输入各页面号"<<endl;
       for(int i=0;i<m;i++)
    {
        cin>>p.num;
        p.time=0;
    }
    return m;
}

void print(Pro *page1)//打印当前的页面
{
    Pro *page=new Pro[N];
    page=page1;
    for(int i=0;i<N;i++)cout<<page.num<<"  ";
    cout<<endl;
}


int Search(int e,Pro *page1)
{   Pro *page=new Pro[N];
    page=page1;
    for(int i=0;i<N;i++)if(e==page.num)return i;
    return -1;
}

int Max(Pro *page1)                                            
{
    Pro *page=new Pro[N];
    page=page1;
    int e=page[0].time,i=0;
    while(i<N)               //找出离现在时间最长的页面
    {
        if(e<page.time)e=page.time;
        i++;
    }
    for( i=0;i<N;i++)if(e==page.time)return i;
    
    return -1;
}

int Compfu(Pro *page1,int i,int t,Pro p[M])
{
    Pro *page=new Pro[N];
    page=page1;
    
    int count=0;
    for(int j=i;j<M;j++)
    {
        if(page[t].num==p[j].num )break;
        else count++;
    }
    return count;
    
}

int main()
{
    
    cout<<"可用内存页面数"<<endl;
    cin>>N;    
    Pro p[M];
    Pro *page=new Pro[N];
    char c;
    int m=0,t=0;
    float n=0;
    m=Input(m,p);    
    
    do{
        
        for(int i=0;i<N;i++)//初试化页面基本情况
        {
            page.num=0;
            page.time=2-i;
        }
        int k=1,j=0,count=1;
        page[0].num=p[0].num;
           i=1;
        while(i<N)
        {
        int flag=1;
        for(j=0;j<i;j++)
        if(p[k].num==page.num)
        {n++;flag=0;break;}
        if(flag==1){page.num=p[k].num;i++;}
        count++;k++;
    }
        i=0;        
        cout<<"f:FIFO页面置换"<<endl;
        cout<<"l:LRU页面置换"<<endl;
        cout<<"o:OPT页面置换"<<endl;
        cout<<"按其它键结束"<<endl;
        cin>>c;
        
        if(c=='f')//FIFO页面置换
        {
            n=0;
            cout<<"页面置换情况:   "<<endl;
            while(i<m)
            {
                if(Search(p.num,page)>=0)i++;//找到相同的页面
                else
                {  
                    if(t==N)t=0;
                    else
                    {
                        n++;//
                        page[t].num=p.num;
                        print(page);
                        t++;
                    }
                }
            }
            cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;      
            
        }
        if(c=='l')//LRU页面置换
        {    n=0;
        cout<<"页面置换情况:   "<<endl;
        while(i<m)
        {    
            int k;
            k=t=Search(p.num,page);
            if(t>=0)
                
                page[t].time=0;
            
            
            else
            {  
                n++;
                t=Max(page);
                
                page[t].num=p.num;
                page[t].time=0;
            }
            if(t==0){page[t+1].time++;page[t+2].time++;}
            if(t==1){page[2].time++;page[0].time++;}
            if(t==2){page[1].time++;page[0].time++;}
            if(k==-1)   print(page);                
            i++;
        }
        cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;
        }
        if(c=='o')//OPT页面置换
        {
            n=0;
            while(i<m)
            {
                if(Search(p.num,page)>=0)i++;
                else
                {
                    int temp=0,cn;
                    for(t=0;t<N;t++)
                    {
                        if(temp<Compfu(page,i,t,p))
                        {
                            temp=Compfu(page,i,t,p);
                            cn=t;
                        }
                    }
                    page[cn]=p;
                    n++;
                    print(page);
                    i++;
                }
            }
            cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;
        }
        
    }while(c=='f'||c=='l'||c=='o');
    
    
    
    return 0;
}
谢谢!
山庄提示: 道行不够,道券不够?---☆点此充值☆
 
离线gonghugen

UID: 210150


发帖
38719
金币
179815
道行
10002
原创
3
奖券
3122
斑龄
152
道券
2221
获奖
0
座驾
设备
HP Photosmart M425
摄影级
在线时间: 38025(小时)
注册时间: 2007-05-28
最后登录: 2020-11-05
只看该作者 沙发  发表于: 2009-01-07
引用楼主scode于2009-01-07 11:37发表的 请教这段代码 :
请问这段代码的意思:
#include<iostream.h>
#define  M  40
int N;
struct Pro
.......

楼主说的不对,这个不是代码的问题;这是一个关于页面选择操作的程序。
如何不发帖就快速得到金币道行
 
离线平顶山
山庄原创厅副主管

UID: 111

精华: 77
职务: 名誉总管
级别: 天外仙宗

发帖
13567
金币
203058
道行
10037
原创
326
奖券
2783
斑龄
52
道券
55
获奖
0
座驾
设备
摄影级
在线时间: 9206(小时)
注册时间: 2008-10-13
最后登录: 2023-12-27
只看该作者 板凳  发表于: 2009-01-08
太高深了,确实搞不清楚啊
如何不发帖就快速得到金币道行
 
离线jiangxilg

UID: 503612

发帖
75
金币
44
道行
6
原创
0
奖券
0
斑龄
0
道券
0
获奖
0
座驾
设备
摄影级
在线时间: 8(小时)
注册时间: 2008-08-02
最后登录: 2012-10-06
只看该作者 地板  发表于: 2009-01-09
用户被禁言,该主题自动屏蔽!
如何不发帖就快速得到金币道行