Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
#include <stdlib.h>
#include <windows.h>
void RR ( int arrive[], int array[], int process[],int pro, int count){
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),3);
int b=0;
int aux = 0;
int repeat = 0;
int toexecu = 0;
int *wait;
wait = new int[pro];
int *copyarray;
copyarray = new int[pro];
for (int i = 0; i < pro; i++){
copyarray[i]=array [i];
}
cout << "Ningun proceso puede tener valor cero en su tiempo de rafaga y solo
se considera tiempos de llegada = 0 para todos los procesos " << endl;
while (array[b]>0){
array[b]= array[b] - count;
if (array[b] > 0){
for (int i = 1+b; i< pro; i++){
//if (count >= arrive[i]){
aux= array[i-1];
array[i-1]=array[i];
array[i] = aux;
aux= process[i-1];
process[i-1]=process[i];
process[i] = aux;
aux= copyarray[i-1];
copyarray[i-1]=copyarray[i];
copyarray[i] = aux;
//}
}
repeat = repeat + count;
if (b==pro-1){
repeat = repeat- count;
toexecu = toexecu + count;
}
}
else{
wait[b]= repeat;
repeat= repeat + ((array[b]+count)%count);
if ((array[b]+count)%count== 0){
repeat = repeat + count;
}
b=b+1;
}
}
cout << "El orden en que los procesos acabaron fue: " << endl;
for (int i = 0; i < pro; i++){
cout << process[i] << "-" ;
}
cout << endl;
cout << "El tiempo de espera segun como acabaron los procesos fue: " << endl;
for (int i = 0; i < pro; i++){
cout << wait[i] << "-" ;
}
cout << endl;
cout << "El tiempo de ejecucion segun como acabaron los procesos fue: " <<
endl;
// tiempos de ejecuci�n
int *execu;
int temp;
execu = new int [pro];
for (int i = 0; i < pro; i++){
temp= copyarray[i]%count;
if (temp == 0){
temp = count;
}
execu[i] = wait[i] + temp;
}
execu[pro-1] = execu[pro-1] + toexecu;
for (int i = 0; i < pro; i++){
cout << execu[i] << "-" ;
}
cout << endl;
// promedio de espera y de ejecucion
int waitavg;
int execuavg;
waitavg =0;
execuavg =0;
for (int i = 0; i < pro; i++){
waitavg = waitavg + wait[i];
execuavg = execuavg + execu[i];
}
float waitavge;
waitavge = (float)waitavg / pro;
float execuavge;
execuavge = (float)execuavg / pro;
cout << " El promedio de tiempo de espera es (en unidades de proceso): " <<
waitavge << endl;
cout << " El promedio de tiempo de ejecucion es (en unidades de proceso): "
<< execuavge << endl;
}
int main(){
int pro;
cout << "Cuantos procesos va a introducir: " <<endl;
cin >> pro;
int *service;
int *arrive;
int *process;
service = new int[pro];
arrive = new int[pro];
process = new int[pro];
// leer los datos
for (int i = 0; i < pro; i++){
cout << "Introduzca el tiempo de rafaga del proceso " << i+1 << endl;
cin >> service[i];
cout << "Introduzca el tiempo en el que llego el proceso: " << i+1 << "
*si va a escoger el algoritmo RR colocar 0"<< endl;
cin >> arrive[i];
process[i]=i+1;
}
// organizar array, arrive y process segun los tiempos de llegada
int aux;
for(int z = 1; z < pro; ++z)
{
for(int v = 0; v < (pro - z); v++)
{
if(arrive[v] > arrive[v+1])
{
aux = arrive[v];
arrive[v] = arrive[v + 1];
arrive[v + 1] = aux;
aux = service[v];
service[v] = service[v + 1];
service[v + 1] = aux;
aux = process[v];
process[v] = process[v + 1];
process[v + 1] = aux;
}
}
}
cout << "El orden en que llegaron los procesos es (para el algoritmo RR este
orden es como se escribieron pues todos los procesos deben tener tiempo de llegada
= 0): " ;
for (int i = 0; i< pro; i++){
cout << process [i] << "-" ;
}
cout << endl;
int sel;
cout << "Escoja el algoritmo que desea, FCFS (1), SJC sin desalojo (2) o RR
(3) " <<endl;
cin >> sel;
if (sel == 1){
FCFS (arrive, service, process, pro);
}
if (sel == 2){
SJC (arrive, service, process, pro);
}
if (sel==3){
int count;
cout << "Escoja el cuanto de tiempo: " <<endl;
cin >> count;
RR ( arrive, service, process , pro, count);
}
system("PAUSE");
return EXIT_SUCCESS;
}