进程2

#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("\n");
 }
}

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("进程排序结果:\n");
   printf("name\tprio\tneedTime\n");
   for(i=0;i<n;i++)
   {
        printf("%c\t%d\t%d\n",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\t%d\t%d\t%d\n",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
   for(i=0;i<y;i++)
     printf("%c\t%d\t%d\t%d\n",a[i].name,a[i].prio,a[i].arrive,a[i].needTime);
   for(i=0;i<z;i++)
    printf("%c\t%d\t%d\t%d\n",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已执行结束!\n",a[i].name);
   printf("---------------------------\n");
   i=i+1;
   if(a[i].needTime==0)
   {
    printf("进程%c已执行结束!\n",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("现在执行的进程信息:\n");
    printf("name\tprio\tneedTime\n");
    printf("%c\t%d\t%d\n",a[i].name,a[i].prio,a[i].needTime);
    printf("-------------------------\n");
    sort(a,n);         //执行一次进程之后再排序
    output(a,n);       //显示再次排序进程序列
    printf("\n");
      
   }
  
   
}

 


main(){
 int n;
 Process a[N];
 printf("你想输入多少个进程信息:\n");
 scanf("%d",&n);
 getchar();
     input(a,n);
  sort(a,n);
  output(a,n);
  go(a,n);
}

posted @ 2016-04-20 19:57  03郭丽红  阅读(98)  评论(0编辑  收藏  举报