Я написал код для циклического планирования на C ++. Вывод состоит из двух частей, но есть задержка в выводе второй части. Я не могу исправить свой код, пожалуйста, кто-нибудь, помогите мне. Код выглядит следующим образом:
#include<iostream>
using namespace std;
int main()
{
int x=0,rbt[10],bt[10],wt[15],tat[10],cpu=0,n,tq,p[10],st[10],i,count=0,swt=0,stat=0,temp;
float awt=0.0,atat=0.0;
cout << "\nEnter number of processes:";
cin >> n;
for(i=1;i<=n;i++)
{
cout<<"\nEnter the processID";
cin>>p[i];
cout<<"\nEnter burst time:";
cin>>bt[i];
rbt[i]=bt[i];
}
cout << "\nEnter time quantum:";
cin >> tq;
cout << "\n ProcessId\tBurst time\tRemaining burst time\tCpu Time\n";
while(count!=n-1)
{
for(i=1;i<=n;i++)
{
if(rbt[i]==0)
{
++count;
continue;
}
else if(rbt[i]>tq)
{
st[i]=rbt[i];
rbt[i]=rbt[i]-tq;
cpu=cpu+tq;
}
else
{
st[i]=rbt[i];
temp=rbt[i];
rbt[i]=0;
cpu=cpu+temp;
}
cout << p[i] << "\t\t" << st[i] << "\t\t" << rbt[i] << "\t\t\t" << cpu << "\t\t" << endl;
if(rbt[i]==0)
{
tat[i]=cpu;
wt[i]=tat[i]-bt[i];
swt=swt+wt[i];
stat=stat+tat[i];
}
}
}
cout << "\nProcessID\tBurst time\tWaiting time\tTurn around time:\n";
for(i=1;i<=n;i++)
{
cout<<p[i]<<"\t\t"<<bt[i]<<"\t\t\t"<<wt[i]<<"\t\t\t"<<tat[i]<<endl;
}
awt = (float)swt/n;
atat = (float)stat/n;
cout << "Avg wait time is\tAvg turn around time is " << awt << "\t" << atat;
return 0;
}
Я вижу, что вы новичок в Cpp. Есть много вещей, которые не так с этим фрагментом кода, но я не уверен, является ли какая-то из них проблемой, которую вы ищете.
Немногие из них:
int rbt[10];
n>=10
программа выйдет из строки # 16, выйдя за пределы диапазона (p[10]
не существует так, как вы бы этого хотели)std::vector
тогда не имеет значения, насколько высоко n
будет.n=1
, Вам будет предложено ввести все переменные, пропустите цикл while и перейдите к последнему циклу for, что приводит к печати wt[1]
а также tat[1]
, которые не инициализируются => мусор напечатанfor (int i = 0; i < n; i++)
, int tab[3]
он имеет длину 3, и вы можете оперировать этими значениями: tab[0], tab[1], tab[2]
n=3
Вы получите доступ к этим точным значениям и не получите никакого мусора.(float)swt/n
литье в стиле C Вы не должны использовать его в Cpp, потому что его результат может быть не совсем таким, как вы подозреваете. использование std::static_cast<float>(swt / n)
,Это всего лишь верхушка айсберга. Ваш код трудно читать, и без того, чтобы Вы точно сказали, что именно он должен делать, мы не можем определить, что предназначена и что некорректный.