(操作)短いジョブスケジューリングアルゴリズム

コード(自分で回避!)

#include <stdio.h> 

struct sjf //プロセスの構造を定義する
{
char name [10]; //プロセス名
float到着時間; //到着時間
フロートservicetime; //サービス
時間
フロートstarttime; // 開始時間フロートfinishtime; //完了時間
フロートzztime ; //ターンオーバー時間
float dqzztime; //重み付きターンアラウンドタイム
};
sjf b [100]; //ショートジョブプライオリティアルゴリズムプロセスの最大数を定義
void Sinput(sjf * p、int N)//入力関数
{
int i ;
printf( "プロセス名、到着時間、サービス時間を入力:\ n");
for(i = 0; i <= N-1; i ++)
{
printf( "%dプロセスの名前、到着時間を入力し、サービス時間: "、i + 1);
scanf("%s%f%f "、&p [i] .name、&p [i] .arrivetime、&p [i] .servicetime);

}
} //それぞれを出力プロセス情報

void
SPrint(sjf * p、float到着時間、floatサービス時間、float開始時間、float終了時間、float zztime、float dqzztime、int N)
{
int k;
printf( "\ n执行顺序:\ n");
printf( "%s"、p [0] .name);
for(k = 1; k <N; k ++)
{
printf( "-%s"、p [k] .name);
}
printf( "\ n進程名\ tarrive \ tservice \ tstart \ tfinish \ tzz \ tdqzz \ n");
for(k = 0; k <= N-1; k ++)
{
printf( "%s \ t%-。2f \ t%-。2f \ t%-。2f \ t%-。2f \ t%-。 2f \ t%-。2f \ t \ n \ n "、p [k] .name、p [k] .arrivetime、p [k] .servicetime、p [k] .starttime、p [k] .finishtime、 p [k] .zztime、p [k] .dqzztime);
}
} //输出执行顺序

void Ssort(sjf * p、int N)//短短作业优先算法排序
{
for(int i = 1; i <= N-1; i ++)
for(int j = 1; j <= i;
if(p [i] .servicetime <p [j] .servicetime)
{
sjf temp;
temp = p [i];
p [i] = p [j];
p [j] = temp;
}
} //実行結果(バブリングソート)

void Sdeal(sjf * p、float到着時間、floatサービス時間、float開始時間、float終了時間、float&zztime、float&dqzztime、int N)
{
int k;
for(k = 0; k <= N-1; k ++)
{
if(k == 0)
{
p [k] .starttime = p [k] .arrivetime;
p [k] .finishtime = p [k] .arrivetime + p [k] .servicetime;
}
else
{
p [k] .starttime = p [k-1] .finishtime; //開始時間=前のプロセスの完了時間
p [k] .finishtime = p [k-1] .finishtime + p [k] .servicetime; / /終了時間=前のプロセスの完了時間+現在のプロセスのサービス時間

}
(k = 0; k <= N-1; k ++)
{
p [k] .zztime = p [k] .finishtime-p [k] .arrivetime; //ターンオーバー時間=完了時間-到着時間
p [k] .dqzztime = p [k] .zztime / p [k] .servicetime; //重み付きターンアラウンドタイム=ターンアラウンドタイム/サービス時間
}
} //さまざまな時間を計算

void SJF(sjf * p、int N)
{
float到着時刻= 0、サービス時刻= 0、開始時刻= 0、終了時刻= 0、zztime = 0、dqzztime = 0; //初期
ソート(p、N); //呼び出される
Sdealの並べ替え(p、arrivatetime、servicetime、starttime、finishtime、zztime、dqzztime、N); //さまざまな時間を
取得SPrint(p、arrivatetime、servicetime、starttime、finishtime、zztime、dqzztime、N); //結果を出力する

int main()//メイン関数
{
int M;
printf( "Short job priority schedule algorithm \ n");
printf( "Number of input processes:");
scanf( "%d"、&M);
Sinput(b、M );
SJF(b、M);
return 0;
}

 

おすすめ

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