Advertisement
miguel747

Projeto2ED

Sep 23rd, 2011
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.66 KB | None | 0 0
  1. /*
  2. Universidade de Brasilia
  3. Departamento de Ciência da Computação
  4. Estruturas de Dados - Prof Díbio
  5. Alunos: Filipe Miguel Ribeiro 11/0029224 Hercules Nunes 11/0070747
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <time.h>
  10. #include <string.h>
  11. #define DEP 3*60
  12. #define LAND 4*60
  13. /*Estruturas dos voos*/
  14. struct voo{
  15.       char codigo[7] ;
  16.       char tipo;//A ou D;
  17.       int comb;
  18.       time_t time;
  19.       struct voo* prox;
  20.       };
  21. typedef struct voo Voo;
  22.  
  23. /*Estruturas das pistas*/
  24. struct fila{
  25.       Voo* ini ;
  26.       Voo* fim ;
  27. };
  28. typedef struct fila Fila ;
  29.  
  30. /*Cabecalho das funcoes*/
  31. int geraRand(int min, int max);
  32. Voo* insereEV(Voo* EV, char* codigo, char t);
  33. void libera(Fila *f);
  34. void insere(Fila *f, Voo* aux);
  35. Voo* ins_fim(Voo* fim, Voo* aux);
  36. Fila *cria(void);
  37. void imprimeFila(Voo* ini);
  38. Voo *EVretira(Voo* EV);
  39. int BuscaComb0(Voo* EV, Fila** pista,time_t* agora);
  40. int max(int x1, int x2, int x3);
  41.  
  42. int main(){
  43.     time_t agora[3];
  44.    
  45.     int hora=((time(NULL)/3600)-3)%24, min = (time(NULL)/60)%60, seg = time(NULL)%60;
  46.     int total_simulacao=0;
  47.     int NApro=0, NDec=0, NVoos=0;
  48.     int i, j = 0, comb0;
  49.     Voo* EVlist=NULL;
  50.     Fila *pista[3];
  51.     char codigos[][7] = {"VG3001", "JJ4404", "LN7001", "TG1501",
  52.     "GL7602", "TT1010", "AZ1009", "AZ1008", "AZ1010", "TG1506", "VG3002", "JJ4402", "GL7603",
  53.     "RL7880", "AL0012", "TT4544", "TG1505", "VG3003", "JJ4403", "JJ4401", "LN7002", "AZ1002",
  54.     "AZ1007", "GL7604", "AZ1006", "TG1503", "AZ1003", "JJ4403", "AZ1001", "LN7003", "AZ1004",
  55.     "TG1504", "AZ1005", "TG1502", "GL7601", "TT4500", "RL7801", "JJ4410", "GL7607", "AL0029",
  56.     "VV3390", "VV3392", "GF4681", "GF4690", "AZ1020", "JJ4435", "VG3010", "LF0920", "AZ1065",
  57.     "LF0978", "RL7867", "TT4502", "GL7645", "LF0932", "JJ4434", "TG1510", "TT1020", "AZ1098",
  58.     "BA2312", "VG3030", "BA2304", "KL5609", "KL5610", "KL5611"};
  59.     for(i=0;i<3;i++)
  60.        agora[i] = time(NULL);
  61.     /*geração dos voos*/
  62.     srand(time(NULL));
  63.     NVoos = geraRand(32,64);
  64.     NApro = geraRand(10,32);
  65.     NDec = NVoos - NApro;
  66.    
  67.     /*Preenchendo o campo de codigos nos primeiros voos na lista de eventos*/
  68.     for(i=0;i<NApro;i++)
  69.         EVlist = insereEV(EVlist,codigos[i],'a');
  70.     /*Preenchendo o campo de codigos os restantes dos voos com na lista de eventos*/
  71.     for(i=NApro;i<NVoos;i++)
  72.         EVlist = insereEV(EVlist,codigos[i],'d');
  73.    
  74.     /*Criação das pistas (filas)*/
  75.     for(i=0;i<3;i++)
  76.         pista[i] = cria();
  77.    
  78.     /*Computando a quantidade de voos com combustivel 0*/
  79.     comb0 = BuscaComb0(EVlist,pista,agora);
  80.     if(comb0>3){
  81.         printf("Alerta Geral de Desvio de Aeronave!\n\n");
  82.         exit(1);
  83.     }
  84.    
  85.     /*Preenchendo os voos em suas respectivas pistas (filas)*/
  86.     for(i=0;i<NVoos-comb0;i++){
  87.         switch (EVlist->tipo){
  88.             case 'a':
  89.                 if(j%2==0){
  90.                     agora[j%2]=agora[j%2]+LAND;
  91.                     EVlist->time=agora[j%2];
  92.                     insere(pista[j%2],EVlist);
  93.                 }
  94.                 else{
  95.                     agora[j%2]=agora[j%2]+LAND;
  96.                     EVlist->time=agora[j%2];
  97.                     insere(pista[j%2],EVlist);
  98.                 }
  99.                     j++;
  100.                     break;
  101.                     case 'd':
  102.                     agora[2]=agora[2]+DEP;
  103.                     EVlist->time=agora[2];
  104.                     insere(pista[2], EVlist);
  105.                     break;
  106.         }
  107.         EVlist = EVretira(EVlist);
  108.    }
  109.    /*Imprimindo os resultados dos eventos*/
  110.    printf("******************************************************************\n");
  111.    printf("               Aeroporto Internacional do Paraiso                 \n");
  112.    printf("******************************************************************\n");
  113.    printf("Hora Atual: %.2d:%.2d:%.2d\n", hora,min,seg);
  114.    printf("NVoos: \t%d\n", NVoos);
  115.    printf("NApro: \t%d\n", NApro);
  116.    printf("Ndec: \t%d\n", NDec);
  117.    printf("\nPista1: \n\n");
  118.    imprimeFila(pista[0]->ini);
  119.    printf("\nPista2: \n\n");
  120.    imprimeFila(pista[1]->ini);
  121.    printf("\nPista3: \n\n");
  122.    imprimeFila(pista[2]->ini);
  123.    
  124.    
  125.    for(i=0;i<3;i++)
  126.       libera(pista[i]);
  127.    return 0;
  128. }//fim do programa principal
  129.  
  130. /**************************Funcoes************************/
  131.  
  132. /*Insere o voo na lista de eventos e preenche o codigo e combustivel*/
  133. Voo* insereEV(Voo* EV, char* codigo, char t){
  134.      Voo* v = (Voo*)malloc(sizeof(Voo));
  135.      strcpy(v->codigo, codigo);
  136.      if(t=='d')
  137.         v->comb = 12;
  138.      else
  139.          v->comb = geraRand(0,12);
  140.      v->tipo = t;
  141.      v->prox = EV;
  142.      return v;
  143. }
  144. /*cria a filas(pistas)*/
  145. Fila *cria(void){
  146.     Fila* f = (Fila*)malloc(sizeof(Fila)) ;
  147.     f->ini = f->fim = NULL ;
  148.     return f ;
  149. }
  150. /*insere o novo voo no fim da lista de eventos*/
  151. Voo* ins_fim(Voo* fim, Voo* aux){
  152.    Voo* p = (Voo*)malloc(sizeof(Voo)) ;
  153.    strcpy(p->codigo,aux->codigo);
  154.    p->tipo = aux->tipo;
  155.    p->comb = aux->comb;
  156.    p->time = aux->time;
  157.    p->prox=NULL;
  158.    if(fim!=NULL)
  159.      fim->prox = p ;
  160.    return p ;
  161. }
  162. /*Insere o voo na fila (pista)*/
  163. void insere(Fila *f, Voo* aux){
  164.     f->fim = ins_fim(f->fim, aux);
  165.     if (f->ini==NULL)
  166.       f->ini = f->fim ;
  167. }
  168. /*Verifica se a fila esta vazia*/
  169. int vazia(Fila* f){
  170.    return (f->ini==NULL);
  171. }
  172. /*Libera a fila*/
  173. void libera(Fila *f){
  174.     Voo* q = f->ini;
  175.     while(q!=NULL){
  176.       Voo* t = q->prox ;
  177.       free(q);
  178.       q = t ;
  179.     }
  180.     free(f);
  181. }
  182. /*Gerador de numeros pseudoaleatorios*/
  183. int geraRand(int min, int max){
  184.     int r;
  185.     r=min+rand()%(max-min+1);
  186.     return r;
  187. }
  188. /*Imprime os elementos da referida fila (pista)*/
  189. void imprimeFila(Voo* ini){
  190.     while(ini!=NULL){
  191.         printf("Voo: %s", ini->codigo);
  192.         printf(" [%c(%.2d)] \tHorario: - %d:%.2d\n", ini->tipo, ini->comb,
  193.          ((ini->time/3600)-3)%24,( (ini->time/60)%60)) ;
  194.         ini = ini->prox;
  195.     }
  196. }
  197. /*Retira o elemento da lista de eventos apos ser processado*/
  198. Voo* EVretira(Voo* EV){
  199.   Voo* p = EV->prox;
  200.   free(EV);
  201.   return p;
  202. }
  203.  
  204. //Busca os Voos com prioridade de atendimento e coloca nas filas    
  205. int BuscaComb0(Voo* EV, Fila** pista,time_t* agora){
  206.    int comb0=0;
  207.    Voo* ant= (Voo*)malloc(sizeof(Voo));
  208.    ant=NULL;
  209.    //retira os primeiro evento da lista se tiverem combustivel 0
  210.    //e coloca em uma das pistas
  211.    while(EV->comb==0){
  212.       EV->time = agora[comb0%3];
  213.       agora[comb0%3] = agora[comb0%3] + LAND;
  214.       insere(pista[comb0%3],EV);
  215.       EV = EVretira(EV);
  216.       comb0++;
  217.    }
  218.    
  219.    ant = EV;
  220.    EV = EV->prox;
  221.    
  222.    //retira um evento do meio da lista e coloca nas filas de pouso
  223.    //em caso de combustivel 0
  224.    while(EV!=NULL){
  225.       if(EV->comb==0){
  226.          EV->time = agora[comb0%3];
  227.          agora[comb0%3] = agora[comb0%3] + LAND;            
  228.          insere(pista[comb0%3], EV);
  229.          comb0++;
  230.          EV = EVretira(EV);
  231.          ant->prox = EV;
  232.       }
  233.       ant = EV;
  234.       //retira o elemento do final da lista de eventos
  235.       if(EV!=NULL)
  236.       EV = EV->prox;
  237.    }
  238.    //retorna o numero de Voos com combustivel 0
  239.    return comb0;
  240.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement