fork download
  1.  
  2. #include <iostream>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. struct Process {
  9. int pid; // معرف العملية
  10. int burst_time; // وقت التنفيذ
  11. int arrival_time; // وقت الوصول (مبسط هنا)
  12. };
  13.  
  14. // دالة مقارنة لفرز العمليات حسب وقت التنفيذ (SJF)
  15. bool compareProcesses(const Process& a, const Process& b) {
  16. return a.burst_time < b.burst_time;
  17. }
  18.  
  19. int main() {
  20. // تعريف العمليات (للتجربة، يمكن إدخالها من المستخدم)
  21. vector<Process> processes = {
  22. {1, 6, 0}, // P1: وقت اندفاع 6
  23. {2, 8, 0}, // P2: وقت اندفاع 8
  24. {3, 7, 0}, // P3: وقت اندفاع 7
  25. {4, 3, 0} // P4: وقت اندفاع 3 (الأقصر)
  26. };
  27.  
  28. // فرز العمليات بناءً على وقت الاندفاع (SJF)
  29. // في حالة وجود وقت وصول، يجب فرز أولاً حسب وقت الوصول ثم وقت الاندفاع
  30. sort(processes.begin(), processes.end(), compareProcesses);
  31.  
  32. cout << "معرف العملية (PID) | وقت الاندفاع (Burst Time)" << endl;
  33. cout << "---------------------------------------" << endl;
  34. for (const auto& p : processes) {
  35. cout << p.pid << "\t\t\t| " << p.burst_time << endl;
  36. }
  37.  
  38. // حساب وقت الانتظار والانتهاء (لعملية واحدة بعد الأخرى، مبسط)
  39. int currentTime = 0;
  40. int totalWaitingTime = 0;
  41. int totalTurnaroundTime = 0;
  42.  
  43. cout << "\n--- تسلسل التنفيذ ---" << endl;
  44. for (const auto& p : processes) {
  45. cout << "تنفيذ العملية P" << p.pid << " (وقت الاندفاع: " << p.burst_time << ")" << endl;
  46. currentTime += p.burst_time;
  47. int turnaroundTime = currentTime; // وقت الانتهاء هنا
  48. int waitingTime = turnaroundTime - p.burst_time; // وقت الانتظار (بافتراض وقت وصول 0)
  49.  
  50. totalWaitingTime += waitingTime;
  51. totalTurnaroundTime += turnaroundTime;
  52. }
  53.  
  54. cout << "\nمتوسط وقت الانتظار: " << (double)totalWaitingTime / processes.size() << endl;
  55. cout << "متوسط وقت الانتهاء (Turnaround Time): " << (double)totalTurnaroundTime / processes.size() << endl;
  56.  
  57. return 0;
  58. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
معرف العملية (PID) | وقت الاندفاع (Burst Time)
---------------------------------------
4			| 3
1			| 6
3			| 7
2			| 8

--- تسلسل التنفيذ ---
تنفيذ العملية P4 (وقت الاندفاع: 3)
تنفيذ العملية P1 (وقت الاندفاع: 6)
تنفيذ العملية P3 (وقت الاندفاع: 7)
تنفيذ العملية P2 (وقت الاندفاع: 8)

متوسط وقت الانتظار: 7
متوسط وقت الانتهاء (Turnaround Time): 13