c++程序运行提示:遇到问题需要关闭。我们对此引起的不便表示抱歉。急!急!

huyangg 2009-05-31 09:28:21
#include "iostream.h"
#include "math.h"
//声明不同算法的函数
void fcfs(int f[],int);
void sstf(int m[],int);
void scan(int d[],int);
void eleattemper(int e[],int,int);
//主函数
void main()
{ cout<<"start:"<<endl;
//计算先来先服务
int a[]={86,145,93,179,95,150,103,176,132};
const int befor=128;
const int now=143;
fcfs(a,now);
//计算最短查找时间优先
int aa[]={86,145,93,179,95,150,103,176,132};
sstf(aa,now);
//计算单向扫描
int aaa[]={86,145,93,179,95,150,103,176,132};
scan(aaa,now);
//计算电梯调度
int b[]={86,145,93,179,95,150,103,176,132};
eleattemper(b,now,befor);
}
//先来先服务调度算法(fcfs)
void fcfs(int f[],int bnow)
{ cout<<"先来先服务调度算法(fcfs):"<<endl;
//移动初值
int s=bnow-f[0];
int t=abs(s);
//计算总移动量
for(int i=0;i<8;i++)
{ t=t+abs(f[i]-f[i+1]);}
cout<<"移 动 顺 序 :";
//输出移动顺序
for(i=0;i<9;i++)
{cout<<f[i]<<",";}
cout<<endl;
cout<<"取臂移动总量:"<<t<<endl;
cout<<endl;
}
//最短查找时间优先算法(sstf)
void sstf(int m[],int mnow)
{ cout<<"最短查找时间优先算法(sstf):"<<endl;
int s=0;
int c;
int te;
int y;
int mm[8];
int tm=mnow;
//确定移动顺序,具体算法为首先确定距now位置最近的柱面,放入
//MM[0]中,随后以MM[0]为now查找下一个距离最近的柱面,放入
//MM[1],并以此类推。
for(int i=0;i<=8;i++)
{
int temp=abs(tm-9999);
//确定距"当前"位置最近的柱面
for(int j=0;j<=8;j++)
{ te=abs(tm-m[j]);
if (temp>te&&te!=0)
{//记录最小值
temp=te;
//记录柱面
c=m[j];
//记录柱面序号
y=j;
}
}
//改变当前位置
tm=c;
//记录柱面
mm[i]=c;
//剔除已读取的柱面
m[y]=9999999;
}
//计算总移动量
s=mnow-mm[0];
int t=abs(s);
for( i=0;i<8;i++)
{ t=t+abs(mm[i]-mm[i+1]);}
//输出移动顺序
cout<<"移 动 顺 序 :";
for(i=0;i<9;i++)
{cout<<mm[i]<<",";}
cout<<endl;
//输出总移动量
cout<<"取臂移动总量:"<<t<<endl;
cout<<endl;
}

//单向扫描法(scan)
void scan(int d[],int dnow)
{ cout<<"单向扫描法(scan):"<<endl;
//计算移动顺序,将柱面自小到大进行排序
int t;
for(int i=0;i<7;i++)
{for(int j=0;j<8-i;j++)
{ if (d[j]>d[j+1])
{ t=d[j];
d[j]=d[j+1];
d[j+1]=t;
}
}
}
//计算总移动量
int s=dnow-d[0];
int e=abs(s);
for( i=0;i<8;i++)
{ e=e+abs(d[i]-d[i+1]);}
//输出移动顺序
cout<<"移 动 顺 序:";
for(i=0;i<9;i++)
{cout<<d[i]<<",";}
cout<<endl;
//输出移动总量
cout<<"取臂移动总量:"<<e<<endl;
cout<<endl;
}

