0

構造体のベクトルがあり、構造体は次のようになっています。

struct myData{
    int ID;
    int arrivalTime;
    int burstTime;
};

このデータをベクトルに入力した後:

1 5 16
4 7 12
3 12 4
2 7 8

各行が個々の構造体のID(任意、到着の順序を示さない)、arrivalTime、burstTimeである場合、「for」または「while」ループを使用して、ベクトルのインデックスをステップ実行し、次のようにデータを計算するにはどうすればよいですか。このようなものを印刷できますか?

Time 0  Processor is Idle
Time 5 Process 1 starts running
Time 21 Process 2 is running
Time 29 Process 4 is running
Time 41 Process 3 is running

私ができると思った方法は、現在の時刻(現在の時刻はすでに実行されているプロセスのバースト時間の合計)を整数で追跡することでしたが、そのアルゴリズムを理解できないようです。アイドル時間(プロセッサが何も実行しておらず、新しいタスクがまだ到着していない場合)を考慮し、他の数値も追跡します。簡単にするために、2つのプロセスが同時に到着したときに、ID番号の小さい方を処理することにしました。私がやろうとしていることを示すためにここに多くのコードを入れなかったことは知っていますが、それをかなり明確に説明したことを願っています。私はこの問題に対する疑似コードアルゴリズムの解決策を探していますが、(C ++で?)コード化されたものにはノーとは言いません。

追記として、データへのアクセス方法を明確に伝えることができなかった場合は、次のようにします。

cout << structVector[0].ID << "\n";
cout << structVector[0].arrivalTime << "\n";
cout << structVector[0].burstTime << "\n";

印刷します

1
5
16

疑似コードまたは実際のコードのヘルプは大歓迎です!!! この投稿を数回読んだ後、私はこの質問についてかなり一般的であることに気付きましたが、このデータの計算方法を理解するための助けが欲しいです。

4

1 に答える 1

1

まず、到着時間に基づいてベクトルを並べ替えます。次に、次のコードはあなたが探しているものを達成します。

int i = 0, time = 0;

while (i < vec.size())
{
if (vec[i]. arrivalTime > time)
cout << "Time " << time << "process is idle";

time += vec[i].arrivalTime;
cout << "Time " << time << " Process " << vec[i].ID << " is running" << endl;

time += vec[i].burstTime;

i++;
}
于 2012-10-07T10:47:54.927 に答える