#include<stdio.h>
#define N 3
//#define M 10
typedef struct process //进程结构体定义
{
char name;
int arrive;
int prio;
int needTime;
}Process;
void input(Process a[],int n){ //输入进程基本信息
int i;
for(i=0;i<n;i++)
{
printf("请输入%d个进程的进程名:",i+1);
scanf("%c",&a[i].name);
printf("请输入%d个进程的优先级:",i+1);
scanf("%d",&a[i].prio);
printf("请输入%d个进程的到达时间:",i+1);
scanf("%d",&a[i].arrive);
printf("请输入%d个进程的需要时间:",i+1);
scanf("%d",&a[i].needTime);
getchar();
printf("
");
}
}
void sort(Process a[],int n)
{
int i,j;
Process temp;
for(i=0;i<n;i++)
for(j=i;j<N;j++)
{
if(a[j].prio>a[i].prio) //按进程优先级排序
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
if(a[j].prio==a[i].prio) //如果优先级相同,按先来先服务原则排序
{
if(a[j].arrive<a[i].arrive)
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
}
void output(Process a[],int n) //输出进程信息
{
int i;
printf("进程排序结果:
");
printf("name prio needTime
");
for(i=0;i<n;i++)
{
printf("%c %d %d
",a[i].name,a[i].prio,a[i].needTime);
}
}
/*void running(Process a[N])
{
int i,j,x=0,y=0,z=0;
Process ready[M],wait[M],finished[M];
for(i=0;i<N;i++)
{
ready[x]=a[i];x++;
for(j=i;i<N;j++)
{
wait[y]=a[j];y++;
}
if(a[i].needTime==0)
{
finished[z]=a[i];
z++;
}
}
for(i=0;i<x;i++)
printf("%c %d %d %d
",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
for(i=0;i<y;i++)
printf("%c %d %d %d
",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
for(i=0;i<z;i++)
printf("%c %d %d %d
",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
}*/
//问题:1,优先级为0,服务时间有余
// 2,服务时间0,优先级有余
// 3,服务时间0时退出序列
void go(Process a[],int n)
{
int i=0;
while(a[i].needTime>=0&&a[i].prio>=0)
{
if(a[i].needTime==0)
{
a[i].prio=-1;
printf("进程%c已执行结束!
",a[i].name);
printf("---------------------------
");
i=i+1;
if(a[i].needTime==0)
{
printf("进程%c已执行结束!
",a[i].name);
i=i+1;
}
}
if(a[i].prio ==0)
{
while(a[i].needTime!=0)
{
a[i].needTime--;
}
}
a[i].needTime--;
a[i].prio--;
printf("现在执行的进程信息:
");
printf("name prio needTime
");
printf("%c %d %d
",a[i].name,a[i].prio,a[i].needTime);
printf("-------------------------
");
sort(a,n); //执行一次进程之后再排序
output(a,n); //显示再次排序进程序列
printf("
");
}
}
main(){
int n;
Process a[N];
printf("你想输入多少个进程信息:
");
scanf("%d",&n);
getchar();
input(a,n);
sort(a,n);
output(a,n);
go(a,n);
}