comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Ayuda con mi programa en C

  • 0 Respuestas
  • 1540 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tadprox

  • *
  • Underc0der
  • Mensajes: 9
  • Actividad:
    0%
  • Reputación 0
  • Avanzar y aprender!
    • Ver Perfil
« en: Junio 17, 2013, 09:26:29 pm »
Hola amigos, tengo el siguiente programa..

Código: C
  1. #include <stdio.h>
  2.  
  3. #include <math.h>
  4.  
  5. #include <stdlib.h>
  6.  
  7.  
  8.  
  9. #define SERVIDORES 5
  10.  
  11. #define NUMERO_COLAS 5
  12.  
  13. #define MAX_EN_COLA 15
  14.  
  15.  
  16.  
  17. typedef struct{
  18.  
  19.         int elem[MAX_EN_COLA];
  20.  
  21.         int cuenta;
  22.  
  23.         int frente;
  24.  
  25.         int ultimo;
  26.  
  27. }cola_t;
  28.  
  29.  
  30.  
  31. void ColaInicializar(cola_t *colap){
  32.  
  33.         colap->cuenta=colap->frente=colap->ultimo=0;
  34.  
  35. }
  36.  
  37.  
  38.  
  39. int ColaVacia(cola_t *colap){
  40.  
  41.         return colap->cuenta==0;
  42.  
  43. }
  44.  
  45.  
  46.  
  47. int ColaCuenta(cola_t *colap){
  48.  
  49.         return colap->cuenta;
  50.  
  51. }
  52.  
  53.  
  54.  
  55. int ColaMeter(cola_t *colap,int dato){
  56.  
  57.         if(colap->cuenta==MAX_EN_COLA)
  58.  
  59.                 return 0;
  60.  
  61.         colap->cuenta++;
  62.  
  63.         colap->elem[colap->ultimo]=dato;
  64.  
  65.         colap->ultimo=(colap->ultimo+1)%MAX_EN_COLA;
  66.  
  67.         return 1;
  68.  
  69. }
  70.  
  71.  
  72.  
  73. int ColaSacar(cola_t *colap,int *dato){
  74.  
  75.         if(colap->cuenta==0)
  76.  
  77.                 return 0;
  78.  
  79.         colap->cuenta--;
  80.  
  81.         *dato=colap->elem[colap->frente];
  82.  
  83.         colap->frente=(colap->frente+1)%MAX_EN_COLA;
  84.  
  85.         return 1;
  86.  
  87. }
  88.  
  89.  
  90.  
  91. // Estructuras para colas y servidores
  92.  
  93.  
  94.  
  95. cola_t colas[NUMERO_COLAS];
  96.  
  97.  
  98.  
  99. struct {
  100.  
  101.         int minimo;
  102.  
  103.         int maximo;
  104.  
  105.         int acumulado;
  106.  
  107.         int cantidad;
  108.  
  109.         int max_longitud;
  110.  
  111. } estadisticas_colas[NUMERO_COLAS];
  112.  
  113.  
  114.  
  115. struct {
  116.  
  117.         int media_atencion;
  118.  
  119.         int ocupado;
  120.  
  121.         int ocupado_hasta;
  122.  
  123.         int cola_que_atiende;
  124.  
  125.         int numeros_atendidos;
  126.  
  127.         int tiempo_acumulado;
  128.  
  129. } servidores[SERVIDORES];
  130.  
  131.  
  132.  
  133. int t_simulacion = 32400, t_cierre = 28800; // Tiempos simulacion
  134.  
  135.  
  136.  
  137. // Inicia colas
  138.  
  139.  
  140.  
  141. void inicia_colas(void){
  142.  
  143.         int i;
  144.  
  145.  
  146.  
  147.         for(i=0;i<NUMERO_COLAS;i++){
  148.  
  149.                 ColaInicializar(&colas[i]);
  150.  
  151.                 estadisticas_colas[i].minimo = 28800;
  152.  
  153.                 estadisticas_colas[i].maximo = 0;
  154.  
  155.                 estadisticas_colas[i].acumulado = 0;
  156.  
  157.                 estadisticas_colas[i].cantidad = 0;
  158.  
  159.                 estadisticas_colas[i].max_longitud = 0;
  160.  
  161.         }
  162.  
  163. }
  164.  
  165.  
  166.  
  167. // Inicia los servidores
  168.  
  169.  
  170.  
  171. void inicia_servidores(void){
  172.  
  173.         int i;
  174.  
  175.  
  176.  
  177.         for(i=0;i<SERVIDORES;i++){
  178.  
  179.                 servidores[i].cola_que_atiende = i;
  180.  
  181.                 servidores[i].ocupado = 1;
  182.  
  183.                 servidores[i].ocupado_hasta =  150-i*10;        // tiempo inicio de atencion
  184.  
  185.                 servidores[i].media_atencion = 300+i*5;
  186.  
  187.                 servidores[i].numeros_atendidos = 0;
  188.  
  189.                 servidores[i].tiempo_acumulado = 0;
  190.  
  191.         }
  192.  
  193. }
  194.  
  195.  
  196.  
  197. int cola_mas_corta(){
  198.  
  199.         int min, i, j;
  200.  
  201.  
  202.  
  203.         j=0;
  204.  
  205.         min=ColaCuenta(&colas[0]);
  206.  
  207.         for(i=1; i<NUMERO_COLAS; i++)
  208.  
  209.                 if(min > ColaCuenta(&colas[i])){
  210.  
  211.                         min = ColaCuenta(&colas[i]);
  212.  
  213.                         j = i;
  214.  
  215.                 }
  216.  
  217.         return j;
  218.  
  219. }
  220.  
  221.  
  222.  
  223. void actualiza_estadisticas_colas(int cola,int intervalo){
  224.  
  225.         if(estadisticas_colas[cola].minimo > intervalo)
  226.  
  227.                 estadisticas_colas[cola].minimo = intervalo;
  228.  
  229.         if(estadisticas_colas[cola].maximo < intervalo)
  230.  
  231.                 estadisticas_colas[cola].maximo = intervalo;
  232.  
  233.         estadisticas_colas[cola].acumulado += intervalo;
  234.  
  235.         estadisticas_colas[cola].cantidad ++;
  236.  
  237.         if(estadisticas_colas[cola].max_longitud < ColaCuenta(&colas[cola]))
  238.  
  239.                 estadisticas_colas[cola].max_longitud = ColaCuenta(&colas[cola]);
  240.  
  241. }
  242.  
  243.  
  244.  
  245. void resumen_colas(void){
  246.  
  247.         int i, acumulado=0, cantidad=0;
  248.  
  249.  
  250.  
  251.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\nEstadisticas Colas\n\n");
  252.  
  253.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\tCola Clientes Minimo Maximo Promedio Max_Cant\n");
  254.  
  255.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t=============================================\n");
  256.  
  257.         for(i=0;i<NUMERO_COLAS;i++){
  258.  
  259.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t%4d %8d %6d %6d %8.2f %8d\n",i,estadisticas_colas[i].cantidad,
  260.  
  261.                         estadisticas_colas[i].minimo,estadisticas_colas[i].maximo,
  262.  
  263.                         (float)estadisticas_colas[i].acumulado/estadisticas_colas[i].cantidad,
  264.  
  265.                         estadisticas_colas[i].max_longitud);
  266.  
  267.                         acumulado += estadisticas_colas[i].acumulado;
  268.  
  269.                         cantidad += estadisticas_colas[i].cantidad;
  270.  
  271.         }
  272.  
  273.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n\t Cantidad Atendida: %d Promedio: %.2f\n",
  274.  
  275.                         cantidad,(float)acumulado/cantidad);
  276.  
  277.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n\t Intervalo de llegada medio: %.2f\n",(float)t_cierre/cantidad);
  278.  
  279. }
  280.  
  281.  
  282.  
  283. void resumen_servidores(void){
  284.  
  285.         int i, acumulado=0, cantidad=0;
  286.  
  287.  
  288.  
  289.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\nEstadisticas Servidores\n\n");
  290.  
  291.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\tServidor Clientes Promedio T_Ocupado T_Desocupado\n");
  292.  
  293.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t=================================================\n");
  294.  
  295.         for(i=0;i<SERVIDORES;i++){
  296.  
  297.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta("\t%8d %8d %8.2f %9d %12d\n",i,servidores[i].numeros_atendidos,
  298.  
  299.                         (float)servidores[i].tiempo_acumulado/servidores[i].numeros_atendidos,
  300.  
  301.                         servidores[i].tiempo_acumulado, t_simulacion-servidores[i].tiempo_acumulado);
  302.  
  303.                         acumulado += servidores[i].tiempo_acumulado;
  304.  
  305.                         cantidad += servidores[i].numeros_atendidos;
  306.  
  307.         }
  308.  
  309.         No tienes permisos para ver links. Registrate o Entra con tu cuenta("\n\t Cantidad Atendida: %d Promedio: %.2f\n",
  310.  
  311.                         cantidad,(float)acumulado/cantidad);
  312.  
  313. }
  314.  
  315.  
  316.  
  317. // Calcula el intervarlo entre llegadas segun una distribucion exponencial
  318.  
  319.  
  320.  
  321. int intervalo(float lambda){
  322.  
  323.         float u,x;
  324.  
  325.  
  326.  
  327.         u = (float)No tienes permisos para ver links. Registrate o Entra con tu cuenta() / RAND_MAX;
  328.  
  329.         x = -1.0*(float)No tienes permisos para ver links. Registrate o Entra con tu cuenta((double)(1.0-u)) * lambda;
  330.  
  331.         return (int)x;
  332.  
  333. }
  334.  
  335.  
  336.  
  337. int main(void) {
  338.  
  339.         int t_actual = 0, t_proximo;
  340.  
  341.         int t, c, i;
  342.  
  343.         int lambda_cliente = 60;
  344.  
  345.  
  346.  
  347.         inicia_servidores();
  348.  
  349.         inicia_colas();
  350.  
  351.         t_proximo = intervalo(lambda_cliente);
  352.  
  353.         while(t_actual <= t_simulacion){
  354.  
  355.                 while(t_actual <= t_cierre && t_actual == t_proximo){
  356.  
  357.                         c = cola_mas_corta();
  358.  
  359.                         ColaMeter(&colas[c],t_actual);
  360.  
  361.                         t_proximo = t_actual + intervalo(lambda_cliente);
  362.  
  363.                 }
  364.  
  365.                 for(i=0;i<SERVIDORES;i++){
  366.  
  367.                         if(servidores[i].ocupado && servidores[i].ocupado_hasta == t_actual)
  368.  
  369.                                 servidores[i].ocupado = 0;
  370.  
  371.                         if(!servidores[i].ocupado){
  372.  
  373.                                 c = servidores[i].cola_que_atiende;
  374.  
  375.                                 if(ColaSacar(&colas[c],&t)){
  376.  
  377.                                         actualiza_estadisticas_colas(c,t_actual-t);
  378.  
  379.                                         t = intervalo(servidores[i].media_atencion);
  380.  
  381.                                         servidores[i].ocupado = 1;
  382.  
  383.                                         servidores[i].numeros_atendidos++;
  384.  
  385.                                         servidores[i].tiempo_acumulado +=t ;
  386.  
  387.                                         servidores[i].ocupado_hasta = t_actual + t + 5;
  388.  
  389.                                 }
  390.  
  391.                         }
  392.  
  393.                 }
  394.  
  395.                 t_actual++;
  396.  
  397.         }
  398.  
  399.         resumen_colas();
  400.  
  401.         resumen_servidores();
  402.  
  403.         return EXIT_SUCCESS;
  404.  
  405. }

