ما هي طريقة عمل كود للSJF non preemptive ؟

أريد طريقة عمل كود للSJF non preemptive algorithm بحيث تقرأ من ملف وتضع الout في ملف آخر.

كتبت هذا الكود لكنه يعمل بشكل خاطئ.

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

class Process
{
    string name;
    int arrival;
    int processing;

    public:

        Process(string name, int arrival, int processing): name(name), arrival(arrival), processing(processing) {};

    string get_name()
    {
        return this->name;
    }

    int get_arrival()
    {
        return this->arrival;
    }

    int get_processing()

    {

        return this->processing;
    }
};

static int current_time = 0;

bool compare_arrival_times(Process a, Process b)

{

    if (a.get_arrival() - current_time < 0 && b.get_arrival() - current_time < 0)    //to check if the process has arrived(in the ready Q)

    {

        return a.get_processing() > b.get_processing();
    }
    else if (a.get_arrival() - current_time < 0)

    {

        return false;
    }
    else if (b.get_arrival() - current_time < 0)

    {

        return true;
    }

    return a.get_arrival() - current_time > b.get_arrival() - current_time;

}

int main()

{

    fstream input;

    string line;

    vector<Process> processes {};

    input.open("input.txt", ios:: in);

    while (getline(input, line))

    {

        vector<string> parts {};

        string current = "";

        int processes_num;

        for (size_t i = 0; i < line.size(); i++)

        {

            if (line[i] == ' ')

            {

                parts.push_back(string(current));

                current = "";
            }
            else if (!line[i + 1])
            {

                current.push_back(line[i]);

                parts.push_back(string(current));

                current = "";
            }
            else
            {

                current.push_back(line[i]);
            }
        }

        processes.push_back(Process(parts.at(0), stoi(string(parts.at(1))), stoi(string(parts.at(2)))));
    }

    input.close();

    sort(processes.begin(), processes.end(), compare_arrival_times);

    fstream out;

    out.open("out.txt", ios::trunc | ios::out);

    int temp;

    //string ready_q[];

    while (processes.size() > 0)

    {

        Process *now = &processes[processes.size() - 1];

        if (now->get_arrival() > current_time)

        {

            current_time = now->get_arrival();

            temp = current_time;
        }
        else

        {

            temp = current_time;

            current_time += now->get_processing();
        }

        out << now->get_name() << " (response=" << temp - now->get_arrival() << ", turnaround=" << current_time - now->get_arrival() << ", delay=" << current_time - now->get_arrival() - now->get_processing() << ")" << endl;

        processes.pop_back();

        sort(processes.begin(), processes.end(), compare_arrival_times);

        now = nullptr;

        delete now;
    }

    out.close();

}

//turnaround=end-arrival

//delay=turnaround-processing time

//response=once 1st-arrival

إجابات

لا يوجد أي إجابة بعد

أضف إجابة

يجب تسجيل الدخول حتى تتمكن من إضافة إجابة أو رد.

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة