(ファック)先着順のスケジューリングアルゴリズム

コード(自分で回避!)

#include <stdio.h>
struct sjf {
char name [10];
float dt; //到着時間
float st; //サービス時間
float begin_time; //実行時間の開始
float wct; //完了時間の実行
float zt; / /ターンオーバー時間
float dczt; //重み付きターンアラウンドタイム
};
sjf a [100];
void input(sjf * p、int n)
{
int i;
for(i = 0; i <= n-1; i ++)
{
printf( "\ n \ t *********%dプロセスの情報を入力してください:\ n"、i + 1);
printf( "\ tプロセス名:");
scanf( "% s "、&p [i] .name);
printf(" \ tarrival time: ");
scanf("%f "、&p [i] .dt);
printf(" \ tservice time: ");
scanf( "%f"、&p [i] .st);
}
}
void Print(sjf * p、float dt、float st、float begin_time、float wct、float zt、float dczt、int n)
{
int k;
float sum1 = 0、sum2 = 0;
printf( "\ nrun order:");
printf( "%s"、p [0] .name);
for(k = 1; k <n; k ++)
{
printf( " ->%s "、p [k] .name);
}
printf(" \ n \ nプロセス情報は次のとおりです:\ n ");
printf(" \ nプロセス名到着時間サービス時間開始時間完了時間ターンアラウンドタイムゾーン右ターンアラウンドタイム\ n ");
for(k = 0; k <n; k ++)
{
printf("%3s \ t%3.0f \ t \ t%.0f \ t%.0f \ t%3.0f \ t \ t%.0f \ t%3.2f \ n "、p [k] .name、p [k] .dt、p [k] .st、p [k] .begin_time、p [k] .wct、p [k] .zt、p [k] .dczt);
sum1 + = p [k] .zt;
sum2 + = p [k] .dczt;
}
printf( "\ nAverage turnaround time:%. 2f \ n"、sum1 / n);
printf( "\ n平均加重ターンアラウンド時間:%.2f \ n \ n"、sum2 / n);
}
// sort
void sort(sjf * p、int n)
{
for(int i = 0 ; i <= n-1;i ++)
for(int j = 0; j <= i; j ++)
if(p [i] .dt <p [j] .dt)
{
sjf temp;
temp = p [i];
p [i] = p [j];
p [j] = temp;
}
}
//运行阶段
void deal(sjf * p、float dt、float st、float begin_time、float wct、float&zt、float&dczt、int n)
{int k;
for(k = 0; k <= n-1; k ++)
{
if(k == 0)
{
p [k] .begin_time = p [k] .dt;
p [k] .wct = p [k] .dt + p [k] .st;
}
else
{
p [k] .begin_time = p [k-1] .wct;
p [k] .wct = p [k-1] .wct + p [k] .st;
}
}
for(k = 0; k <= n-1; k ++)
{
p [k] .zt = p [k] .wct-p [k] .dt;
p [k] .dczt = p [k] .zt / p [k] .st;
}
}
void SJF(sjf * p、int n)
{
float dt = 0、st = 0、begin_time = 0、wct = 0、zt = 0、dczt = 0; //構造
ソートを初期化(p、n);
for(int m = 0; m <n-1 ; m ++)
{
if(m == 0)
p [m] .wct = p [m] .dt + p [m] .st;
else
p [m] .wct = p [m-1] .wct + p [m] .st;
int i = 0;
for(int n = m + 1; n <= n-1; n ++)
{
if(p [n] .dt <= p [m] .wct)//判断各完了後にメモリに到着するプロセスの数
i ++;
}
float min = p [m + 1] .st;
int next = m + 1; // m + 1 = n
for(int k = m + 1; k <m + i; k ++)//到着するプロセスの中で最小のプロセスを見つける
{
if(p [k + 1] .st <min)
{
min = p [k + 1] .st;
next = k + 1 ;
}
}
sjf temp;
temp = p [m + 1];
p [m + 1] = p [next];
p [next] = temp;
}
deal(p、dt、st、begin_time、wct、zt、dczt、n);

Print(p、dt、st、begin_time、wct、zt、dczt、n);
}
int main()
{
int n;
printf( " \ n --------------先着順のスケジューリングアルゴリズム----------------- \ n ");
printf(" \ n \ t プロセス数を入力してください: ");
scanf("%d "、&n);
input(a、n);
sjf * b = a;
sjf * c = a;
SJF(b、n);
return 0;
}

 

おすすめ

転載: www.cnblogs.com/1314-520/p/12706996.html