Ikatautatomadachii
Honorary Poster
- Joined
- Mar 1, 2016
- Posts
- 585
- Reaction
- 567
- Points
- 236
Will someone help me convert this C++ source code into C source code. Kaya ko naman talaga siya i-convert kaso may mga functions na pang C++ lang talaga like sort(), queue functions. And I dunno how to implement this into C. Mahina pa ako sa linked list eh. Thank you in advance
Source: You do not have permission to view the full content of this post. Log in or register now.
[CODE lang="cpp" title="Round Robin CPU scheduling" highlight="62, 64"]#include <iostream>
#include <algorithm>
#include <iomanip>
#include <queue>
using namespace std;
struct process {
int pid;
int arrival_time;
int burst_time;
int start_time;
int completion_time;
int turnaround_time;
int waiting_time;
int response_time;
};
bool compare1(process p1, process p2)
{
return p1.arrival_time < p2.arrival_time;
}
bool compare2(process p1, process p2)
{
return p1.pid < p2.pid;
}
int main() {
int n;
int tq;
struct process p[100];
float avg_turnaround_time;
float avg_waiting_time;
float avg_response_time;
float cpu_utilisation;
int total_turnaround_time = 0;
int total_waiting_time = 0;
int total_response_time = 0;
int total_idle_time = 0;
float throughput;
int burst_remaining[100];
int idx;
cout << setprecision(2) << fixed;
cout<<"Enter the number of processes: ";
cin>>n;
cout<<"Enter time quantum: ";
cin>>tq;
for(int i = 0; i < n; i++) {
cout<<"Enter arrival time of process "<<i+1<<": ";
cin>>p.arrival_time;
cout<<"Enter burst time of process "<<i+1<<": ";
cin>>p.burst_time;
burst_remaining = p.burst_time;
p.pid = i+1;
cout<<endl;
}
sort(p,p+n,compare1);
queue<int> q;
int current_time = 0;
q.push(0);
int completed = 0;
int mark[100];
memset(mark,0,sizeof(mark));
mark[0] = 1;
while(completed != n) {
idx = q.front();
q.pop();
if(burst_remaining[idx] == p[idx].burst_time) {
p[idx].start_time = max(current_time,p[idx].arrival_time);
total_idle_time += p[idx].start_time - current_time;
current_time = p[idx].start_time;
}
if(burst_remaining[idx]-tq > 0) {
burst_remaining[idx] -= tq;
current_time += tq;
}
else {
current_time += burst_remaining[idx];
burst_remaining[idx] = 0;
completed++;
p[idx].completion_time = current_time;
p[idx].turnaround_time = p[idx].completion_time - p[idx].arrival_time;
p[idx].waiting_time = p[idx].turnaround_time - p[idx].burst_time;
p[idx].response_time = p[idx].start_time - p[idx].arrival_time;
total_turnaround_time += p[idx].turnaround_time;
total_waiting_time += p[idx].waiting_time;
total_response_time += p[idx].response_time;
}
for(int i = 1; i < n; i++) {
if(burst_remaining > 0 && p.arrival_time <= current_time && mark == 0) {
q.push(i);
mark = 1;
}
}
if(burst_remaining[idx] > 0) {
q.push(idx);
}
if(q.empty()) {
for(int i = 1; i < n; i++) {
if(burst_remaining > 0) {
q.push(i);
mark = 1;
break;
}
}
}
}
avg_turnaround_time = (float) total_turnaround_time / n;
avg_waiting_time = (float) total_waiting_time / n;
avg_response_time = (float) total_response_time / n;
cpu_utilisation = ((p[n-1].completion_time - total_idle_time) / (float) p[n-1].completion_time)*100;
throughput = float / (p[n-1].completion_time - p[0].arrival_time);
sort(p,p+n,compare2);
cout<<endl;
cout<<"#P\t"<<"AT\t"<<"BT\t"<<"ST\t"<<"CT\t"<<"TAT\t"<<"WT\t"<<"RT\t"<<"\n"<<endl;
for(int i = 0; i < n; i++) {
cout<<p.pid<<"\t"<<p.arrival_time<<"\t"<<p.burst_time<<"\t"<<p.start_time<<"\t"<<p.completion_time<<"\t"<<p.turnaround_time<<"\t"<<p.waiting_time<<"\t"<<p.response_time<<"\t"<<"\n"<<endl;
}
cout<<"Average Turnaround Time = "<<avg_turnaround_time<<endl;
cout<<"Average Waiting Time = "<<avg_waiting_time<<endl;
cout<<"Average Response Time = "<<avg_response_time<<endl;
cout<<"CPU Utilization = "<<cpu_utilisation<<"%"<<endl;
cout<<"Throughput = "<<throughput<<" process/unit time"<<endl;
}
[/CODE]
Source: You do not have permission to view the full content of this post. Log in or register now.
[CODE lang="cpp" title="Round Robin CPU scheduling" highlight="62, 64"]#include <iostream>
#include <algorithm>
#include <iomanip>
#include <queue>
using namespace std;
struct process {
int pid;
int arrival_time;
int burst_time;
int start_time;
int completion_time;
int turnaround_time;
int waiting_time;
int response_time;
};
bool compare1(process p1, process p2)
{
return p1.arrival_time < p2.arrival_time;
}
bool compare2(process p1, process p2)
{
return p1.pid < p2.pid;
}
int main() {
int n;
int tq;
struct process p[100];
float avg_turnaround_time;
float avg_waiting_time;
float avg_response_time;
float cpu_utilisation;
int total_turnaround_time = 0;
int total_waiting_time = 0;
int total_response_time = 0;
int total_idle_time = 0;
float throughput;
int burst_remaining[100];
int idx;
cout << setprecision(2) << fixed;
cout<<"Enter the number of processes: ";
cin>>n;
cout<<"Enter time quantum: ";
cin>>tq;
for(int i = 0; i < n; i++) {
cout<<"Enter arrival time of process "<<i+1<<": ";
cin>>p.arrival_time;
cout<<"Enter burst time of process "<<i+1<<": ";
cin>>p.burst_time;
burst_remaining = p.burst_time;
p.pid = i+1;
cout<<endl;
}
sort(p,p+n,compare1);
queue<int> q;
int current_time = 0;
q.push(0);
int completed = 0;
int mark[100];
memset(mark,0,sizeof(mark));
mark[0] = 1;
while(completed != n) {
idx = q.front();
q.pop();
if(burst_remaining[idx] == p[idx].burst_time) {
p[idx].start_time = max(current_time,p[idx].arrival_time);
total_idle_time += p[idx].start_time - current_time;
current_time = p[idx].start_time;
}
if(burst_remaining[idx]-tq > 0) {
burst_remaining[idx] -= tq;
current_time += tq;
}
else {
current_time += burst_remaining[idx];
burst_remaining[idx] = 0;
completed++;
p[idx].completion_time = current_time;
p[idx].turnaround_time = p[idx].completion_time - p[idx].arrival_time;
p[idx].waiting_time = p[idx].turnaround_time - p[idx].burst_time;
p[idx].response_time = p[idx].start_time - p[idx].arrival_time;
total_turnaround_time += p[idx].turnaround_time;
total_waiting_time += p[idx].waiting_time;
total_response_time += p[idx].response_time;
}
for(int i = 1; i < n; i++) {
if(burst_remaining > 0 && p.arrival_time <= current_time && mark == 0) {
q.push(i);
mark = 1;
}
}
if(burst_remaining[idx] > 0) {
q.push(idx);
}
if(q.empty()) {
for(int i = 1; i < n; i++) {
if(burst_remaining > 0) {
q.push(i);
mark = 1;
break;
}
}
}
}
avg_turnaround_time = (float) total_turnaround_time / n;
avg_waiting_time = (float) total_waiting_time / n;
avg_response_time = (float) total_response_time / n;
cpu_utilisation = ((p[n-1].completion_time - total_idle_time) / (float) p[n-1].completion_time)*100;
throughput = float / (p[n-1].completion_time - p[0].arrival_time);
sort(p,p+n,compare2);
cout<<endl;
cout<<"#P\t"<<"AT\t"<<"BT\t"<<"ST\t"<<"CT\t"<<"TAT\t"<<"WT\t"<<"RT\t"<<"\n"<<endl;
for(int i = 0; i < n; i++) {
cout<<p.pid<<"\t"<<p.arrival_time<<"\t"<<p.burst_time<<"\t"<<p.start_time<<"\t"<<p.completion_time<<"\t"<<p.turnaround_time<<"\t"<<p.waiting_time<<"\t"<<p.response_time<<"\t"<<"\n"<<endl;
}
cout<<"Average Turnaround Time = "<<avg_turnaround_time<<endl;
cout<<"Average Waiting Time = "<<avg_waiting_time<<endl;
cout<<"Average Response Time = "<<avg_response_time<<endl;
cout<<"CPU Utilization = "<<cpu_utilisation<<"%"<<endl;
cout<<"Throughput = "<<throughput<<" process/unit time"<<endl;
}
[/CODE]