//电梯调度算法
void eleattemper(int e[],int enow,int ebefor)
{ cout<<"电梯调度算法:"<<endl;
//对柱面进行排序,自小而大
int t;
for(int i=0;i<7;i++)
{ for(int j=0;j<8-i;j++)
{ if (e[j]>e[j+1])
{ t=e[j];
e[j]=e[j+1];
e[j+1]=t;
}
}
}
//计算最小的距离的柱面号
// int c;
int x;
int temp=abs(enow-e[0]);
for(int j=0;j<=8;j++)
{ int f=abs(enow-e[j]);
if (temp>f)
{ temp=f;
x=j;
}
}
//输出移动顺序并计算总移动量
cout<<"移 动 顺 序 :";
if (ebefor>enow)
{ //降序 :移动顺序为首先到降序最近柱面,降序至最小柱面
//然后升序至最大柱面。
int s=abs(enow-e[x-1]);
for(i=x-1;i>=0;i--)
{ cout<<e[i]<<",";
if (i!=x&&i!=0){s=s+abs(e[i]-e[i-1]);}
}
s=s+abs(e[0]-e[x]);
for(i=x;i<=8;i++)
{ cout<<e[i]<<",";
if (i!=8){s=s+abs(e[i]-e[i+1]);}
}
cout<<endl;
cout<<"取臂移动总量:"<<s<<endl;
}
else
{ //升序 移动顺序为首先到升序最近柱面,升序至最大柱面
//然后降序至最小柱面。
int ss=abs(enow-e[x]);
for(i=x;i<=8;i++)
{ cout<<e[i]<<",";
if (i!=x){ ss=ss+abs(e[i]-e[i-1]);}
}
ss=ss+abs(e[8]-e[x-1]);
for(i=x-1;i>=0;i--)
{ cout<<e[i]<<",";
if (i!=0) {ss=ss+abs(e[i]-e[i-1]);}
}
cout<<endl;
cout<<"取臂移动总量:"<<ss<<endl;
}
}
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairchild811 2009-05-31
  • 打赏
  • 举报
回复
访问非法内存了
rwjlqn 2009-05-31
  • 打赏
  • 举报
回复
start:
(fcfs):
:86,145,93,179,95,150,103,176,132,
:557

(sstf):
:145,150,132,103,95,93,86,176,179,
:164

(scan):
:86,93,95,103,132,145,150,176,179,
:150

:
:145,150,176,179,132,103,95,93,86,
:129
huyangg 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 w0911h 的回复:]
引用 6 楼 huyangg 的回复:
那这个应该怎么改一下?


怎么改看你程序要求了,你自己写的应该知道怎么改呀,把mm数组改大点或者循环上限少一次都行
[/Quote]

已经好了,多谢了!
biosli 2009-05-31
  • 打赏
  • 举报
回复
你这个代码自己跟过么?没发现问题?
huyangg 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 w0911h 的回复:]
//记录柱面
mm[i]=c;

是这个地方越界
[/Quote]

大侠! 那这个应该怎么改一下?
w0911h 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 huyangg 的回复:]
那这个应该怎么改一下?
[/Quote]

怎么改看你程序要求了,你自己写的应该知道怎么改呀,把mm数组改大点或者循环上限少一次都行
huyangg 2009-05-31
  • 打赏
  • 举报
回复
那这个应该怎么改一下?
w0911h 2009-05-31
  • 打赏
  • 举报
回复
//记录柱面
mm[i]=c;

