• 0422作业调度


    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    struct jcb{
        char name[10];
        char status;
        int arrtime;//到达时间
        int id;
        int reqtime;//作业运行所需时间
        int startime;//开始时间
        int finitime;//完成时间
        int  ti;//周转时间
        float TAtime,TAWtime;//等待时间,带权周转时间
        float prio;
    }job[24],jcb[24],jobarr[24];
    int systime=0;
    int m=0;
    int intarr,intfin,intjob;//到达的作业个数,完成作业个数、未到达作业个数
    int ReadFile()
    {
        
        int i=0;
        FILE *fp;     //定义文件指针
        fp=fopen("F:/3.txt","r");  //打开文件
        if(fp==NULL)
        {
            printf("File open error !
    ");
            exit(0);
        }
        printf("
     id    作业到达时间     作业运行所需要时间
    ");
        while(!feof(fp))
        {
            fscanf(fp,"%d%d%d",&jcb[i].id,&jcb[i].arrtime,&jcb[i].reqtime);  //fscanf()函数将数据读入
            printf("
    %3d%12d%15d
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime);  //输出到屏幕
            i++;
        }
    
        if(fclose(fp))     //关闭文件
        {
            printf("Can not close the file !
    ");
            exit(0);
        }
        m=i;
        return m;
    
    }
    
    //调用伪随机数的产生数据
    int Pseudo_random_number()
    {
        int i;
        srand((unsigned)time(0));  //参数seed是rand()的种子,用来初始化rand()的起始值。
        //输入作业数
        m=rand()%23+5;
        for(i=1; i<=m; i++)
        {
            jcb[i].id=i;
            //作业到达时间
            jcb[i].arrtime=rand()%29+1;
            //作业运行时间
            jcb[i].reqtime=rand()%7+1;
        }
        printf("
     id    作业到达时间     作业运行所需要时间
    ");
        for(i=1; i<=m; i++)
        {
            printf("
    %3d%12d%15d
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime);
        }
        return m;
    
    }
    //先到先服务
    void TheFCFS()
    {
        int i,j;
    
        float sum=0.0,acount=0.0;
        struct jcb temp;
    
        
        printf("**********先来先服务算法FCFS*************
    ");
        //ReadFile();
        for(i=0;i<m;i++)
        {
            for(j=i+1;j<m;j++)
            {
                if(jcb[i].arrtime>jcb[j].arrtime)
                {
                    temp=jcb[i];
                    jcb[i]=jcb[j];
                    jcb[j]=temp;
                }
            }
        }
        printf("
     id    作业到达时间     作业运行所需要时间
    ");
        for(i=0;i<m;i++)
        {
            printf("
    %3d%12d%15d
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime);
        }
        for(i=0;i<m;i++){
            jcb[i].finitime=systime+jcb[i].reqtime;
            jcb[i].ti=jcb[i].finitime-jcb[i].arrtime;
            jcb[i].TAWtime=(float)jcb[i].ti/jcb[i].reqtime;
            systime=jcb[i].finitime;
        }
        for(i=0;i<m;i++)
        {
            sum=sum+jcb[i].ti;
            acount=acount+jcb[i].TAWtime;
        }
            
            //jcb[0].ti=jcb[0].finitime-systime;
           printf("
    id  到达时间  运行时间  完成时间  周转时间  带权周转时间
    ");
        for(i=0;i<m;i++)
            printf("%d     %d		%d	     %d	     %d	      %.2f
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime,jcb[i].finitime,jcb[i].ti,jcb[i].TAWtime);
    
      
        printf("平均作业周转时间=%.2f
    ",sum/m);
        printf("平均作业周转时间=%.2f
    ",acount/m);
        printf("
    ");
        printf("
    ");
    
    }
    //计算周转时间,带权周转时间,平均周转时间
    void jisuan(int i,int j){
            
        float sum=0.0,acount=0.0;
        
            for(i=0;i<m;i++){
            jcb[i].finitime=systime+jcb[i].reqtime;
            jcb[i].ti=jcb[i].finitime-jcb[i].arrtime;
            jcb[i].TAWtime=(float)jcb[i].ti/jcb[i].reqtime;
            systime=jcb[i].finitime;
        }
        for(i=0;i<m;i++)
        {
            sum=sum+jcb[i].ti;
            acount=acount+jcb[i].TAWtime;
        }
            
            //jcb[0].ti=jcb[0].finitime-systime;
           printf("
    id  到达时间  运行时间  完成时间  周转时间  带权周转时间
    ");
    for(i=0;i<m;i++)
            printf("%d     %d		%d	     %d	     %d	      %.2f
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime,jcb[i].finitime,jcb[i].ti,jcb[i].TAWtime);
    
      
        printf("平均作业周转时间=%.2f
    ",sum/m);
        printf("平均作业周转时间=%.2f
    ",acount/m);
        printf("
    ");
        printf("
    ");
    }
    //短作业优先
    void TheSJF()
    {
            int i,j;
    
        float sum=0.0,acount=0.0;
        struct jcb temp;
        printf("**********先来先服务算法SJF*************
    ");
        //ReadFile();
        for(i=0;i<m;i++)
        {
            for(j=i+1;j<m;j++)
            {
                if(jcb[i].arrtime>jcb[j].arrtime)
                {
                    temp=jcb[i];
                    jcb[i]=jcb[j];
                    jcb[j]=temp;
                }
            }
        }
    
        printf("
     id    作业到达时间     作业运行所需要时间
    ");
        for(i=0;i<m;i++)
        {
            printf("
    %3d%12d%15d
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime);
        }
    
        for(i=1;i<m;i++){
            for(j=i+1;j<m;j++){
                if(jcb[i].reqtime>jcb[j].reqtime){
                    temp=jcb[i];
                    jcb[i]=jcb[j];
                    jcb[j]=temp;
                }
            }
        }
        jisuan(i,j);
    
    }
    //HRRF(最高响应比)算法调度 
    void TheHRRF(){
            int i,j;
    float sum=0.0,acount=0.0;
    
        struct jcb temp;
        printf("**********最高响应比算法HRRF*************
    ");
        //ReadFile();
        for(i=0;i<m;i++)
        {
            for(j=i+1;j<m;j++)
            {
                if(jcb[i].arrtime>jcb[j].arrtime)
                {
                    temp=jcb[i];
                    jcb[i]=jcb[j];
                    jcb[j]=temp;
                }
            }
        }
        for(i=1;i<m;i++){
            for(j=i+1;j<m;j++){
                if(jcb[i].reqtime>jcb[j].reqtime){
                    temp=jcb[i];
                    jcb[i]=jcb[j];
                    jcb[j]=temp;
                }
            }
        }
        printf("
     id    作业到达时间     作业运行所需要时间
    ");
        for(i=0;i<m;i++)
        {
            printf("
    %3d%12d%15d
    ",jcb[i].id,jcb[i].arrtime,jcb[i].reqtime);
        }
    
    
         printf("
    id    最高响应比
    ");
         for(j=1;j<m;j++)
        {
            jcb[j].TAtime=(float)(jcb[0].reqtime-jcb[j].arrtime);
            jcb[j].prio=1+jcb[j].TAtime/jcb[j].reqtime;
             printf("%d       %.2f
    ",jcb[j].id,jcb[j].prio);
        }
         for(i=1;i<m-1;i++){
              printf("
    id    最高响应比
    ");
             for(j=i+1;j<m;j++){
                 jcb[j].TAtime=jcb[j].TAtime+jcb[i].reqtime;
                 jcb[j].prio=1+jcb[j].TAtime/jcb[j].reqtime;
                 printf("%d       %.2f
    ",jcb[j].id,jcb[j].prio);
         }}
         jisuan(i,j);
    
    }
    
    
    
    void menu2()
    {
        printf("	****************************************
    ");
        printf("	         1、调用键盘输入数据            
    ");
        printf("	         2、调用文本写入数据            
    ");
        printf("	         3、调用伪随机数的产生数据      
    ");
        printf("	         0、退出系统                    
    ");
        printf("	****************************************
    ");
        printf("	请选择菜单项:");
    }
    
    void menu(){
        printf("	*****************************************************
    ");
        printf("	*                       welcome                     *
    ");
        printf("	*****************************************************
    ");
        printf("	*               1、FCFS(先到先服务)算法调度       *
    ");
        printf("	*               2、SJF(短作业优先)算法调度        *
    ");
        printf("	*               3、HRRF(最高响应比)算法调度       *
    ");
        printf("	*               0、后退到上一级菜单                 *
    ");
        printf("	*****************************************************
    ");
        printf("请选择功能<0~5>:");
    }
    
    void insert(int n)
    {
        int i,j;
        char name[10];
        int arrtime1;
        int reqtime1;
        printf("what?
    ");
            printf("输入作业名:");
            scanf("%s",name);
            printf("到达时间:");
            scanf("%d",&arrtime1);
            printf("要求服务时间:");
            scanf("%d",&reqtime1);
            printf("
    ");
        for(i=0;i<=n;i++)
        {
            if(arrtime1<job[i].arrtime)
            {
                for(j=n-1;j>=i;j--)
                {
                 job[j+1].arrtime=job[j].arrtime;
                 strcpy(job[j+1].name,job[j].name);
                 job[j+1].reqtime=job[j].reqtime;
    
                }
                job[i].arrtime=arrtime1;
                strcpy(job[i].name,name);
                job[i].reqtime=reqtime1;
                //n=n+1;
                break;
            }
            if((i=n)&&(arrtime1>=job[i].arrtime))
            {
                job[i].arrtime=arrtime1;
                job[i].reqtime=reqtime1;
                strcpy(job[i].name,name);
            }
        }
        for(i=0;i<=n;i++)
        {
            printf("N %d	%s	%d	%d
    ",i+1,job[i].name,job[i].arrtime,job[i].reqtime);
        }
    }
    
    void Delete(int n)
    {
    
        int i,j;
        int arrtime1;
            printf("what?
    ");
            printf("input the data to delete:");
            scanf("%d",&arrtime1);
        for(i=0;i<n;i++)
            {
                if(arrtime1==job[i].arrtime)
                {
                for(j=i+1;j<n;j++)
                {
                    job[j-1].arrtime=job[j].arrtime;
                    job[j-1].reqtime=job[j].reqtime;
                    strcpy(job[j-1].name,job[j].name);
                }
            }
        }
        printf("	name	arrtime	reqtime
    ");
        for(i=0;i<n-1;i++)
        {
            printf("N %d	%s	%d	%d
    ",i+1,job[i].name,job[i].arrtime,job[i].reqtime);
        }
    }
    void all(int n)
    {
        //int i,j;
        char ch;
        //int arrtime1;
        //int reqtime1;
        printf("Insert   or  Delete  or  Exit?");
        scanf("%s",&ch);
        if(ch=='I' || ch=='i')
        {
            insert(n);
        }
        else if(ch=='D' || ch=='d')
        {
        
            Delete(n);
            
        }
        else if(ch=='E' || ch=='e')
        {
            exit(0);
    
        }
    }
    
     //调用键盘输入数据 
    void input()
    {
        int i,j,n;
        //char ch[10];
        struct jcb temp;
        printf("	作业个数:");
        scanf("%d",&n);
        printf("
    ");
        for(i=0;i<n;i++){
            printf("第%d个作业:
    ",i+1);
            printf("输入作业名:");
            scanf("%s",job[i].name);
            printf("到达时间:");
            scanf("%d",&job[i].arrtime);
            printf("要求服务时间:");
            scanf("%d",&job[i].reqtime);
            printf("
    ");
        }
        
        for(i=0;i<n;i++){
            for(j=i+1;j<n;j++){
                if(job[i].arrtime>job[j].arrtime){
                    temp=job[i];
                    job[i]=job[j];
                    job[j]=temp;
                }
            }
        }
        printf("经按到达时间排序后,未达到队列是
    ");
        printf("	name	artime	rqtime
    ");
        for(i=0;i<n;i++){
            printf("N %d	%s	%d	%d
    ",i+1,job[i].name,job[i].arrtime,job[i].reqtime);
        }
        all(n);
        printf("
    	现在系统时间 0:
    ");
    }
    main(){
        int n,p;
        while(1){
        menu2();
        scanf("%d",&n);
        if(n==0) break;
        switch(n){
        case 1:input();
          while(1){
            menu();
            scanf("%d",&p);
            if(p==0) break;
            switch(p){
                case 1:TheFCFS();break;
                case 2:TheSJF();break;
                case 3:TheHRRF();break;
                case 0:p=0;break;}}
            break;
            case 2:ReadFile();
                  while(1){
                      menu();
                      scanf("%d",&p);
                      if(p==0) break;
                      switch(p){
                      case 1:TheFCFS();break;
                      case 2:TheSJF();break;
                      case 3:TheHRRF();break;
                    case 0:p=0;break;}}
                  break;
              case 3:Pseudo_random_number();
                  while(1){
                         menu();
                  scanf("%d",&p);
                  if(p==0) break;
                  switch(p){
                  case 1:TheFCFS();break;
                  case 2:TheSJF();break;
                  case 3:TheHRRF();break;
                case 0:p=0;break;}}
                  break; 
              case 0:n=0;break;
        }
        
        }
        printf("please any key to continue......");
            getch();
    }

     

  • 相关阅读:
    MiniUI破解方法
    mysql [索引优化] -- in or替换为union all
    MySQL匹配指定字符串的查询
    MySQL优化之like关键字
    Java身份证归属地目录树
    JS数字指定长度不足前补零的实现
    jQuery Distpicker插件 省市区三级联动 动态赋值修改地址
    JS 正则表达式从地址中提取省市县
    Eclipse/myEclipse 代码提示/自动提示/自动完成设置
    Spring Mvc配置多视图
  • 原文地址:https://www.cnblogs.com/4249ken/p/5419861.html
Copyright © 2020-2023  润新知