2013-10-21 42 views
0

我想在C++中實現FCFS CPU調度。我有下面的代碼運行錯誤免費,但給我一些數字,如等待時間的值,響應時間和轉換時間除了第一個計算的所有進程「垃圾數據」C++中的FCFS CPU調度程序

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 

class ProcessInfo 
{ 
public: 
    string ProcessID; 
    int BurstTime; 
    int Arrival; 

    int WaitingTime; 
    int ResponseTime; 
    int TurnaroundTime; 
}; 

int main() 
{ 
    ProcessInfo P1, P2, P3 = ProcessInfo(); 

    ProcessInfo Array[3] = {P1, P2, P3}; 

    for(int i = 0; i < 3; i++) 
    { 
     cout<<"Please enter Process ID for process "<<i<<endl; 
     cin>>Array[i].ProcessID; 

     cout<<"Please enter Burst Time for process "<<i<<endl; 
     cin>>Array[i].BurstTime; 

     cout<<"Please enter Arrival Time for process "<<i<<endl; 
     cin>>Array[i].Arrival; 
    } 

    if (Array[0].Arrival < Array[1].Arrival && Array[0].Arrival < Array[2].Arrival) 
    { 
     if (Array[1].Arrival < Array[2].Arrival) 
     { 
      P1.WaitingTime = 0; 
      P1.ResponseTime = 0; 
      P1.TurnaroundTime = P1.BurstTime; 

      P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival); 
      P2.ResponseTime = 0; 
      P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime; 

      P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival); 
      P3.ResponseTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival) ; 
      P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime; 

      cout<<"Order of processes is: P1, P2, P3"<<endl; 

      cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
      cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
      cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 

      cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
      cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
      cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 

      cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
      cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
      cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 
     } 
     else 
      if (Array[2].Arrival < Array[1].Arrival) 
      { 
       P1.WaitingTime = 0; 
       P1.ResponseTime = 0; 
       P1.TurnaroundTime = P1.BurstTime; 

       P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival); 
       P3.ResponseTime = P3.WaitingTime; 
       P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime; 

       P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival); 
       P2.ResponseTime = P2.WaitingTime; 
       P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime; 

       cout<<"Order of processes is: P1, P3, P2"<<endl; 

       cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
       cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
       cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 

       cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
       cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
       cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 

       cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
       cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
       cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 
      } 
    } 

    else 
     if(Array[1].Arrival < Array[0].Arrival && Array[1].Arrival < Array[2].Arrival) 
     { 
      if (Array[2].Arrival < Array[0].Arrival) 
      { 
       P2.WaitingTime = 0; 
       P2.ResponseTime = 0; 
       P2.TurnaroundTime = P2.BurstTime; 

       P3.WaitingTime = P2.TurnaroundTime - (P3.Arrival - P2.Arrival); 
       P3.ResponseTime = P3.WaitingTime; 
       P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime; 

       P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival); 
       P1.ResponseTime = P1.WaitingTime; 
       P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime; 

       cout<<"Order of processes is: P2, P3, P1"<<endl; 

       cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
       cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
       cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 

       cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
       cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
       cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 

       cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
       cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
       cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 
      } 
      else 
       if (Array[0].Arrival < Array[2].Arrival) 
       { 
        P2.WaitingTime = 0; 
        P2.ResponseTime = 0; 
        P2.TurnaroundTime = P2.BurstTime; 

        P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival); 
        P1.ResponseTime = P1.WaitingTime; 
        P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime; 

        P3.WaitingTime = P1.TurnaroundTime - (P3.Arrival - P1.Arrival); 
        P3.ResponseTime = P3.WaitingTime; 
        P3.TurnaroundTime = P3.WaitingTime + P3.BurstTime; 

        cout<<"Order of processes is: P2, P1, P3"<<endl; 

        cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
        cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
        cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 

        cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
        cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
        cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 

        cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
        cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
        cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 

       } 
     } 
     else 

      if(Array[2].Arrival < Array[1].Arrival && Array[2].Arrival < Array[0].Arrival) 
      { 
       if (Array[1].Arrival < Array[0].Arrival) 
       { 
        P3.WaitingTime = 0; 
        P3.ResponseTime = 0; 
        P3.TurnaroundTime = P1.BurstTime; 

        P2.WaitingTime = P3.TurnaroundTime - (P2.Arrival - P3.Arrival); 
        P2.ResponseTime = P2.WaitingTime; 
        P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime; 

        P1.WaitingTime = P2.TurnaroundTime - (P1.Arrival - P2.Arrival); 
        P1.ResponseTime = P1.WaitingTime; 
        P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime; 

        cout<<"Order of processes is: P3, P2, P1"<<endl; 

        cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
        cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
        cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 

        cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
        cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
        cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 

        cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
        cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
        cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 
       } 
       else 
        if (Array[0].Arrival < Array[1].Arrival) 
        { 
         P3.WaitingTime = 0; 
         P3.ResponseTime = 0; 
         P3.TurnaroundTime = P1.BurstTime; 

         P1.WaitingTime = P3.TurnaroundTime - (P1.Arrival - P3.Arrival); 
         P1.ResponseTime = P1.WaitingTime; 
         P1.TurnaroundTime = P1.WaitingTime + P1.BurstTime; 

         P2.WaitingTime = P1.TurnaroundTime - (P2.Arrival - P1.Arrival); 
         P2.ResponseTime = P2.WaitingTime; 
         P2.TurnaroundTime = P2.WaitingTime + P2.BurstTime; 

         cout<<"Order of processes is: P3, P1, P2"<<endl; 

         cout<<"The waiting time for P3: "<< P3.WaitingTime<<endl; 
         cout<<"The response time for P3: "<<P3.ResponseTime<<endl; 
         cout<<"The Turnaround time for P3: "<<P3.TurnaroundTime<<endl; 

         cout<<"The waiting time for P1: "<< P1.WaitingTime<<endl; 
         cout<<"The response time for P1: "<<P1.ResponseTime<<endl; 
         cout<<"The Turnaround time for P1: "<<P1.TurnaroundTime<<endl; 

         cout<<"The waiting time for P2: "<< P2.WaitingTime<<endl; 
         cout<<"The response time for P2: "<<P2.ResponseTime<<endl; 
         cout<<"The Turnaround time for P2: "<<P2.TurnaroundTime<<endl; 
        } 
      } 



    } 

回答

0

不要使用P1,P2和P3進行計算。而是使用Array [0],Array [1]和Array [2]。

+0

謝謝。它的工作,但我不明白爲什麼。 – Scorps

0

您不會初始化變量P1P2,因此這些結構的內容將是未定義的。

這將使操作,如

P1.TurnaroundTime = P1.BurstTime; 

不確定的爲好。

如果您想要良好的起始值,請添加默認構造函數。

+0

添加以下默認構造函數 – Scorps

+0

類ProcessInfo { 市民: \t字符串的ProcessID; \t int BurstTime; \t int抵達; \t int WaitingTime; \t int ResponseTime; \t int TurnaroundTime; \t ProcessInfo() \t { \t \t ProcessID =「」; \t \t BurstTime = 0; \t \t Arrival = 0; \t \t WaitingTime = 0; \t \t ResponseTime = 0; \t \t TurnaroundTime = 0; \t} }; 現在它給了我所有的值爲零 – Scorps

+0

@Scorps你可能想在調試器中逐行執行代碼,看看它做了你想做的事情並設置你想要的值。 –