今天又是待了一天的机房,代码没少敲,改进设计一中的短作业调度进程的算法。感觉感触挺大的,因为,很久没有这么认真去对待一件事情了,后果便是:感触颇深——只要你认真和专注地去做一件事情,结果肯定会出来的。
附上短作业调度的c语言代码:
#include<stdio.h>
struct sjf {
char name[10]; //进程名
float arrivetime; //到达时间
float servicetime;//服务时间
float starttime; //开始时间
float finishtime;//完成时间
float zztime;//周转时间
float dqzztime;//带权周转
};
sjf p[100];
void Sinput(sjf *p, int N)
{
int i;
printf("输入进程名称,到达时间,服务时间:\n");
for (i = 0; i<N; i++)
{
printf("输入第%d进程的名称,到达时间,服务时间:", i+1);
scanf("%s%f%f", &p[i].name, &p[i].arrivetime, &p[i].servicetime);
}
}
void Sprint(sjf *p, int N)
{ int k;
printf("run order:");
printf("%s",p[0].name);
for(k=1;k<N;k++)
{
printf("-->%s",p[k].name);
}
printf("\nname\tarrive\tservice\tstart\tfinish\tzztime\tdqzztime\n");
for(k=0;k<=N-1;k++)
{
printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,
p[k].servicetime,p[k].starttime,p[k].finishtime,(p[k].finishtime-p[k].arrivetime),
((p[k].finishtime-p[k].arrivetime)/p[k].servicetime));
}
}
void Ssort(sjf *p, int N) {
for (int i = 1; i < N; i++) {
for (int j = 1; j <= i; j++) {
if((p[i].arrivetime<=p[j].arrivetime))
{
if(p[i].servicetime<p[j].servicetime)
{
sjf temp;
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
}
void Sdeal(sjf *p,int N,float arrivetime,float servicetime,float finishtime)
{
int k;
for(k=0;k<=N;k++)
{
if(k==0){
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].arrivetime+p[k].servicetime;}
else{
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}
}
}
void SJF(sjf *p, int N)
{
float arrivetime=0,servicetime=0,finishtime=0;
Ssort(p, N);
Sdeal(p,N,arrivetime,servicetime,finishtime);
Sprint(p, N);
}
int main()
{
int M;
printf("短作业优先调度算法\n");
printf("输入进程数:");
scanf("%d", &M);
Sinput(p, M);
SJF(p, M);
}
调试过之后没啥问题了,