Sei sulla pagina 1di 7

#include <iostream>

#include <stdlib.h>
#include <windows.h>

using namespace std;

void FCFS (int arrive[], int array[], int process[],int pro){


SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),4);
int *finish;
int *wait;
int *execu;
// crear momentos de terminaci�n de procesos
finish = new int[pro];
finish[0]= arrive[0]+ array[0];
for (int i = 1; i < pro; i++){
if (finish[i-1] < arrive [i]){
finish[i] = arrive[i]+ array[i];
}
else{
finish[i]= finish[i-1]+ array[i];
}
}
// crear tiempos de espera de los procesos
wait = new int[pro];
wait[0] = 0;
for (int i = 1; i < pro; i++){
if (finish[i-1]<= arrive[i]){
wait[i] = 0;
}
else{
wait[i] = finish[i-1]-arrive[i];
}
}
// imprimir tiempos de espera
cout << "Se dan los tiempos de espera en el orden en que fueron ejecutados
los procesos" << endl;
for (int i = 0; i < pro; i++){
cout << "Tiempo de espera para el proceso "<< process [i] << " es: "<<
wait[i] << endl;
}
// tiempo de ejecucion
execu = new int[pro];
for ( int i =0; i < pro; i++){
execu [i] = wait[i] + array [i];
}
// imprimir tiempos de ejecucion
cout << "Se dan los tiempos de ejecucion en el orden en que fueron ejecutados
los procesos" << endl;
for (int i = 0; i < pro; i++){
cout << "Tiempo de ejecucion para el proceso "<< process [i] << " es:
"<< execu[i] << 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;
}

void SJC (int arrive[], int array[], int process[],int pro){


SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE),5);
int *end;
int *copyarrive;
int *copyarray;
int *copyprocess;
end = new int[pro];
copyarrive = new int[pro];
copyarray = new int[pro];
copyprocess = new int[pro];
for ( int i = 0; i < pro; i++){
copyarrive[i] = arrive[i];
copyarray[i] = array[i];
copyprocess[i] = process[i];
}
int comp;
int min;
int choo;
int auxi;
min = 999999;
comp = arrive[0];
for (int i=0; i<pro; i++){
if (comp == arrive[i]){
if(min > array[i]){
min = array[i];
choo=i;
}
}
}
auxi = array[0];
array[0]= array[choo];
array[choo]=auxi;
copyarray[0]= copyarray[choo];
copyarray[choo]=auxi;
auxi = process[0];
process[0]= process[choo];
process[choo]=auxi;
copyprocess[0]= copyprocess[choo];
copyprocess[choo]=auxi;
end[0]= arrive[0]+array[0];
int select;
int enter, minor;
for (int i = 1; i < pro; i++){
enter=0;
minor = 9999999;
for (int j = 1; j < pro; j++){
if (end[i-1]>= arrive[j] ){
enter = 1;
if (array[j]<minor){
minor = array [j];
select = j;
copyprocess[i]= process[j];
copyarray[i] = array[j];
copyarrive[i] = arrive[j];
}
}
}
if (enter == 1){
end[i]= end[i-1]+ array[select];
array[select]= 999999;
arrive[select]= 999999;
}
if (enter == 0){
end[i] = end[i-1]+ array[i];
copyprocess[i]= process[i];
copyarray[i] = array[i];
copyarrive[i] = arrive[i];
array[i]= 999999;
arrive[i]= 999999;
}
}
int *wait;
wait = new int [pro];
wait[0]=0;
for ( int i = 1; i < pro; i++){
wait[i]= end[i-1] - copyarrive[i];
if (wait[i]<=0){
wait[i]=0;
}
}
int *execu;
execu = new int [pro];
for ( int i = 0; i < pro; i++){
execu [i]= wait[i]+copyarray[i];
}
// imprimir tiempos de espera
cout << "Se dan los tiempos de espera en el orden en que fueron ejecutados
los procesos" << endl;
for (int i = 0; i < pro; i++){
cout << "Tiempo de espera para el proceso "<< copyprocess [i] << " es:
"<< wait[i] << endl;
}
// imprimir tiempos de ejecucion
cout << "Se dan los tiempos de ejecucion en el orden en que fueron ejecutados
los procesos" << endl;
for (int i = 0; i < pro; i++){
cout << "Tiempo de ejecucion para el proceso "<< copyprocess [i] << "
es: "<< execu[i] << 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;
/*for ( int i = 0; i < pro; i++){
cout << end[i] << "-" ;
}
for ( int i = 0; i < pro; i++){
cout << copyprocess[i] << "-" ;
}
for ( int i = 0; i < pro; i++){
cout << copyarrive[i] << "-";
}
for ( int i = 0; i < pro; i++){
cout << copyarray[i] << "-";
}*/
}

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;
}

Potrebbero piacerti anche