是这个地方越界
w0911h 2009-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 w0911h 的回复:]
//确定距"当前"位置最近的柱面
        for(int j=0;j <=8;j++)
    {  te=abs(tm-m[j]);

上面这个地方,当j=8的时候数组越界
[/Quote]

不好意思看错了,是m...我再看看
w0911h 2009-05-31
  • 打赏
  • 举报
回复
//确定距"当前"位置最近的柱面
for(int j=0;j <=8;j++)
{ te=abs(tm-m[j]);

上面这个地方,当j=8的时候数组越界
huyangg 2009-05-31
  • 打赏
  • 举报
回复
哪位大侠指点一下看哪里有问题,多谢了!

#include "iostream.h"
#include "math.h"
//声明不同算法的函数
void fcfs(int f[],int);
void sstf(int m[],int);
void scan(int d[],int);
void eleattemper(int e[],int,int);
//主函数
void main()
{ cout<<"start:"<<endl;
//计算先来先服务
int a[]={86,145,93,179,95,150,103,176,132};
const int befor=128;
const int now=143;
fcfs(a,now);
//计算最短查找时间优先
int aa[]={86,145,93,179,95,150,103,176,132};
sstf(aa,now);
//计算单向扫描
int aaa[]={86,145,93,179,95,150,103,176,132};
scan(aaa,now);
//计算电梯调度
int b[]={86,145,93,179,95,150,103,176,132};
eleattemper(b,now,befor);
}
//先来先服务调度算法(fcfs)
void fcfs(int f[],int bnow)
{ cout<<"先来先服务调度算法(fcfs):"<<endl;
//移动初值
int s=bnow-f[0];
int t=abs(s);
//计算总移动量
for(int i=0;i<8;i++)
{ t=t+abs(f[i]-f[i+1]);}
cout<<"移 动 顺 序 :";
//输出移动顺序
for(i=0;i<9;i++)
{cout<<f[i]<<",";}
cout<<endl;
cout<<"取臂移动总量:"<<t<<endl;
cout<<endl;
}
//最短查找时间优先算法(sstf)
void sstf(int m[],int mnow)
{ cout<<"最短查找时间优先算法(sstf):"<<endl;
int s=0;
int c;
int te;
int y;
int mm[8];
int tm=mnow;
//确定移动顺序,具体算法为首先确定距now位置最近的柱面,放入
//MM[0]中,随后以MM[0]为now查找下一个距离最近的柱面,放入
//MM[1],并以此类推。
for(int i=0;i<=8;i++)
{
int temp=abs(tm-9999);
//确定距"当前"位置最近的柱面
for(int j=0;j<=8;j++)
{ te=abs(tm-m[j]);
if (temp>te&&te!=0)
{//记录最小值
temp=te;
//记录柱面
c=m[j];
//记录柱面序号
y=j;
}
}
//改变当前位置
tm=c;
//记录柱面
mm[i]=c;
//剔除已读取的柱面
m[y]=9999999;
}
//计算总移动量
s=mnow-mm[0];
int t=abs(s);
for( i=0;i<8;i++)
{ t=t+abs(mm[i]-mm[i+1]);}
//输出移动顺序
cout<<"移 动 顺 序 :";
for(i=0;i<9;i++)
{cout<<mm[i]<<",";}
cout<<endl;
//输出总移动量
cout<<"取臂移动总量:"<<t<<endl;
cout<<endl;
}

//单向扫描法(scan)
void scan(int d[],int dnow)
{ cout<<"单向扫描法(scan):"<<endl;
//计算移动顺序,将柱面自小到大进行排序
int t;
for(int i=0;i<7;i++)
{for(int j=0;j<8-i;j++)
{ if (d[j]>d[j+1])
{ t=d[j];
d[j]=d[j+1];
d[j+1]=t;
}
}
}
//计算总移动量
int s=dnow-d[0];
int e=abs(s);
for( i=0;i<8;i++)
{ e=e+abs(d[i]-d[i+1]);}
//输出移动顺序
cout<<"移 动 顺 序:";
for(i=0;i<9;i++)
{cout<<d[i]<<",";}
cout<<endl;
//输出移动总量
cout<<"取臂移动总量:"<<e<<endl;
cout<<endl;
}

//电梯调度算法
void eleattemper(int e[],int enow,int ebefor)
{ cout<<"电梯调度算法:"<<endl;
//对柱面进行排序,自小而大
int t;
for(int i=0;i<7;i++)
{ for(int j=0;j<8-i;j++)
{ if (e[j]>e[j+1])
{ t=e[j];
e[j]=e[j+1];
e[j+1]=t;
}
}
}
//计算最小的距离的柱面号
// int c;
int x;
int temp=abs(enow-e[0]);
for(int j=0;j<=8;j++)
{ int f=abs(enow-e[j]);
if (temp>f)
{ temp=f;
x=j;
}
}
//输出移动顺序并计算总移动量
cout<<"移 动 顺 序 :";
if (ebefor>enow)
{ //降序 :移动顺序为首先到降序最近柱面,降序至最小柱面
//然后升序至最大柱面。
int s=abs(enow-e[x-1]);
for(i=x-1;i>=0;i--)
{ cout<<e[i]<<",";
if (i!=x&&i!=0){s=s+abs(e[i]-e[i-1]);}
}
s=s+abs(e[0]-e[x]);
for(i=x;i<=8;i++)
{ cout<<e[i]<<",";
if (i!=8){s=s+abs(e[i]-e[i+1]);}
}
cout<<endl;
cout<<"取臂移动总量:"<<s<<endl;
}
else
{ //升序 移动顺序为首先到升序最近柱面,升序至最大柱面
//然后降序至最小柱面。
int ss=abs(enow-e[x]);
for(i=x;i<=8;i++)
{ cout<<e[i]<<",";
if (i!=x){ ss=ss+abs(e[i]-e[i-1]);}
}
ss=ss+abs(e[8]-e[x-1]);
for(i=x-1;i>=0;i--)
{ cout<<e[i]<<",";
if (i!=0) {ss=ss+abs(e[i]-e[i-1]);}
}
cout<<endl;
cout<<"取臂移动总量:"<<ss<<endl;
}
}
huyangg 2009-05-31
  • 打赏
  • 举报
回复
哪位大侠指点一下看哪里有问题,多谢了!

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