Trata de una simulacion basada en eventos discretos.

Y pues, necesito que trabaje igual con 5 servidores, pero con una sola cola... Lo hice de esa manera como ven en el codigo del link de arriba, pero, no se como hacer para que me trabaje igual con 5 servidores, con la misma configuracion, pero usando solamente una sola cola. Alguien puede ayudarme a modificar mi codigo? No se como hacerlo.

Pueden ayudarme? 25 visitas y nadie puede ayudarme? porfavor!
« Última modificación: Agosto 30, 2014, 09:26:31 am por Expermicid »
Esperando...

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] Ayuda urgente con Virus "Virus.Win32Sality"

Iniciado por Napsters

Respuestas: 6
Vistas: 3490
Último mensaje Junio 11, 2012, 03:38:18 am
por Satyricon
"ayuda con fruitywifi-karma" no puedo activar el modulo karma.

Iniciado por cristobal92

Respuestas: 4
Vistas: 1313
Último mensaje Agosto 02, 2016, 12:03:45 pm
por cristobal92
[JAVA] Ayuda Sockets en Java

Iniciado por FERNANDX

Respuestas: 1
Vistas: 556
Último mensaje Abril 25, 2018, 08:49:50 pm
por Mortal_Poison
[Ayuda] Crear .zip o .rar de un "archivo"

Iniciado por Zentraedi

Respuestas: 5
Vistas: 1484
Último mensaje Marzo 03, 2017, 02:15:20 pm
por Zentraedi
[SOLUCIONADO] Ayuda Contraseña "Sqlmap"

Iniciado por djtrueno

Respuestas: 1
Vistas: 1358
Último mensaje Enero 17, 2014, 06:07:37 pm
por ANTRAX