zoukankan      html  css  js  c++  java
  • 操作系统

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<time.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("E:/zydd.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~3>:");
    }

    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......");
    getchar();
    }

  • 相关阅读:
    基于session做的权限控制
    spring有关jar包的作用
    Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法
    Android Handler机制(四)---Handler源码解析
    System.currentTimeMillis()与SystemClock.uptimeMillis()
    【转】博客美化(6)为你的博文自动添加目录
    Android Handler机制(三)----Looper源码解析
    Android Handler机制(二)---MessageQueue源码解析
    Android Handler机制(一)---Message源码分析
    关于Android Force Close 出现的原因 以及解决方法
  • 原文地址:https://www.cnblogs.com/zhenzengwen/p/5421998.html
Copyright © 2011-2022 走看看