Can you fix the gantt chart code and the output should same like the image below? #include #include #include struct Process {     int processId;     int burstTime;     int priority; }; void multiLevelQueueScheduling(const std::vector& processes, int quantumTime) {     std::queue fcfs;     std::queue rr;     std::queue priority;     for (const auto& process : processes) {         if (process.priority == 1)             fcfs.push(process);         else if (process.priority == 2)             rr.push(process);         else if (process.priority == 3 || process.priority == 4)             priority.push(process);     }     std::cout << "Gantt Chart:\n";     std::cout << "-------------\n";     int totalTime = 0;     while (!fcfs.empty() || !rr.empty() || !priority.empty()) {         if (!fcfs.empty()) {             Process process = fcfs.front();             fcfs.pop();             std::cout << "| P" << process.processId << " ";             int executionTime = std::min(quantumTime, process.burstTime);             process.burstTime -= executionTime;             totalTime += executionTime;             std::cout << " - " << totalTime << " ";             if (process.burstTime > 0)                 fcfs.push(process);         }         if (!rr.empty()) {             Process process = rr.front();             rr.pop();             std::cout << "| P" << process.processId << " ";             int executionTime = std::min(quantumTime, process.burstTime);             process.burstTime -= executionTime;             totalTime += executionTime;             std::cout << " - " << totalTime << " ";             if (process.burstTime > 0)                 rr.push(process);         }         if (!priority.empty()) {             Process process = priority.front();             priority.pop();             std::cout << "| P" << process.processId << " ";             int executionTime = std::min(quantumTime, process.burstTime);             process.burstTime -= executionTime;             totalTime += executionTime;             std::cout << " - " << totalTime << " ";             if (process.burstTime > 0)                 priority.push(process);         }     }     std::cout << "|\n";     std::cout << "-------------\n\n";     std::vector completionTime(processes.size());     std::vector turnaroundTime(processes.size());     std::vector waitingTime(processes.size());     int currentEndTime = 0;     for (const auto& process : processes) {         int processIndex = process.processId - 1;         currentEndTime += process.burstTime;         completionTime[processIndex] = currentEndTime;         turnaroundTime[processIndex] = completionTime[processIndex];         waitingTime[processIndex] = turnaroundTime[processIndex] - process.burstTime;     }     // table in the output     std::cout << "Process\tBurst Time\tPriority\tCompletion Time\tTurnaround Time\tWaiting Time\n";     for (const auto& process : processes) {         int processIndex = process.processId - 1;         std::cout << "P" << process.processId << "\t"             << process.burstTime << "\t\t"             << process.priority << "\t\t"             << completionTime[processIndex] << "\t\t"             << turnaroundTime[processIndex] << "\t\t"             << waitingTime[processIndex] << std::endl;     }     std::cout << std::endl;     float avgWaitingTime = 0;     float avgTurnaroundTime = 0;     for (const auto& process : processes) {         avgWaitingTime += waitingTime[process.processId - 1];         avgTurnaroundTime += turnaroundTime[process.processId - 1];     }     avgWaitingTime /= processes.size();     avgTurnaroundTime /= processes.size();     std::cout << "Average Waiting Time: " << avgWaitingTime << std::endl;     std::cout << "Average Turnaround Time: " << avgTurnaroundTime << std::endl; } int main() {     // processes     std::vector processes = {         {1, 8, 4},         {2, 6, 1},         {3, 1, 2},         {4, 9, 2},         {5, 3, 3}     };     int quantumTime = 2;     multiLevelQueueScheduling(processes, quantumTime);     return 0; }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

Can you fix the gantt chart code and the output should same like the image below?

#include <iostream>
#include <queue>
#include <vector>

struct Process {
    int processId;
    int burstTime;
    int priority;
};

