Teoria das Filas - M/G/c/c
****************/
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
double acha_s(int c,double u);
double fatorial(int n);
void resultado(double u,double p0,double bigb,double lambda_a,double
l,double w,double rho,int simul);
FILE *fptr;
void main(void)
{
double lambda;
double mi;
int c;
double u;
double s;
double p0;
double bigb;
double lambda_a;
double l;
double w;
double rho;
float n;
char resp = 's';
int simul = 1;
fptr=fopen("H:\\fila.out","w");
fprintf(fptr,"M/G/c/c\n");
while(resp == 's' || resp == 'S')
{
clrscr();
printf("\n\tSimulacao #%d",simul);
fprintf(fptr,"\n\n\tSimulacao #%d",simul);
do{
printf("\n\nTaxa Media de Chegada no Sistema de Fila: ");
scanf("%lf",&lambda);
fflush(stdin);
}while(lambda <= 0);
fprintf(fptr,"\n\nTaxa Media de Chegada no Sistema de Fila: %lf",lambda);
do{
printf("\nTaxa Media de Servico por Servidor: ");
scanf("%lf",&mi);
fflush(stdin);
}while(mi <= 0);
fprintf(fptr,"\nTaxa Media de Servico por Servidor: %lf",mi);
do{
printf("\nNumero de Servidores e Capacidade do Sistema: ");
scanf("%d",&c);
fflush(stdin);
}while(c <= 0);
fprintf(fptr,"\nNumero de Servidores e Capacidade do Sistema: %d",c);
/*****
Calculo da Intensidade do Trafico
*****/
u = lambda/mi;
/*****
Calculo de s
*****/
s = acha_s(c,u);
/*****
Calculo da Probabilidade dos Servidores estarem Ociosos
*****/
p0 = 1/s;
/*****
Calculo da Probabilidade de Todos os Servidores Estarem Ocupados
*****/
n = pow(u,c)/fatorial(c);
bigb = n/s;
/*****
Calculo da Taxa de Chegada dentro do Sistema
*****/
lambda_a = lambda * (1 - bigb);
/*****
Calculo do Numero Medio de Clientes no Sistema
*****/
l = u * (1 - bigb);
/*****
Calculo do Tempo Medio que o Cliente Espera no Sistema
*****/
w = l/lambda_a;
/*****
Calculo da Utilizacao do Servidor
*****/
rho = (1 - bigb) * u/c;
resultado(u,p0,bigb,lambda_a,l,w,rho,simul);
simul = simul + 1;
printf("\n\n\n\tDeseja Continuar?");
printf("\n\t(S)im (N)ao");
resp = getch();
fflush(stdin);
}//fecha o while
fclose(fptr);
}
double acha_s(int c,double u)
{
int i;
double s=0;
for(i=0;i<=c;i++)
{
s = s + (pow(u,i)/fatorial(i));
}
return(s);
}
double fatorial(int n)
{
double temp;
int i;
temp = 1;
if(n>0)
{
for(i=1;i<=n;i++)
{
temp = temp * i;
}
}
return(temp);
}
void resultado(double u,double p0,double bigb,double lambda_a,double
l,double w,double rho,int simul)
{
clrscr();
printf("\n\n\t\tResultado da Simulacao #%d",simul);
fprintf(fptr,"\n\n\t\tResultado da Simulacao #%d",simul);
printf("\n\nIntensidade do Trafico no Sistema: %lf",u);
fprintf(fptr,"\n\nIntensidade do Trafico: %lf",u);
printf("\nTaxa de Utilizacao do Servidor: %lf",rho);
fprintf(fptr,"\nUtizacao do Servidor: %lf",rho);
printf("\nProbabilidade dos Servidores estarem Ociosos: %lf",p0);
fprintf(fptr,"\nProbabilidade dos Servidores estarem Ociosos: %lf",p0);
printf("\nProbabilidade de Todos os Servidores estarem Ocupados: %lf",bigb);
fprintf(fptr,"\nProbabilidade de Todos os Servidores estarem Ocupados:
%lf",bigb);
printf("\nTaxa Media de Chegada dentro do Sistema: %lf",lambda_a);
fprintf(fptr,"\nTaxa de Chegada dentro do Sistema: %lf",lambda_a);
printf("\nNumero Medio de Clientes no Sistema: %lf",l);
fprintf(fptr,"\nNumero Medio de Clientes no Sistema: %lf",l);
printf("\nTempo Medio que o Cliente Espera no Sistema: %lf",w);
fprintf(fptr,"\nTempo Medio que o Cliente Espera no Sistema: %lf",w);
}