#include"stdio.h"
#include"stdib.h"
#include"string.h"
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);
}*/
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);
}