#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Process {
int pid; // معرف العملية
int burst_time; // وقت التنفيذ
int arrival_time; // وقت الوصول (مبسط هنا)
};
// دالة مقارنة لفرز العمليات حسب وقت التنفيذ (SJF)
bool compareProcesses(const Process& a, const Process& b) {
return a.burst_time < b.burst_time;
}
int main() {
// تعريف العمليات (للتجربة، يمكن إدخالها من المستخدم)
vector<Process> processes = {
{1, 6, 0}, // P1: وقت اندفاع 6
{2, 8, 0}, // P2: وقت اندفاع 8
{3, 7, 0}, // P3: وقت اندفاع 7
{4, 3, 0} // P4: وقت اندفاع 3 (الأقصر)
};
// فرز العمليات بناءً على وقت الاندفاع (SJF)
// في حالة وجود وقت وصول، يجب فرز أولاً حسب وقت الوصول ثم وقت الاندفاع
sort(processes.begin(), processes.end(), compareProcesses);
cout << "معرف العملية (PID) | وقت الاندفاع (Burst Time)" << endl;
cout << "---------------------------------------" << endl;
for (const auto& p : processes) {
cout << p.pid << "\t\t\t| " << p.burst_time << endl;
}
// حساب وقت الانتظار والانتهاء (لعملية واحدة بعد الأخرى، مبسط)
int currentTime = 0;
int totalWaitingTime = 0;
int totalTurnaroundTime = 0;
cout << "\n--- تسلسل التنفيذ ---" << endl;
for (const auto& p : processes) {
cout << "تنفيذ العملية P" << p.pid << " (وقت الاندفاع: " << p.burst_time << ")" << endl;
currentTime += p.burst_time;
int turnaroundTime = currentTime; // وقت الانتهاء هنا
int waitingTime = turnaroundTime - p.burst_time; // وقت الانتظار (بافتراض وقت وصول 0)
totalWaitingTime += waitingTime;
totalTurnaroundTime += turnaroundTime;
}
cout << "\nمتوسط وقت الانتظار: " << (double)totalWaitingTime / processes.size() << endl;
cout << "متوسط وقت الانتهاء (Turnaround Time): " << (double)totalTurnaroundTime / processes.size() << endl;
return 0;
}