void multiLevelQueueScheduling(const std::vector<Process>& processes, int quantumTime) {
    std::queue<Process> fcfs;
    std::queue<Process> rr;
    std::queue<Process> priority;


    for (const auto& process : processes) {
        if (process.priority == 1)
            fcfs.push(process);
        else if (process.priority == 2)
            rr.push(process);
        else if (process.priority == 3 || process.priority == 4)
            priority.push(process);
    }


    std::cout << "Gantt Chart:\n";
    std::cout << "-------------\n";
    int totalTime = 0;


    while (!fcfs.empty() || !rr.empty() || !priority.empty()) {
        if (!fcfs.empty()) {
            Process process = fcfs.front();
            fcfs.pop();

            std::cout << "| P" << process.processId << " ";
            int executionTime = std::min(quantumTime, process.burstTime);
            process.burstTime -= executionTime;
            totalTime += executionTime;
            std::cout << " - " << totalTime << " ";

            if (process.burstTime > 0)
                fcfs.push(process);
        }

        if (!rr.empty()) {
            Process process = rr.front();
            rr.pop();

            std::cout << "| P" << process.processId << " ";
            int executionTime = std::min(quantumTime, process.burstTime);
            process.burstTime -= executionTime;
            totalTime += executionTime;
            std::cout << " - " << totalTime << " ";

            if (process.burstTime > 0)
                rr.push(process);
        }

        if (!priority.empty()) {
            Process process = priority.front();
            priority.pop();

            std::cout << "| P" << process.processId << " ";
            int executionTime = std::min(quantumTime, process.burstTime);
            process.burstTime -= executionTime;
            totalTime += executionTime;
            std::cout << " - " << totalTime << " ";

            if (process.burstTime > 0)
                priority.push(process);
        }
    }

    std::cout << "|\n";
    std::cout << "-------------\n\n";


    std::vector<int> completionTime(processes.size());
    std::vector<int> turnaroundTime(processes.size());
    std::vector<int> waitingTime(processes.size());

    int currentEndTime = 0;
    for (const auto& process : processes) {
        int processIndex = process.processId - 1;
        currentEndTime += process.burstTime;
        completionTime[processIndex] = currentEndTime;
        turnaroundTime[processIndex] = completionTime[processIndex];
        waitingTime[processIndex] = turnaroundTime[processIndex] - process.burstTime;
    }

    // table in the output
    std::cout << "Process\tBurst Time\tPriority\tCompletion Time\tTurnaround Time\tWaiting Time\n";
    for (const auto& process : processes) {
        int processIndex = process.processId - 1;
        std::cout << "P" << process.processId << "\t"
            << process.burstTime << "\t\t"
            << process.priority << "\t\t"
            << completionTime[processIndex] << "\t\t"
            << turnaroundTime[processIndex] << "\t\t"
            << waitingTime[processIndex] << std::endl;
    }

    std::cout << std::endl;


    float avgWaitingTime = 0;
    float avgTurnaroundTime = 0;
    for (const auto& process : processes) {
        avgWaitingTime += waitingTime[process.processId - 1];
        avgTurnaroundTime += turnaroundTime[process.processId - 1];
    }

    avgWaitingTime /= processes.size();
    avgTurnaroundTime /= processes.size();


    std::cout << "Average Waiting Time: " << avgWaitingTime << std::endl;
    std::cout << "Average Turnaround Time: " << avgTurnaroundTime << std::endl;
}

int main() {
    // processes
    std::vector<Process> processes = {
        {1, 8, 4},
        {2, 6, 1},
        {3, 1, 2},
        {4, 9, 2},
        {5, 3, 3}
    };


    int quantumTime = 2;


    multiLevelQueueScheduling(processes, quantumTime);

    return 0;
}

Gantt Chart
GOOONSGR
P2 P3 PI P2 рч
0 2 3 5
7 9 11 13
P5
p2
P4
15
PI
17
рч
19
P5
20
P4 PI P4 PI
25
22
24
27
Transcribed Image Text:Gantt Chart GOOONSGR P2 P3 PI P2 рч 0 2 3 5 7 9 11 13 P5 p2 P4 15 PI 17 рч 19 P5 20 P4 PI P4 PI 25 22 24 27
Expert Solution
steps

Step by step

Solved in 3 steps with 1 images

Blurred answer
Knowledge Booster
Lists
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education