大神们帮忙看看我这段代码哪里错了,运行不了啊,帮忙改正下,感谢!!!

2019-05-07 19:31发布

#include<stdio.h>

#include<iostream.h>

#include <stdlib.h>

#include<time.h>

//存放页地址流的数组

int pageNums[150]; 

//生成页地址流

void createPageAddr()

{

 srand((unsigned)time(0)); //以当前时间做随机种子

 int i,addr,pageN,count;

 count=0;

 i=0;

 while(i<150)  //每次循环,构造地址流的150个地址中的一个地址

 {

      if(count==0) {addr=(rand()%120+1)%120;pageN =addr/10;}

      //count=0表示,在[0, 119]的指令地址之间随机选取一起点M,顺序/执行一条指令(+1),即获得M+1的指令地址; pageNum为地址所在页号

 if(count==1) {addr=rand()%(addr+1);pageN=addr/10;}

      //count=1表示,在前地址[0, M+1]中随机选取一条指令并执行,该指令的地址为M;

      if(count==2) {pageN=((addr+1)%120)/10;}

 //顺序执行一一条指令,其地址为M+1; 

 

      if(count==3){pageN=(rand()%(120-(addr+2))+addr+2)%120/10;}

 //在后地址[M+2, 119]中随机选取一条指令并执行; /

      + +count;

      pageNums[i]=pageN;

      if(count==4){count=0;} //进入下一个4次循环,再分4步生成4个地址

      i++; 

 }                        

       //输出页地址流

      cout<<"页地址流(共150个虚存逻辑页地址):\n";

 for(i=0;i<150;i++) {cout<<pageNums[i]<<" ";}

 cout<<endl;

}

 

   struct aa{       //代表一个物理页的节点

 int page;  //物理页存放的虚存页号

 aa* next;  //指向下一物理页

};

   void main()

   {

      int i,m=4://4个物理页

      aa *head, *tail,*temp,*table;              //用于构建4个物理页的指针

      //构建4个节点的链表,表示4个物理页

      table=new(aa);                      //建 立第一一个物理页节点

 head=table;                 //链表头指针指向该节点

 table->page=-1;                //初值-1表示没有放置虚存页

 temp=table;                  //临时指针指向第一一个物理页

 for(i=2;i<=m;i++)                  //继续构建m-1个物理页

 table=new{aa);               //新建-一个物理页节点

      table->page=-1;

      temp->next=table;                   //前一 一个节点的next指向本节点,形成链表

 temp=table;                        //临时指针指向新建物理页节点

      if(i==m){table->next=NULL;}       //最后物理页节点next指针指向空

 }         

 

      tail=table;  //尾指针指向链表尾

 

      createPageAddr(); //生成页地址流

 

      //以下是LRU最近最少使用算法+

 

      int temp1;  //LRU算法中,temp1 临时保存物理页中命中的逻辑页号

 int answer; //LRU 算法中,页命中时(颇在内存) answer 置1

 int ffalse=0;  //LRU算法中,累加未命中次数+1

 

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

 {

       answer=0; //页命中时(页在内存) answer置1

  temp=head;  //临时指针指向链表头

  table=head;

       while(table!=NULL) //循环查找内存中的虚页号, 看是否页命中

  {

         if(table->page==pageNum[i]) {answer=1;temp=table;}

//页命中,answer 置1, temp指向命中的物理页节点

         table=table->next;

  }

       if(answer==1) //如果页命中

  {

         temp1=temp->page;  //temnp1临时保存物理页中命中的逻辑页号

while (temp!=NULL&&temp->next!=NULL) 

//所有比命中页位置低的页号上移一个位置

{ temp->page=temp->next->page;

           temp=temp->next;

}

        tail->page=temp1; //命中的烦放入最 下面的物理页

  }

      if(answer!=1) //如果页没有命中

 {

       ffalse=ffalse+1; //末命中次数+1

//淘汰第-一个物理页中的逻辑页号,其它逻辑页号上移一个位置

  temp=head;

       while (temp!=NULL&&temp->next!=NULL) 

  {

          temp->page=temp->next->page;

 temp=temp->next;

  }

    tail->page=pageNums[i]; //新的逻辑页(虚页)放入最下面的物理页

      }

      //---------------------------------------------------------------------------------------

//输出物理块中虚页地址本次变化情况:

if (i==0) cout<< "物理块中虚页地址变化情况:\n";

if (i<20)                                     //仅显示前20个变化,可自己调节输出数目

{

     for(aa*ti=head;ti!=NULL;ti=ti->next) cout<<ti->page<<"  ";

        cout<<endl;

}

 }

  //-------------------------------------------------------------------------------------

  double sum=1.0-ffalse/120.0;                         //计算命中率

  cout<<"未命中次数:"<<ffalse<<" "<<endl;

  cout<<"LRR算法命中率:"<<sum<<" "<<endl;

}


2条回答
匿名网友
1楼 · 2019-05-07 20:48.采纳回答

修改好的,你对比下

#include<stdio.h>

#include<iostream>

#include <stdlib.h>

#include<time.h>

//存放页地址流的数组

using namespace std;

int pageNums[150];

//生成页地址流

void createPageAddr()

{

  srand((unsigned)time(0)); //以当前时间做随机种子

  int i,addr,pageN,count;

  count=0;

  i=0;

  while(i<150)  //每次循环,构造地址流的150个地址中的一个地址

  {

    if(count==0)

    {

      addr=(rand()%120+1)%120;

      pageN =addr/10;

    }

    //count=0表示,在[0, 119]的指令地址之间随机选取一起点M,顺序/执行一条指令(+1),即获得M+1的指令地址; pageNum为地址所在页号

    if(count==1)

    {

      addr=rand()%(addr+1);

      pageN=addr/10;

    }

    //count=1表示,在前地址[0, M+1]中随机选取一条指令并执行,该指令的地址为M;

    if(count==2)

    {

      pageN=((addr+1)%120)/10;

    }

//顺序执行一一条指令,其地址为M+1;

    if(count==3)

    {

      pageN=(rand()%(120-(addr+2))+addr+2)%120/10;

    }

//在后地址[M+2, 119]中随机选取一条指令并执行; /

    + +count;

    pageNums[i]=pageN;

    if(count==4)

    {

      count=0;   //进入下一个4次循环,再分4步生成4个地址

    }

    i++;

  }

  //输出页地址流

  cout<<"页地址流(共150个虚存逻辑页地址):\n";

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

  {

    cout<<pageNums[i]<<" ";

  }

  cout<<endl;

}

struct aa        //代表一个物理页的节点

{

  int page;  //物理页存放的虚存页号

  aa* next;  //指向下一物理页

};

int main()

{

  int i,m=4;//4个物理页

  aa *head, *tail,*temp,*table;              //用于构建4个物理页的指针

  //构建4个节点的链表,表示4个物理页

  table=new(aa);                      //建 立第一一个物理页节点

  head=table;                 //链表头指针指向该节点

  table->page=-1;                //初值-1表示没有放置虚存页

  temp=table;                  //临时指针指向第一一个物理页

  for(i=2; i<=m; i++)                //继续构建m-1个物理页

  {

    table=new (aa);              //新建-一个物理页节点

    table->page=-1;

    temp->next=table;                   //前一 一个节点的next指向本节点,形成链表

    temp=table;                        //临时指针指向新建物理页节点

    if(i==m)

    {

      table->next=NULL;   //最后物理页节点next指针指向空

    }

  }

  tail=table;  //尾指针指向链表尾

  createPageAddr(); //生成页地址流

  //以下是LRU最近最少使用算法+

  int temp1;  //LRU算法中,temp1 临时保存物理页中命中的逻辑页号

  int answer; //LRU 算法中,页命中时(颇在内存) answer 置1

  int ffalse=0;  //LRU算法中,累加未命中次数+1

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

  {

    answer=0; //页命中时(页在内存) answer置1

    temp=head;  //临时指针指向链表头

    table=head;

    while(table!=NULL) //循环查找内存中的虚页号, 看是否页命中

    {

      if(table->page==pageNums[i])

      {

        answer=1;

        temp=table;

      }

//页命中,answer 置1, temp指向命中的物理页节点

      table=table->next;

    }

    if(answer==1) //如果页命中

    {

      temp1=temp->page;  //temnp1临时保存物理页中命中的逻辑页号

      while (temp!=NULL&&temp->next!=NULL)

//所有比命中页位置低的页号上移一个位置

      {

        temp->page=temp->next->page;

        temp=temp->next;

      }

      tail->page=temp1; //命中的烦放入最 下面的物理页

    }

    if(answer!=1) //如果页没有命中

    {

      ffalse=ffalse+1; //末命中次数+1

//淘汰第-一个物理页中的逻辑页号,其它逻辑页号上移一个位置

      temp=head;

      while (temp!=NULL&&temp->next!=NULL)

      {

        temp->page=temp->next->page;

        temp=temp->next;

      }

      tail->page=pageNums[i]; //新的逻辑页(虚页)放入最下面的物理页

    }

    //---------------------------------------------------------------------------------------

//输出物理块中虚页地址本次变化情况:

    if (i==0) cout<< "物理块中虚页地址变化情况:\n";

    if (i<20)                                     //仅显示前20个变化,可自己调节输出数目

    {

      for(aa*ti=head; ti!=NULL; ti=ti->next) cout<<ti->page<<"  ";

      cout<<endl;

    }

  }

  //-------------------------------------------------------------------------------------

  double sum=1.0-ffalse/120.0;                         //计算命中率

  cout<<"未命中次数:"<<ffalse<<" "<<endl;

  cout<<"LRR算法命中率:"<<sum<<" "<<endl;

}


测试结果

让编译查错

一周热门 更多>