| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2760 人关注过本帖
标题:页面置换算法FIFO,LRU的编程思想。。。
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
你贴了那么多遍,为什么自己不回头看一看贴出来的代码,看得下去吗?是不是你自己很习惯看这样的代码?我连你main()那一行在哪都看不到。

授人以渔,不授人以鱼。
2013-04-30 11:11
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 11楼 TonyDeng
???

我前面贴的是有错误的,我改了以后就又贴上了一遍

main()确实有错误,我就是看不出错误,检查了括号也没问题。

你说的,什么看不出?  我不太明白
2013-04-30 11:28
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
程序代码:
#include<iostream.h> 
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define  L  20//页面走向长度最大为20

 int M; //内存块 
struct Pro//定义一个结构体
 {    int num,time; }; 

 Input(int m,Pro p[L])//打印页面走向状态 
{   cout<<"请输入实际页走向长度L(15<=L<=20):";  
   do     {   cin>>m;        
               if(m>20||m<15)cout<<"实际页长度须在15~20之间;请重新输入L: ";         
else break;    

 }while(1);    

 int i,j;   
  j=time(NULL);//取时钟时间    
 srand(j);//以时钟时间x为种子,初始化随机数发生器
  cout<<"输出随机数:  ";       

 for(i=0;i<m;i++)    

 { p[i].num=rand( )%10+1;// 1到10之间的随即数放到数组p中       
  p[i].time=0;  

 cout<<p[i].num<<" ";     }     
cout<<endl;    

 return m; } 
void print(Pro *page1)//打印当前的页面 
{   Pro *page=new Pro[M];    

 page=page1;    

 for(int i=0;i<M;i++)  
   cout<<page[i].num<<" ";   
  cout<<endl; } 
int  Search(int e,Pro *page1  )//寻找内存块中与e相同的块号
{   Pro *page=new Pro[M];  
   page=page1;    

 for(int i=0;i<M;i++)if(e==page[i].num)return i;//返回i值    
 return -1; } 
int Max(Pro *page1)//寻找最近最长未使用的页面
 {   Pro *page=new Pro[M];   
  page=page1;    

 int e=page[0].time,i=0;   
  while(i<M)                //找出离现在时间最长的页面    
 {   if(e<page[i].time)  e=page[i].time;      
   i++;     }    

 for( i=0;i<M;i++)if(e==page[i].time)return i;//找到离现在时间最长的页面返回其块号  
   return -1; }

 int Count(Pro *page1,int i,int t,Pro p[L])//记录当前内存块中页面离下次使用间隔长度 
{   Pro *page=new Pro[M];   
  page=page1;   
  int count=0;    

 for(int j=i;j<L;j++)   
  {   if(page[t].num==p[j].num )break;//当前页面再次被访问时循环结束       
  else count++;//否则count+1     }  
   return count;//返回count的值 } 
int main() 
{   int c;   
  int m=0,t=0; 

 float n=0;  
Pro p[L];   
  m=Input(m,p);//调用input函数,返回m值    
 cout<<"请输入可用内存页面数m(3~5): ";    

 do  
{  cin>>M;  

 if(M>5||M<3)  

 cout<<"内存块m须在3~5之间,请重新输入m: ";   

 else
  break; 

 }while(1);       
  Pro *page=new Pro[M];     
do{ 
    for(int i=0;i<M;i++)//初始化页面基本情况      
   {   page[i].num=0;        
     page[i].time=m-1-i;         }    
     i=0;               
  cout<<"1:FIFO页面置换"<<endl;       
  cout<<"2:LRU页面置换"<<endl;      
  cout<<"按其它键结束程序;"<<endl;      
   cin>>c;      
   system("cls");      
   if(c==1)//FIFO页面置换      
   {  n=0;  

 cout<<"      ******************************************       "<<endl;        

 cout<<"              FIFO算法页面置换情况如下:           "<<endl;   

 cout<<"      ******************************************      "<<endl;            

 while(i<m)           
  { 
     if(Search(p[i].num,page)>=0)  //当前页面在内存中   
  {  cout<<p[i].num<<"  "; //输出当前页p[i].num    
  cout<<"不缺页"<<endl;   
   i++;         //i加1     
     }      
  else                       //当前页不在内存中              
   {   if(t==M)
         t=0;                    
       else                   
       {  n++;                      //缺页次数加1                   
   page[t].num=p[i].num;//把当前页面放入内存中     
 cout<<p[i].num<<"  ";                     
    print(page);            //打印当前页面 
                t++;                    //下一个内存块     
  i++;                //指向下一个页面                   
  }             
    }            

 }           
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;           
     }        

 if(c==2)//LRU页面置换  
 {   n=0;      
cout<<"   ******************************************      "<<endl;   
cout<<"              LRU算法页面置换情况如下:           "<<endl;    
cout<<"     ******************************************     "<<endl;        

 while(i<m)   {            

 int a;             
t=Search(p[i].num,page);          
   if(t>=0)//如果已在内存块中    
 { page[t].time=0;//把与它相同的内存块的时间置0   
  for(a=0;a<M;a++)   
  if(a!=t)page[a].time++;//其它的时间加1    
 cout<<p[i].num<<"  ";   

 cout<<"不缺页"<<endl;    }        
     else                  //如果不在内存块中          
   {   n++;           //缺页次数加1              
   t=Max(page);  //返回最近最久未使用的块号赋值给t               
  page[t].num=p[i].num;         //进行替换              
   page[t].time=0;               //替换后时间置为0    
  cout<<p[i].num<<"  ";   
  print(page);   
  for(a=0;a<M;a++)   
  if(a!=t)
      page[a].time++;         //其它的时间加1           
  }     

 i++;   

 }       
  cout<<"缺页次数:"<<n<<"    缺页率:"<<n/m<<endl;   

 } 

 }while(c==1||c==2||c==3);            
return 0; 
} //
2013-04-30 11:31
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 11楼 TonyDeng
现在好了吧?- -

一着急忘了
我以前都不用那个贴代码的格式。。。刚用了,贴了,你看这回呢。。
2013-04-30 11:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己看看main()上面那个函数的花括号,for()中有if(),花括号匹配吗?这个函数把main()包到了里面,不报告main()定义非法才怪。
在你自己的编辑器上看也是排成这样的吗?排版排成这样,连基本的语法检查也找不到错误所在,活该了。

授人以渔,不授人以鱼。
2013-04-30 11:38
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 15楼 TonyDeng
嗯,是  傻了

thank you
2013-04-30 11:43
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
很像书上的例子代码 而且

#include<iostream.h>

这个不是都抛弃了么 现在用的都是不带h的了 这个带h的有的编译器都不支持了。。
2013-04-30 11:44
米小兔
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-7-14
收藏
得分:0 
回复 17楼 zklhp
不带.h?
可是我们老师讲的都是带.h啊
不带.h 用VC++6.0 能通过吗?
没见啊
2013-04-30 11:53
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用米小兔在2013-4-30 11:53:36的发言:

不带.h?
可是我们老师讲的都是带.h啊
不带.h 用VC++6.0 能通过吗?
没见啊

你查查资料就知道了 我这个没学过C++的都知道 带.h的是旧的标准 只有老的编译器还支持 好像高版本VC也不支持了。。
2013-04-30 12:04
孤寂的小菜
Rank: 2
等 级:论坛游民
帖 子:26
专家分:45
注 册:2013-4-30
收藏
得分:7 
看算法慢慢来,初学就搞这么长代码能不头痛吗
2013-04-30 19:06
快速回复:页面置换算法FIFO,LRU的编程思想。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024991 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved