Você está na página 1de 11

#include <stdio.

h>
#include <conio.h>
#include <iostream.h>
#include <time.h>
#define MAX 5
typedef int infocola;
typedef struct tipocola
{
int elems;
int elems1;
int entrada;
int entrada1;
int salida;
int salida1;
infocola procesos[MAX];
infocola tamano[MAX];
};
tipocola cola;
typedef struct tipocola1
{
int elems2;
int elems3;
int entrada2;
int entrada3;
int salida2;
int salida3;
infocola procesos1[MAX];
infocola tamano1[MAX];
};
tipocola1 cola1;
//Prototipo de funcion para el grafico
void grafico();
//Prototipo para hacer una pausa de x tiempo
void sleep( clock_t wait );
//Prototipos de funciones para el paquete basico de la cola1
void crear(tipocola *cola);
int vacia(tipocola cola);
int llena(tipocola cola);
void meter(tipocola *cola, int proc, int tam);
void sacar(tipocola *cola, int *proc, int *tam);
void imprimir(tipocola cola, int proc, int tam);

void imp(tipocola cola, int proc, int tam);


//Prototipo de funciones para el paquete basico de la cola2
void crear1(tipocola1 *cola1);
int vacia1(tipocola1 cola1);
int llena1(tipocola1 cola1);
void meter1(tipocola1 *cola1, int proc1, int tam1);
void sacar1(tipocola1 *cola1, int *proc1, int *tam1);
void imprimir1(tipocola1 cola1, int proc1, int tam1);
void imp1(tipocola1 cola1, int proc1, int tam1);
int proceso, proceso1, aux1,aux2;
int tamano, tamano1, tam1,tam2, tipo;
void main()
{
int c, c1, i, f, iter1=0, iter2=0, n1=0, n2=0;
int pro1[5]={0}, pro2[5]={0};
int ta1[5]={0}, ta2[5]={0};
int tie1=0, tie=0, pausa=0, sumpro=0;
float prom=0, prom1=0;
crear(&cola);
crear1(&cola1);
cout<<"Introduce el tiempo de llegada: ";
cin>>tie1;
clrscr();
grafico();
imprimir(cola, proceso, tamano);
imprimir1(cola1, proceso1, tamano1);
pausa=2000;
sleep(pausa);
while (!vacia(cola))
{
sacar (&cola, &proceso, &tamano);
pro1[iter1]=proceso;
ta1[iter1]=tamano;
iter1=iter1+1;
}
while (!vacia1(cola1))
{
sacar1 (&cola1, &proceso1, &tamano1);
pro2[iter2]=proceso1;
ta2[iter2]=tamano1;
iter2=iter2+1;

}
crear(&cola);
crear1(&cola1);
while (n1<iter1)
{
proceso=pro1[n1];
tamano=ta1[n1];
meter(&cola, proceso, tamano);
n1++;
}
while (n2<iter2)
{
proceso1=pro2[n2];
tamano1=ta2[n2];
meter1(&cola1, proceso1, tamano1);
n2++;
}
//----------------------------------------------------------------------while (!vacia(cola))
{
sacar(&cola, &proceso, &tamano);
aux1=proceso;
tam1=tamano;
pausa=tam1*1000;
c=13;
for(i=0; i<5; i++)
{
gotoxy(c,5);cout<<" ";
c=c+4;
}
sleep(pausa);
imprimir(cola, proceso, tamano);
gotoxy(43,5); cout<<aux1;
pausa=0;
pausa=2000;
sleep(pausa);
gotoxy(43,5); cout<<" ";
gotoxy (57,5); cout<<aux1;
}
//--------------------------------------------------------------------------imp1(cola1, proceso1, tamano1);
c=29;
for(i=0; i<5; i++)
{
gotoxy(c,11);cout<<" ";
c=c+4;

}
sleep(pausa);
while (!vacia1(cola1))
{
sacar1(&cola1, &proceso1, &tamano1);
aux2=proceso1;
tam2=tamano1;
pausa=0;
pausa=tam2*1000;
c=13;
sleep(pausa);
for(i=0; i<5; i++)
{
gotoxy(c,5);cout<<" ";
c=c+4;
}
pausa=0;
pausa=2000;
sleep(pausa);
imp1(cola1, proceso1, tamano1);
gotoxy(43,5); cout<<aux2;
sleep(pausa);
gotoxy(43,5); cout<<" ";
gotoxy (57,5); cout<<aux2;
}
gotoxy(43,5); cout<<" ";
getch();
gotoxy(57,5); cout<<" ";
//----------------------------------------------------------------------gotoxy(10,15);cout<<"proceso";
gotoxy(22,15);cout<<"tiempo espera";
gotoxy(37,15);cout<<"tiempo proceso";
c=14;
c1=30;
f=16;
tie=tie1;
for (i=0; i<iter1; i++)
{
gotoxy (c,f); printf("%i",pro1[i]);
gotoxy(42,f); printf("%i",ta1[i]);
gotoxy (c1,f); printf("%i", tie);
tie=tie+ta1[i];
sumpro=sumpro+ta1[i];
prom=prom+ta1[i];
f++;
}
for (i=0; i<iter2; i++)

{
gotoxy (c,f); printf("%i",pro2[i]);
gotoxy(42,f); printf("%i",ta2[i]);
gotoxy (c1,f); printf("%i", tie);
tie=tie+ta2[i];
sumpro=sumpro+ta2[i];
prom=prom+ta2[i];
f++;
}
prom=prom/5;
prom1=tie/5;
gotoxy(14,21); printf("El Tiempo total es = %d", sumpro);
gotoxy(14,22); printf("El promedio de espera es = %.2f", prom);
gotoxy(14,23); printf("El promedio de respuesta es = %.2f", prom1);
} //fin de la funcion main
//Funciones del paquete basico de la cola1
void crear(tipocola *cola)
{
cola->elems = cola->salida =cola->entrada = 0;
cola->elems1=cola->salida1=cola->entrada1=0;
}
int vacia(tipocola cola)
{
if (cola.elems==0 && cola.elems1==0)
return 1;
else return 0;
}
int llena(tipocola cola)
{
if (cola.elems==MAX && cola.elems1==MAX)
return 1;
else return 0;
}
void meter(tipocola *cola, int proc, int tam)
{
cola->elems++;
cola->elems1++;
cola->procesos[cola->entrada++]=proc;
cola->tamano[cola->entrada1++]=tam;
if (cola->entrada==MAX && cola->entrada1==MAX)

{
cola->entrada=0;
cola->entrada1=0;
}
}

void sacar(tipocola *cola, int *proc, int *tam)


{
cola->elems--;
cola->elems1--;
*proc=cola->procesos[cola->salida++];
*tam=cola->tamano[cola->salida1++];
if (cola->salida==MAX && cola->salida==MAX)
{
cola->salida=0;
cola->salida=0;
}
}
//Funciones del paquete basico de la cola2
void crear1(tipocola1 *cola1)
{
cola1->elems2=cola1->salida2=cola1->entrada2=0;
cola1->elems3=cola1->salida3=cola1->entrada3=0;
}
int vacia1(tipocola1 cola1)
{
if (cola1.elems2==0 && cola1.elems3==0)
return 1;
else return 0;
}
int llena1(tipocola1 cola1)
{
if (cola1.elems2==MAX && cola1.elems3==MAX)
return 1;
else return 0;
}
void meter1(tipocola1 *cola1, int proc1, int tam1)
{
cola1->elems2++;
cola1->elems3++;
cola1->procesos1[cola1->entrada2++]=proc1;

cola1->tamano1[cola1->entrada3++]=tam1;
if (cola1->entrada2==MAX && cola1->entrada3==MAX)
{
cola1->entrada2=0;
cola1->entrada3=0;
}
}

void sacar1(tipocola1 *cola1, int *proc1, int *tam1)


{
cola1->elems2--;
cola1->elems3--;
*proc1=cola1->procesos1[cola1->salida2++];
*tam1=cola1->tamano1[cola1->salida3++];
if (cola1->salida2==MAX && cola1->salida3==MAX)
{
cola1->salida2=0;
cola1->salida3=0;
}
}
void imprimir(tipocola cola, int proc, int tam)
{
int fil=5,col=29;
if (vacia(cola))
printf("");
else
{
while (!vacia(cola))
{
sacar(&cola, &proc, &tam);
gotoxy (col,fil); printf ("%i", proc);
col=col-4;
}
}
}
void imp(tipocola cola, int proc, int tam)
{
int fil=11, col=29;
if (vacia(cola))
printf("");
else
{
while (!vacia(cola))
{
sacar(&cola, &proc, &tam);

gotoxy (col,fil); printf ("%i", proc);


col=col+4;
}
}
}
void imprimir1(tipocola1 cola1, int proc1, int tam1)
{
int fil=11,col=29;
if (vacia1(cola1))
printf("");
else
{
while (!vacia1(cola1))
{
sacar1(&cola1, &proc1, &tam1);
gotoxy (col,fil); printf ("%i", proc1);
col=col+4;
}
}
}
void imp1(tipocola1 cola1, int proc1, int tam1)
{
int fil=5,col=29;
if (vacia1(cola1))
printf("");
else
{
while (!vacia1(cola1))
{
sacar1(&cola1, &proc1, &tam1);
gotoxy (col,fil); printf ("%i", proc1);
col=col-4;
}
}
}
void grafico()
{
int i,j, f, c;
c=11;
for(i=0; i<5; i++)
{
if (llena(cola))
{
printf ("La cola esta llena\n");
}
else

{
printf ("Presiona el 1 si el proceso es de CPU o 2 si es de E/S:
");
scanf ("%i", &tipo);
printf ("introduzca el Proceso 1, 2...: \n");
scanf ("%i",&proceso);
printf("Introduzca el tamao del proceso: ");
scanf("%i", &tamano);
if (tipo==1)
meter(&cola, proceso, tamano);
else if (tipo==2)
{
proceso1=proceso;
tamano1=tamano;
meter1(&cola1, proceso1, tamano1);
}
}
}
clrscr();
gotoxy(13,3); cout<<"Procesos en Cola";
gotoxy(37,3); cout<<"Despachador";
gotoxy(56,3); cout<<"CPU";
gotoxy(2,5); cout<<"------->";
for (i=0; i<21; i++)
{
gotoxy(c,4); cout<<"-";
c++;
}
c=11;
for (i=0; i<21; i++)
{
gotoxy(c,6); cout<<"-";
c++;
}
c=11;
for (j=0; j<6; j++)
{
gotoxy(c,5); cout<<"|";
c=c+4;
}
gotoxy(33,5); cout<<"------->";
c=41;
for (j=0; j<2; j++)
{
gotoxy(c,5); cout<<"|";
c=c+4;
}

c=41;
for (i=0; i<5; i++)
{
gotoxy(c,4); cout<<"-";
c++;
}
c=41;
for (i=0; i<5; i++)
{
gotoxy(c,6); cout<<"-";
c++;
}
gotoxy(47,5); cout<<"------->";
c=55;
for (i=0; i<5; i++)
{
gotoxy(c,4); cout<<"-";
c++;
}
c=55;
for (i=0; i<5; i++)
{
gotoxy(c,6); cout<<"-";
c++;
}
c=55;
for (j=0; j<2; j++)
{
gotoxy(c,5); cout<<"|";
c=c+4;
}
c=57;
f=7;
for (j=0; j<4; j++)
{
gotoxy(57,f); cout<<"|";
f++;
}
gotoxy(35,9); cout<<"E/S";
gotoxy(49,11); cout<<"<-------";
c=27;
for (i=0; i<21; i++)
{
gotoxy(c,10); cout<<"-";
c++;
}
c=27;

for (i=0; i<21; i++)


{
gotoxy(c,12); cout<<"-";
c++;
}
c=27;
for (j=0; j<6; j++)
{
gotoxy(c,11); cout<<"|";
c=c+4;
}
gotoxy(5,11); cout<<"---------------------";
f=6;
for (j=0; j<5; j++)
{
gotoxy(5,f); cout<<"|";
f++;
}
}
void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() );
}

Você também pode gostar