#include <iostream>
#include <vector>
using namespace std;
void roundRobin( vector< int > & processes, int n, vector< int > & bt, vector< int > & at, int quantum) {
vector< int > rem_bt( bt) ;
vector< int > wt( n, 0 ) , tat( n, 0 ) ;
int time = 0 , completed = 0 ;
cout << "Process\t Burst Time\t Arrival Time\t Waiting Time\t Turnaround Time\n " ;
while ( completed < n) {
bool executed = false ;
for ( int i = 0 ; i < n; i++ ) {
if ( rem_bt[ i] > 0 && at[ i] <= time ) {
executed = true ;
if ( rem_bt[ i] > quantum) {
time + = quantum;
rem_bt[ i] - = quantum;
} else {
time + = rem_bt[ i] ;
wt[ i] = time - bt[ i] - at[ i] ;
rem_bt[ i] = 0 ;
tat[ i] = bt[ i] + wt[ i] ;
completed++ ;
cout << processes[ i] << "\t " << bt[ i] << "\t \t " << at[ i] << "\t \t " << wt[ i] << "\t \t " << tat[ i] << "\n " ;
}
}
}
if ( ! executed) time ++ ;
}
}
int main( ) {
int n, quantum;
cout << "Enter number of processes: " ;
cin >> n;
vector< int > processes( n) , bt( n) , at( n) ;
cout << "Enter burst times and arrival times:\n " ;
for ( int i = 0 ; i < n; i++ ) {
processes[ i] = i + 1 ;
cout << "Process " << i + 1 << " Burst Time: " ;
cin >> bt[ i] ;
cout << "Process " << i + 1 << " Arrival Time: " ;
cin >> at[ i] ;
}
cout << "Enter time quantum: " ;
cin >> quantum;
roundRobin( processes, n, bt, at, quantum) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCByb3VuZFJvYmluKHZlY3RvcjxpbnQ+JiBwcm9jZXNzZXMsIGludCBuLCB2ZWN0b3I8aW50PiYgYnQsIHZlY3RvcjxpbnQ+JiBhdCwgaW50IHF1YW50dW0pIHsKICAgIHZlY3RvcjxpbnQ+IHJlbV9idChidCk7CiAgICB2ZWN0b3I8aW50PiB3dChuLCAwKSwgdGF0KG4sIDApOwogICAgaW50IHRpbWUgPSAwLCBjb21wbGV0ZWQgPSAwOwoKICAgIGNvdXQgPDwgIlByb2Nlc3NcdEJ1cnN0IFRpbWVcdEFycml2YWwgVGltZVx0V2FpdGluZyBUaW1lXHRUdXJuYXJvdW5kIFRpbWVcbiI7CgogICAgd2hpbGUgKGNvbXBsZXRlZCA8IG4pIHsKICAgICAgICBib29sIGV4ZWN1dGVkID0gZmFsc2U7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgaWYgKHJlbV9idFtpXSA+IDAgJiYgYXRbaV0gPD0gdGltZSkgewogICAgICAgICAgICAgICAgZXhlY3V0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKHJlbV9idFtpXSA+IHF1YW50dW0pIHsKICAgICAgICAgICAgICAgICAgICB0aW1lICs9IHF1YW50dW07CiAgICAgICAgICAgICAgICAgICAgcmVtX2J0W2ldIC09IHF1YW50dW07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRpbWUgKz0gcmVtX2J0W2ldOwogICAgICAgICAgICAgICAgICAgIHd0W2ldID0gdGltZSAtIGJ0W2ldIC0gYXRbaV07CiAgICAgICAgICAgICAgICAgICAgcmVtX2J0W2ldID0gMDsKICAgICAgICAgICAgICAgICAgICB0YXRbaV0gPSBidFtpXSArIHd0W2ldOwogICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCsrOwogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgcHJvY2Vzc2VzW2ldIDw8ICJcdCIgPDwgYnRbaV0gPDwgIlx0XHQiIDw8IGF0W2ldIDw8ICJcdFx0IiA8PCB3dFtpXSA8PCAiXHRcdCIgPDwgdGF0W2ldIDw8ICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFleGVjdXRlZCkgdGltZSsrOyAKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbiwgcXVhbnR1bTsKICAgIGNvdXQgPDwgIkVudGVyIG51bWJlciBvZiBwcm9jZXNzZXM6ICI7CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8aW50PiBwcm9jZXNzZXMobiksIGJ0KG4pLCBhdChuKTsKCiAgICBjb3V0IDw8ICJFbnRlciBidXJzdCB0aW1lcyBhbmQgYXJyaXZhbCB0aW1lczpcbiI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIHByb2Nlc3Nlc1tpXSA9IGkgKyAxOwogICAgICAgIGNvdXQgPDwgIlByb2Nlc3MgIiA8PCBpICsgMSA8PCAiIEJ1cnN0IFRpbWU6ICI7CiAgICAgICAgY2luID4+IGJ0W2ldOwogICAgICAgIGNvdXQgPDwgIlByb2Nlc3MgIiA8PCBpICsgMSA8PCAiIEFycml2YWwgVGltZTogIjsKICAgICAgICBjaW4gPj4gYXRbaV07CiAgICB9CgogICAgY291dCA8PCAiRW50ZXIgdGltZSBxdWFudHVtOiAiOwogICAgY2luID4+IHF1YW50dW07CgogICAgcm91bmRSb2Jpbihwcm9jZXNzZXMsIG4sIGJ0LCBhdCwgcXVhbnR1bSk7CgogICAgcmV0dXJuIDA7Cn0KCg==