Witam. Napisałem rotacyjny algorytm planowania i gdzieś muszę mieć jakiś błąd. Program się kompiluje, ale nie działa prawidłowo. Porobiłem komentarze, żebyście szybciej mogli się zorientować co miałem zamiar zrobić. Jeżeli ktoś wie, gdzie jest błąd to bardzo proszę o pomoc. Oto kod:
#include <iostream>
#define MAX_BUFOR 30
using namespace std;
void rr(int n, int t[]);
int main()
{
int i;
int l_proc;
int *t;
int *p;
cout << "Podaj z ilu procesow ma wyliczyc czas: \n\n" << endl;
cin >> l_proc;
if( !(t= new int[l_proc]) ) //tablica czasu
{
cout << "\nERROR\n" << endl;
cin.get();
exit(1);
}
if( !(p= new int [l_proc]) ) //tablica procesow
{
cout << "\nERROR\n";
cin.get();
exit(1);
}
cout << "\nPodaj czas trwania tych faz:\n\n";
for (i=0;i<l_proc;i++)
{
cout << i+1 << " - ";
cin >> t[i];
}
for(i=0;i<l_proc;i++) p[i]=i; //dane dla tablicy indeksow procesow
cin.get();
cout << endl << endl;
rr(l_proc,t);
cin.get();
}
void rr(int l_proc, int t[])
{
int kwant;
cout << "Podaj kwant" << endl << endl;
cin >> kwant;
cout << endl;
int i, k, j=0, ile=0, ile_czeka=0, dodajkwant;
int reszta[MAX_BUFOR],kolejka[MAX_BUFOR];
double srednia=0;
for(i=0; i<l_proc; i++)//procesy kolejno uzywaja procesora nie dluzej niz okreslony kwant
{
if( t[i]-kwant <= 0 ) //spr. dlugosc fazy procesu
{
if(i==0) //tylko dla pierwszego procesu, gdyz wtedy ile_czeka=0
{
for(k=0; k<t[i]; k++) cout << i;
dodajkwant=0;
}
else
{
if( dodajkwant==1 )
ile_czeka += kwant;
else
ile_czeka += t[i-1];
for(k=0; k<t[i]; k++) cout << i;
srednia += ile_czeka;
dodajkwant = 0;
}
}
else // gdy faza procesu jest dluzsza niz kwant czasu
{
reszta[j] = t[i]-kwant;
reszta[j+1] = 0;
kolejka[j] = i;
ile++;
j++;
if( i==0 )
{
for(k=0;k<kwant;k++) cout << i;
cout << "*";
dodajkwant = 1;
}
else
{
if(dodajkwant==1)
ile_czeka+=kwant;
else
ile_czeka+=t[i-1];
for(k=0; k<kwant; k++) cout << i;
cout << "*";
dodajkwant=1;
}
}
}
i=0;
while( reszta[i]!=0 ) //korzystam ze znacznika
{
if( reszta[i]-kwant <= 0 ) //jesli warunek to proces zostanie wykonany w calosci
{
if(dodajkwant==1) //tzn. ze poprzedni proces zostal przerwany i trwal kwant
ile_czeka+=kwant;
else
ile_czeka+=reszta[i];
for(k=0; k<reszta[i]; k++) cout << kolejka[i];
dodajkwant=0;
srednia+=ile_czeka;
}
else
{
reszta[ile] = reszta[i]-kwant;
reszta[ile+1] = 0;
kolejka[ile] = kolejka[i];
ile++;
if( dodajkwant==1 )
ile_czeka += kwant;
else
ile_czeka += reszta[i-1];
for(k=0; k<kwant; k++) cout << kolejka[i];
cout << "*";
dodajkwant=1;
}
i++;
}
srednia /= l_proc;
cout << "\nSredni czas oczekiwania RR = " << srednia;
cin.get();
cout << "\nAby zakonczyc wcisnij ENTER\n";
}