服务值 HS作业调度算法-c++ 数组列别

全部是自己写出纯手写累死我了

#include<iostream>
using namespace std;
const int N=10;
double daoda[N];//存储到达时间的数组
double yunxing[N]; //存储运行时间的数组
double kaishi[N];//存储开始时间的数组
double wancheng[N];//存储完成时间的数组
double dengdai[N];//存储等待时间的数组
double zhouzhuan[N];//存储周转时间的数组
double daiquanz[N];//存储带权周转时间的数组
string name[N];//每个作业的名字
int main()
{
    //先来先服务调度算法
    cout<<"请输入作业数:"<<endl;
    int n;//作业数
    cin>>n;
    cout<<"请按照顺序分别输入n个作业的名字、到达时间和运行时间(h):"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>name[i];//作业的名字 比如A B C 之类的
        cin>>daoda[i]>>yunxing[i];//初始条件 存入到达时间和运行时间
    }
    for(int i=0;i<n;i++)//选择排序法 根据到达时间从小到大进行排序
    {
        for(int j=0;j<n;j++)
        {
            if(daoda[i]<daoda[j])
            {
                swap(daoda[i],daoda[j]);//这下面这几步是为了同一个作业的这些时间对应的保持一致
                swap(yunxing[i],yunxing[j]);//当到达时间交换了,对应的其他时间也应该交换
                swap(kaishi[i],kaishi[j]);
                swap(dengdai[i],dengdai[j]);
                swap(zhouzhuan[i],zhouzhuan[j]);
                swap(daiquanz[i],daiquanz[i]);
                swap(name[i],name[j]);//作业的名字也要跟着作业排序的变化而变化
            }
        }
    }
    kaishi[0]=daoda[0];//最先到达的作业的开始时间为到达时间
    dengdai[0]=kaishi[0]-daoda[0];
    wancheng[0]=yunxing[0]+kaishi[0];//第一个进程的完成时间 就是运行时间+开始时间
    zhouzhuan[0]=wancheng[0]-daoda[0];    //周转时间就是完成时间-到达时间
    daiquanz[0]=zhouzhuan[0]/yunxing[0];//带权周转时间=周转时间/运行时间
    for(int i=1;i<n;i++)
    {
        if(daoda[i]<wancheng[i-1])//当这个进程的到达时间小于上一个进程的完成时间时
        {
            kaishi[i]=kaishi[i-1]+yunxing[i-1];//开始时间=上一个作业的运行时间+开始时间     也就是上一个的完成时间
        }
        else// 当这个进程的到达时间不小于上一个进程的完成时间时
        {
            kaishi[i]=daoda[i];//开始时间=这个进程的到达时间
        }
        wancheng[i]=yunxing[i]+kaishi[i];//完成时间就是运行时间+开始时间
        dengdai[i]=kaishi[i]-daoda[i];//等待时间就是开始时间-到达时间
        zhouzhuan[i]=wancheng[i]-daoda[i];    //周转时间就是完成时间-到达时间
        daiquanz[i]=zhouzhuan[i]/yunxing[i];//带权周转时间=周转时间/运行时间
    }
    for(int i=0;i<n;i++)
    {
        cout<<"作业"<<name[i]<<":";
        cout<<"到达时间:"<<daoda[i]<<"\t"<<"运行时间:"<<yunxing[i]<<"\t";
        cout<<"开始时间:"<<kaishi[i]<<"\t"<<"完成时间:"<<wancheng[i]<<"\t"<<"等待时间:"<<dengdai[i]<<"\t";
        cout<<"周转时间:"<<zhouzhuan[i]<<"\t"<<"带权周转时间:"<<daiquanz[i]<<endl;
    }
    double sum1=0;
    double sum2=0;
    for(int i=0;i<n;i++)
    {
        sum1+=zhouzhuan[i];//计算周转时间的和
        sum2+=daiquanz[i]; //计算带权周转时间的和
    }
    cout<<"平均周转时间:"<<sum1/n<<endl;//平均周转时间=周转时间/作业数量
    cout<<"平均带权周转时间:"<<sum2/n<<endl;//平均带权周转时间=带权周转时间/作业数量
    return 0;
}


运行结果
设计思路:一开始定义了七个double类型的数组,用来分别存储到达时间、运行时间、开始时间、完成时间、等待时间、周转时间、带权周转时间,定义一个string类型的数组,用来存储每个作业的进程名;然后在主函数中用户输入作业数目和进程名、到达时间和运行时间;利用选择排序算法根据到达时间从小到大进行排序,顺便在这个算法中交换到达时间的顺序的时候,其余的七个数组的顺序也交换,保证每个进程的每个时间一一对应;然后开始根据公式计算每个时间(公式已在程序注释中写明),注意判断到达时间和上一个进程的完成时间的比较,最后输出相应的信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
先来先服务算法 #include "stdio.h" #include #define max 100 #define pfree 0 /*process end*/ #define running 1 /*process running status*/ #define aready 2 /*process aready status */ #define blocking 3 /*process aready blocking status*/ typedef struct node { char name; int status; int ax,bx,cx,dx; int pc; int psw; struct node *next; /*pcb define*/ }pcb; pcb *createprocess(pcb *head) { pcb *p,*q; int a,b,c,d,m,n; char ID; q=NULL; printf("input the first seven status pcb:"); scanf("\n%c%d%d%d%d%d%d",&ID,&a,&b,&c,&d,&m,&n); while(1) { p=(pcb*)malloc(sizeof(pcb)); p->name=ID; p->ax=a; p->bx=b; p->cx=c; p->dx=d; p->pc=m; p->psw=n; p->status=aready; if(head==NULL) head=p; else q->next=p; q=p; printf("input the next seven status pcb: "); scanf("\n%c",&ID); if (ID == '*') break; scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&m,&n); } if(q!=NULL) q->next=NULL; q=head; while(q) { printf("\n process name. status.ax. bx. cx. dx. pc. psw.\n "); printf("%10c%5d%5d%5d%5d%5d%5d%5d",q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw); q=q->next; } return head;/*createprocess end*/ } void processfcfs(pcb *head) /*use fifo */ { pcb *p; p=head; printf("\n the process use fcfs method.\n"); printf("running the frist process:\n"); while(p!=NULL) { p->status=running; printf("\nprocess name status. ax. bx. cx. dx. pc. psw."); printf("\n%10c%5d%8d%5d%5d%5d%5d%5d",p->name,p->status,p->ax,p->bx,p->cx,p->dx,p->pc,p->psw); /*check process running status */ p->status=0; p=p->next; } printf("\n检查进程是否结束:"); p=head; while(p) { printf("\n%3c%3d",p->name,p->status); p=p->next; } printf("\ngame is over!\n"); } main() { pcb *head; head=NULL; head=createprocess(head); processfcfs(head); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值