注册 登录
编程论坛 C++教室

作业调度,求指教,同学习,同进步。

不玩虚的 发布于 2012-12-29 10:37, 740 次点击
#include <iostream>
#include <iomanip>
using namespace std;
typedef struct task
{    int id;
    char name[5];//作业名称
    float rtime;//提交时间
    float space;//存储空间
    float btime;//开始时间
    float ftime;//完成时间
    float wtime;//等待时间
    float runtime;//运行时间

}task;
void input(int n,task *a)
{    cout<<"请输入作业编号,名称,提交时间,运行时间,存储空间:"<<endl;

    for(int i=0;i<n;i++)
    {   
        cin>>a[i].id>>a[i].name>>a[i].rtime>>a[i].runtime>>a[i].space;
        a[i].btime=0;
        a[i].wtime=0;
        a[i].ftime=0;
    }

}
void fcfs(int n,task *a)
{
    a[0].btime=a[0].rtime;
    a[0].ftime=a[0].btime+a[0].runtime;
    a[0].wtime=a[0].btime-a[0].rtime;
    for(int j=1;j<n;j++)
    {a[j].btime=a[j-1].ftime;//开始时间
        a[j].ftime=a[j].btime+a[j].runtime;//完成时等待时间
        a[j].wtime=a[j].btime-a[j].rtime;//
    }
}

void sjf(int n,task *a)
{    int j,k,c,b;
    task t;
    a[0].btime=a[0].rtime;
    a[0].ftime=a[0].btime+a[0].runtime;
    a[0].wtime=a[0].btime-a[0].rtime;
    for( j=1;j<n;j++)
    {k=j;
        while(a[k].rtime<=a[j-1].ftime&&k<n)
        {
            k++;
        }
        for(c=j;c<k;c++)
        {
            for(b=c+1;b<k;b++)
            {
                if(a[c].runtime>a[b].runtime)
                {
                    t=a[c];
                    a[c]=a[b];
                    a[b]=t;
                }
            }
        }
        a[j].btime=a[j-1].ftime;
        a[j].ftime=a[j].btime+a[j].runtime;
        a[j].wtime=a[j].btime-a[j].rtime;
        
    }

            
        
}
void smory(int n,task *a)
{int j,k,c,b;
    task t;
    a[0].btime=a[0].rtime;
    a[0].ftime=a[0].btime+a[0].runtime;
    a[0].wtime=a[0].btime-a[0].rtime;
    for( j=1;j<n;j++)
    {k=j;
        while(a[k].rtime<=a[j-1].ftime&&k<n)
        {
            k++;
        }
        for(c=j;c<k;c++)//冒泡算法进行排序
        {
            for(b=c+1;b<k;b++)
            {
                if(a[c].space>a[b].space)
                {
                    t=a[c];
                    a[c]=a[b];
                    a[b]=t;
                }
            }
        }
        a[j].btime=a[j-1].ftime;
        a[j].ftime=a[j].btime+a[j].runtime;
        a[j].wtime=a[j].btime-a[j].rtime;
        
    }
}
void output(int n,task *a)
{    cout<<"id"<<setw(8)<<"name"<<setw(8)<<"btime"<<setw(8)<<"ftime"<<setw(8)<<"wtime"<<endl;
    for(int i=0;i<n;i++)
    cout<<a[i].id<<setw(8)<<a[i].name<<setw(8)<<a[i].btime<<setw(8)<<a[i].ftime<<setw(8)<<a[i].wtime<<endl;
}

int main()
{    task *a;
    int n;
    cout<<"请输入作业总数n:"<<endl;
    cin>>n;
    a=new task [n];
    input(n,a);
    cout<<"先来先服务:"<<endl;
    fcfs(n,a);
    output(n,a);
    cout<<"短作业优先:"<<endl;
    sjf(n,a);
    output(n,a);
    cout<<"存储空间最小:"<<endl;
    smory(n,a);
    output(n,a);
    return 0;
}
   
8 回复
#2
wp2319572012-12-29 10:49
是秀代码 还是提问来着  没看明白哦
#3
不玩虚的2012-12-29 11:01
来提问,要是不用排序怎么弄啊?,这个写法的时间代价太大啊。没别的意思,只是为了学习。
#4
额外覆盖2012-12-29 13:06
蹭分!你是想不用排序干嘛?
#5
不玩虚的2012-12-29 17:31
恩啊,加上排序就是3重循环,时间代价是O(n^3)啊,不用排序行不?
#6
liqingqinger2013-01-04 21:39
那个啥 想请教哈 你每部分函数的功能是什么
#7
不玩虚的2013-01-17 14:25
同学习,共进步。
#8
sjtnzn2013-01-23 16:15
我复制代码想运行一下试试,提示一个错误,eh.h仅属于C++程序是什么意思。我建的文件后缀就是.CPP啊
#9
不玩虚的2014-12-03 14:54
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111166666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
1