我需要用C++程序做的Nstep-scan
哇。。老师专用啊。。
直接用BeyondCompare好了,还编个程序。。。如果这是作业,腹黑呀,哈哈
就是一个文本比较算法吧,按行读取,如果出现空行,跳过,非空行比较近似度。其实做复杂了挺不容易的,你参考一下我说的这个软件功能就知道了,做好了对智能程度要求很高。
先帮你做2个吧!有时间再全做出来。
//1、购物打折//
#include
using namespace std;
int main()
{
float sum;
cout<<"请输入购物歀:";
cin>>sum;
if(sum<=1000)
cout<<sum<<endl;
else if(sum>1000 && sum<=2000)
cout<<sum*0.95<<endl;
else if(sum>2000 && sum<=3000)
cout<<sum*0.9<<endl;
else if(sum>3000 && sum<=5000)
cout<<sum*0.85<<endl;
else if(sum>5000)
cout<<sum*0.8<<endl;
return 0;
}
//2、用类实现简单的四则运算//
#include
using namespace std;
class Calculator
{
public:
void Input();
void Output();
private:
float m1;
float m2;
float sum;
char ch;
};
void Calculator::Input()
{
cin>>m1;
cin>>ch;
cin>>m2;
}
void Calculator::Output()
{
switch(ch)
{
case '+':sum=m1+m2;break;
case '-':sum=m1-m2;break;
case '*':sum=m1*m2;break;
case '/':sum=m1/m2;break;
}
cout<<sum<<endl;
}
int main()
{
while(1)
{
Calculator A;
A.Input();
A.Output();
}
return 0;
}
#include "stdio.h"
#include "stdlib.h"
void CopyL(int Sour[],int Dist[] ,int x); //数组Sour复制到数组Dist,复制到x个数
void SetDI(int DiscL[]); //随机生成磁道数
void Print(int Pri[],int x); //打印输出数组Pri
void DelInq(int Sour[],int x,int y); //数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)
void FCFS(int Han,int DiscL[]); //先来先服务算法(FCFS)
void SSTF(int Han,int DiscL[]); //最短寻道时间优先算法(SSTF)
int SCAN(int Han,int DiscL[],int x,int y); //扫描算法(SCAN)
void CSCAN(int Han,int DiscL[]); //循环扫描算法(CSCAN)
void N_Step_SCAN(int Han1,int DiscL[]); //N步扫描算法(NStepScan)
void PaiXu(); //寻道长度由低到高排序
void Pri();
int NAll=0;
int Best[5][2]; //用作寻道长度由低到高排序时存放的数组
int Limit=0; //输入寻找的范围磁道数i
int Jage;
float Aver=0;
int main()
{
int i;
int DiscLine[10]; //声明准备要生成的随机磁道号的数组
int Hand; //磁道数
int Con=1;
int n;
while (Con==1)
{
Jage=0;
printf("\n 请输入初始的磁道数(0<n<65536):");
scanf("%d",&Hand);
printf("\n+ 输入寻找的范围:");
scanf("%d",&Limit);
if (Limit>65536)
{
printf("超出范围!");
}
else
{
printf(" ╭═══════════════╮ \n");
printf(" ║ 操作系统课程设计 ║ \n");
printf(" ╭═════┤ 磁盘调度算法 ├═════╮\n");
printf(" ║ ║ ║ ║\n");
printf(" ║ ╰═══════════════╯ ║\n");
printf(" ║ 1.先来先服务算法(FCFS) ║\n");
printf(" ║ ║\n");
printf(" ║ 2.最短寻道时间优先算法(SSTF) ║\n");
printf(" ║ ║\n");
printf(" ║ 3.扫描算法(SCAN) ║\n");
printf(" ║ ║\n");
printf(" ║ 4.循环扫描算法(CSCAN) ║\n");
printf(" ║ ║\n");
printf(" ║ 5.N步扫描算法(NStepScan) ║\n");
printf(" ║ ║\n");
printf(" ║ 6.各类算法的比较 ║\n");
printf(" ║ ║\n");
printf(" ║ ║\n");
printf(" ║ ╭———————————————————————╮ ║\n");
printf(" ╰═┤ 请输入你的选择的算法(输入0离开) ├═╯\n");
printf(" ╰———————————————————————╯\n");
scanf("%d",&n);
if (n==0) exit(0);
printf("\n");
switch (n)
{
case 1:
SetDI(DiscLine); //随机生成磁道数
FCFS(Hand,DiscLine); //先来先服务算法(FCFS)
break;
case 2:
SetDI(DiscLine); //随机生成磁道数
SSTF(Hand,DiscLine); //最短寻道时间优先算法(SSTF)
break;
case 3:
SetDI(DiscLine); //随机生成磁道数
SCAN(Hand,DiscLine,0,9); //扫描算法(SCAN)
break;
case 4:
SetDI(DiscLine); //随机生成磁道数
CSCAN(Hand,DiscLine); //循环扫描算法(CSCAN)
break;
case 5:
SetDI(DiscLine); //随机生成磁道数
N_Step_SCAN(Hand,DiscLine); //N步扫描算法(NStepScan)
break;
case 6:
SetDI(DiscLine); //随机生成磁道数
FCFS(Hand,DiscLine); //先来先服务算法(FCFS)
SSTF(Hand,DiscLine); //最短寻道时间优先算法(SSTF)
SCAN(Hand,DiscLine,0,9); //扫描算法(SCAN)
CSCAN(Hand,DiscLine); //循环扫描算法(CSCAN)
N_Step_SCAN(Hand,DiscLine); //N步扫描算法(NStepScan)
PaiXu(); //寻道长度由低到高排序
printf("\n\n+ 寻道长度由低到高排序:");
for (i=0;i<5;i++)
{
printf("%4d ",Best[i][0]);
}
break;
}
printf("\n\n+ 是否继续(按0结束,按1继续)?");
scanf("%5d",&Con);
}
}
}
//数组Sour复制到数组Dist,复制到x个数
void CopyL(int Sour[],int Dist[] ,int x)
{
int i;
for (i=0;i<=x;i++)
{
Dist[i]=Sour[i];
}
}
//打印输出数组Pri
void Print(int Pri[],int x)
{
int i;
for (i=0;i<=x;i++)
{
printf("%5d",Pri[i]);
}
}
//随机生成磁道数
void SetDI(int DiscL[])
{
int i;
for (i=0;i<=9;i++)
{
DiscL[i]=rand()%Limit;//随机生成10个磁道号
}
printf("+ 需要寻找的磁道号:");
Print(DiscL,9); //输出随机生成的磁道号
printf("\n");
}
//数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)
void DelInq(int Sour[],int x,int y)
{
int i;
for (i=x;i<y;i++)
{
Sour[i]=Sour[i+1];
x++;
}
}
//先来先服务算法(FCFS)
void FCFS(int Han,int DiscL[])
{
int RLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[]
int i,k,All,Temp; //Temp是计算移动的磁道距离的临时变量
All=0; //统计全部的磁道数变量
k=9; //限定10个的磁道数
CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine
printf("\n+ 按照FCFS算法磁道的访问顺序为:");
All=Han-RLine[0];
for (i=0;i<=9;i++)
{
Temp=RLine[0]-RLine[1];//求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离
if (Temp<0)
Temp=(-Temp);//移动磁道数为负数时,算出相反数作为移动磁道数
printf("%5d",RLine[0]);
All=Temp+All;//求全部磁道数的总和
DelInq(RLine,0,k);//每个磁道数向前移动一位
k--;
}
Best[Jage][1]=All;//Best[][1]存放移动磁道数
Best[Jage][0]=1; //Best[][0]存放算法的序号为:1
Jage++;//排序的序号加1
Aver=((float) All)/10;//求平均寻道次数
printf("\n+ 移动磁道数:<%5d> ",All);
printf("\n+ 平均寻道长度:*%0.2f* ",Aver);
}
//最短寻道时间优先算法(SSTF)
void SSTF(int Han,int DiscL[])
{
int i,j,k,h,All;
int Temp; //Temp是计算移动的磁道距离的临时变量
int RLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[]
int Min;
All=0; //统计全部的磁道数变量
k=9; //限定10个的磁道数
CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine
printf("\n+ 按照SSTF算法磁道的访问顺序为:");
for (i=0;i<=9;i++)
{
Min=64000;
for (j=0;j<=k;j++) //内循环寻找与当前磁道号最短寻道的时间的磁道号
{
if (RLine[j]>Han) //如果第一个随机生成的磁道号大于当前的磁道号,执行下一句
Temp=RLine[j]-Han; //求出临时的移动距离
else
Temp=Han-RLine[j]; //求出临时的移动距离
if (Temp<Min) //如果每求出一次的移动距离小于Min,执行下一句
{
Min=Temp; //Temp临时值赋予Min
h=j; //把最近当前磁道号的数组下标赋予h
}
}
All=All+Min; //统计一共移动的距离
printf("%5d",RLine[h]);
Han=RLine[h];
DelInq(RLine,h,k); //每个磁道数向前移动一位
k--;
}
Best[Jage][1]=All;//Best[][1]存放移动磁道数
Best[Jage][0]=2;//Best[][0]存放算法的序号为:2
Jage++;//排序序号加1
Aver=((float)All)/10;//求平均寻道次数
printf("\n+ 移动磁道数:<%5d> ",All);
printf("\n+ 平均寻道长度:*%0.2f* ",Aver);
}
//扫描算法(SCAN)
int SCAN(int Han,int DiscL[],int x,int y)
{
int j,n,k,h,m,All;
int t=0;
int Temp;
int Min;
int RLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[]
int Order;
Order=1;
k=y;
m=2; //控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到
All=0; //统计全部的磁道数变量
CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine
printf("\n+ 按照SCAN算法磁道的访问顺序为:");
Min=64000;
for (j=x;j<=y;j++) //寻找与当前磁道号最短寻道的时间的磁道号
{
if (RLine[j]>Han) //如果第一个随机生成的磁道号大于当前的磁道号,执行下一句
Temp=RLine[j]-Han; //求出临时的移动距离
else
Temp=Han-RLine[j]; //求出临时的移动距离
if (Temp<Min)
{
Min=Temp; //Temp临时值赋予Min
h=j; //把最近当前磁道号的数组下标赋予h
}
}
All=All+Min;
printf("%5d",RLine[h]);
if (RLine[h]>=Han) //判断磁道的移动方向,即是由里向外还是由外向里
{
Order=0;
t=1;
}
Han=RLine[h];
DelInq(RLine,h,k); //每个磁道数向前移动一位
k--;
while (m>0)
{
if (Order==1) //order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动
{
for (j=x;j<=y;j++)
{
h=-1;
Min=64000;
for (n=x;n<=k;n++) //判断离当前磁道最近的磁道号
{
if (RLine[n]<=Han)
{
Temp=Han-RLine[n];
if (Temp<Min)
{
Min=Temp; //Temp临时值赋予Min
h=n; //把最近当前磁道号的数组下标赋予h
}
}
}
if (h!=-1)
{
All=All+Min; //叠加移动距离
printf("%5d",RLine[h]);
Han=RLine[h]; //最近的磁道号作为当前磁道
DelInq(RLine,h,k);
k--;
}
}
Order=0; //当完成向内的移动,order赋予0,执行else语句,使磁道向外移动
m--; //向内完成一次,m减一次,保证while循环执行两次
}
else //order是0的话,磁道向外移动
{
for (j=x;j<=y;j++)
{
h=-1;
Min=64000;
for (n=x;n<=k;n++) //判断离当前磁道最近的磁道号
{
if (RLine[n]>=Han)
{
Temp=RLine[n]-Han;
if (Temp<Min)
{
Min=Temp; //Temp临时值赋予Min
h=n; //把最近当前磁道号的数组下标赋予h
}
}
}
if (h!=-1)
{
All=All+Min; //叠加移动距离
printf("%5d",RLine[h]);
Han=RLine[h]; //最近的磁道号作为当前磁道
DelInq(RLine,h,k);
k--;
}
}
Order=1; //当完成向内的移动,order赋予0,执行else语句,使磁道向外移动
m--; //向内完成一次,m减一次,保证while循环执行两次
}
}
NAll=NAll+All;
if ((y-x)>5)
{
Best[Jage][1]=All;//Best[][1]存放移动磁道数
Best[Jage][0]=3;//Best[][0]存放算法的序号为:3
Jage++;//排序序号加1
Aver=((float)All)/10;//求平均寻道次数
printf("\n+ 移动磁道数:<%5d> ",All);
printf("\n+ 平均寻道长度:*%0.2f* ",Aver);
}
if (t==1) printf("\n+ 磁道由内向外移动");
else printf("\n+ 磁道由外向内移动");
return(Han);
}
//循环扫描算法(CSCAN)
void CSCAN(int Han,int DiscL[])
{
int j,h,n,Temp,m,k,All,Last,i;
int RLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[]
int Min;
int tmp=0;
m=2;
k=9;
All=0; //统计全部的磁道数变量
Last=Han;
CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine
printf("\n+ 按照CSCAN算法磁道的访问顺序为:");
while (k>=0)
{
for (j=0;j<=9;j++) //从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号
{
h=-1;
Min=64000;
for (n=0;n<=k;n++)
{
if (RLine[n]>=Han)
{
Temp=RLine[n]-Han;
if (Temp<Min)
{
Min=Temp;
h=n;
}
}
}
if (h!=-1)
{
All=All+Min; //统计一共移动的距离
printf("%5d",RLine[h]);
Han=RLine[h];
Last=RLine[h];
DelInq(RLine,h,k);
k--;
}
}
if (k>=0)
{
tmp=RLine[0];
for (i=0;i<k;i++)//算出剩下磁道号的最小值
{
if (tmp>RLine[i]) tmp=RLine[i];
}
Han=tmp;//把最小的磁道号赋给Han
Temp=Last-tmp;//求出最大磁道号和最小磁道号的距离差
All=All+Temp;
}
}
Best[Jage][1]=All;//Best[][1]存放移动磁道数
Best[Jage][0]=4;//Best[][0]存放算法的序号为:4
Jage++;//排序序号加1
Aver=((float)All)/10;//求平均寻道次数
printf("\n+ 移动磁道数:<%5d> ",All);
printf("\n+ 平均寻道长度:*%0.2f* ",Aver);
}
//N步扫描算法(NStepScan)
void N_Step_SCAN(int Han1,int DiscL[])
{
int i,m,k;
int RLine1[10];
NAll=0;
m=2;
k=9; //限定10个的磁道数
i=-1;
CopyL(DiscL,RLine1,9); //复制磁道号到临时数组RLine
printf("\n+ 按照N_Step_SCAN算法磁道的访问顺序为:");
for (m=0;m<2;m++) //由于限定10磁道数,将10个磁道数分为两组,每组5个磁道数,每个组按照SCAN算法执行,该循环循环2次
{
Han1=SCAN(Han1,RLine1,i+1,i+5);
i=i+5;
}
Best[Jage][1]=NAll;//Best[][1]存放移动磁道数
Best[Jage][0]=5;//Best[][0]存放算法的序号为:5
Aver=((float)NAll)/10;//求平均寻道次数
printf("\n+ 移动磁道数:<%5d> ",NAll);
printf("\n+ 平均寻道长度:*%0.2f* ",Aver);
}
//寻道长度由低到高排序
void PaiXu()
{
int i,j,Temp;
for (i=0;i<5;i++)
{
for (j=0;j<4;j++)
{
if (Best[j][1]>Best[j+1][1]) //如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句
{
Temp=Best[j+1][1]; //从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序
Best[j+1][1]=Best[j][1];
Best[j][1]=Temp;
Temp=Best[j+1][0]; //将每个算法的序号用冒泡法排序
Best[j+1][0]=Best[j][0];
Best[j][0]=Temp;
}
}
}
}
啥是NStepScan?不太明白
用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
return 0;\/\/最后,因为main函数有一个int的返回类型限定,那么我们使用return语句返回一个int类型的值 0.} \/\/这样就结束了。一个简单的但又完整的C程序就有了,\/\/下一步就是使用编译器编译成目标的可执行文件:\/\/如果是windows下的vc++,那么需要分别点击编译,链接两个按钮生成hello.exe可执行文件...
用C语言编写一个简单程序,有哪些步骤,可以举一个例子详细讲解下吗?_百 ...
include<stdio> \/\/这个是头文件 也是 C语言里面最常用的头文件之一 int main()\/\/这个是主函数 也就是程序的入口 你写的程序就是从这里开始的 { \/\/这个 { }表示里面的范围 是必须的 跟main 主函数是不可分的 int a=2; \/\/这里表示有一个 int型的数据a(int型就是整数...
用C语言编写一个简单的图书管理小程序
源代码如下:include<iostream> include<iomanip> include<string> include<fstream> include<stdio.h> using namespace std;const int maxb=10000; \/\/最多的图书 class book\/\/图书类 { int tag; \/\/删除标记1:已删0:未删 int number; \/\/isbn书号 char name[20]; ...
用C语言编一个程序
1. 从1到10的阶乘的和的程序 运行结果:1-10阶乘和为: 4037913 include<conio.h> include<stdio.h> int getResult(int num){ if(num == 1 ) \/* 1! =1 *\/ return 1;else \/* 如果 num != 1 那么则必然有 num! = num * (num -1)!*\/ return num * getResult(num -1);} v...
c语言中编写程序,输入2个数,定义四个函数,分别实现加减乘除四则运算...
1、打开python语言中的命令窗口,定义函数com_result,传入三个参数x、y和func。2、定义一个变量result,然后调用第一步中的函数,使用lambda表达式。3、使用同样的方法,调用函数com_result,这次lambda表达式使用减号。4、再次调用函数,lambda表达式使用乘号,连接两个操作数。5、如果要计算两个数的除法,...
用c程序做一个1-2+3...+99-100程序
include<stdio.h> main(){ int i,s1=0,s2=0,s;for(i=1;i<101;i++){ if(i%2==0)s1+=i;if(i%2==1)s2+=i;} s=s2-s1;printf("%d\\n",s);}
有字母ABCD,请用C语言编写程序,输出由该四个字母组成的字符串.要求如下...
典型的排列组合的问题啊。这个程序不错的:include<stdio.h> void main(void){ char ch[]="ABCD";int i,j,k,n=4;int m=0;for(j=0;j<n;j++){ for(k=0;k<n;k++){ for(i=0;i<n;i++){ if(i!=j&&j!=k&&i!=k){ printf("%c%c%c\\n",ch[j],ch[k],ch[i]);m...
C语言编写以下程序
定义字母统计结构体数组,长度为小写字母数目(即26),初始化字母统计结构体数组。输入字符串,使用字母统计结构体数组统计字符串中的小写字母计数。对字母统计结构体数组,先按计数降序排列,计数相同的按字母表升序排列。输出排序后的字母统计结构体数组。按照上述思路,参考程序如下:include <stdio.h>#...
蔡柏小儿: 编译,构建,执行的结果应该就是.exe文件吧.一般是本机代码,可以直接运行(LS错误,.exe由目标程序组合而成,已经经过编译,不需要编译器).不过VC++构建的程序,默认是依赖动态库的.VC++6.0编译的程序几乎在所有Windows系统都可以运行,因为依赖的库文件在Windows安装时候就已经装好了.不过之后版本可能不行.解决方案是让运行.exe的计算机上装对应版本的Visual C++ Redistributable Package(可再发行组件包).这个在实际的软件产品中可以让安装程序进行调用.此外,C++/CLR编译的程序不是以上的本机代码,则需要安装对应的.NET Framework才能运行.==== [原创回答团]
新乐市19665345867: 求NS2大神指点:需要在Tcl进行节点通信模拟,并记录通信时互相发数据的具体时间,以这些时间数据作为输入 - ?
蔡柏小儿: 很简单,编写TCL脚本进行仿真产生trace文件,用awk脚本语言对trace文件进行处理,得到关键数据,再用gnuplt进行绘图,给分吧!不懂追问!还有你的QQ加不了!
新乐市19665345867: 如何用C++需要编写程序,用泰勒公式求出PI的值? - ?
蔡柏小儿: #include<iostream> #include<iomanip> int main(){double qp=1;int i=1;int sign=1;while(true){sign=-sign;i+=2;if(1.0/i<1E-8)break;qp+=1.0*sign/i;}std::cout<<"π的近似值为a:"<<std::setprecision(8)<<4*qp<<std::endl;return 0; }
新乐市19665345867: 如果我写的是C++程序我最终要把它移植到FPGA上去工作,我需要做哪些详尽的工作,谢谢了 - ?
蔡柏小儿: fpga上有微处理器的ip核,可以支持的c语言,c++现在还不太容易实现,你也可以用verilog实现c++的功能,这样fPGA就可以直接用了,不过一般的复杂的算法不太适合verilog实现.
新乐市19665345867: 有没有用c++写的串口示例程序? - ?
蔡柏小儿: 给你封装几个函数 拿去用下 HANDLE hComm; OVERLAPPED m_ov; COMSTAT comstat; DWORD m_dwCommEvents; int ts; bool openport(char *portname)//打开一个串口 { hComm = CreateFile(portname, GENERIC_READ | GENERIC_WRITE,...
新乐市19665345867: 高分求用C++写一道完整的加密程序 - ?
蔡柏小儿: #include #include #includevoid encrypt(char *in, char *pwd, char *out) { FILE *infile, *outfile; char ch; int i=0, PwdLen=0; if ((infile=fopen(in, "rb"))==NULL) { printf("无法打开 %s\n", in); getch(); exit(1); } if ((outfile=fopen(out, "wb"))==NULL)...
新乐市19665345867: 一个C++课程程序设计要求用C++程序做计算器 并要求详细解释每一步 谢谢大家拉?
蔡柏小儿: #include <iostream>/*引入对c++io流的声明,因为程序中用了cin,cout*/ #include <cstdio> /*引入c形式的标准输入输出*/ using namespace std; /*引入命名空间,因为cin,cout,endl在命名空间std中*/ class jishu /*定义类*/ { public: jishu();/*自己定义...
新乐市19665345867: 如何在 Visual Studio 上用 C/C++ 写 Linux 程序 - ?
蔡柏小儿: 1、Linux和windows平台上的可执行文件格式是不一样的,linux上的可执行文件格式为ELF,windows平台上的可执行文件格式为pe,所以只可以用visual studio编辑c/c++源代码,编译和链接需要在linux平台上进行.2、自己也可以通过vmware、virtual pc等软件,在windows上通过虚拟机安装一个linux系统,用于编译、链接生成linux程序.
新乐市19665345867: 如何用c++设计文件打包程序 - ?
蔡柏小儿: 把C++程序打包成exe程序,首先需要一个编译器,比如开源的gcc,微软的VS,以vs2010为例:1、在vs2010中,新建C++项目,将C++源文件添加进来2、按 F7编译,Ctrl+F5运行,确定结果无误;3、进入项目根目录,找到编译出来的exe文件,文件名与项目名相同.一般情况下,这个exe文件就是我们要的了,但你会发现,把这个exe文件放在别的电脑上不一定能执行,因为缺少运行环境,需要到微软官网下载.还以vs2010所需要的运行时环境为例,下载地址为 网页链接 最后,把exe文件和下载好的运行时一起打包,就大功告成了.
新乐市19665345867: 急需要:用C++编写程序建立作者及其作品的容器,能够实现以下功能: - ?
蔡柏小儿: //初始数据库是空的,要先执行多次i操作才行//每次按提示输入字符即可,字符的定义是按照你题目的顺序给的.//在VC上会有很多warning,不过能通过编译//用g++编译就没有warning//作者的作品是可以重复的,如果不想重复就用map类好了....