O objetivo deste trabalho é simular os padrões de aterrissagem e decolagem em um
aeroporto. Suponha um aeroporto que possui três pistas, numeradas como 1, 2 e 3. Existe uma
“prateleiras" de espera para aterrissagem, e uma para decolagem.
A cada unidade de tempo, de zero a três aeronaves podem chegar nas filas de decolagem e
de zero a três aeronaves podem chegar nas prateleiras. A cada unidade de tempo, cada pista pode
ser usada para um pouso ou uma decolagem. A prioridade, inicialmente, é para aterrissagem.
Utilize inteiros pares sucessivos de ID dos aviões chegando na fila de decolagem e ímpares
para a filas d aterrissagem. A cada unidade de tempo, assuma que os aviões entram nas filas antes
que aterrissagens ou decolagens ocorram. Projete um algoritmo que não permita o crescimento
excessivo das filas de aterrissagem ou decolagem. Coloque os aviões sempre no final das filas.
A saída do programa deverá indicar o que ocorre a cada unidade de tempo. Periodicamente
imprima:
a) o conteúdo de cada fila;
os aviões que estão decolando/aterrissando em cada uma das 3 pistas;
Obs.: A entrada deve ser criada utilizando-se um gerador de números aleatórios.
typedef struct {
int aviao;
}tipoitem;
typedef struct{
tipoitem itens [maxtam];
int inicio, fim;
}tipopista;
void pista_vazia (tipopista *pista)
{
pista->inicio=0;
pista->fim=0;
}
int pistavazia (tipopista pista)
{
return (pista.inicio==pista.fim);
}
void enfileira_aviao_para_pousar (tipopista *pista, tipoitem dados)
{
pista->itens[pista->fim]=dados;
pista->fim++;
}
void imprime_pista (tipopista pistax)
{
int i;
printf ("\n\n\n\t\t\t ___________________________");
printf ("\n\t\t\t|______ PISTA DE POUSO______| \n ");
for (i=pistax.inicio; i<pistax.fim; i++)
printf (" %d - ", pistax.itens.aviao);
}
int pouso ( tipopista *pista,int pos, tipoitem *dados)
{
int aux;
*dados = pista->itens[pos];
for (aux=pos; aux<pista->fim; aux++)
pista->itens[aux-1]=pista->itens[aux];
pista->fim--;
}
int numeros_de_pouso ( tipopista pista)
{
return (pista.fim);
}
// PISTA DO AEROPORTO PARA DECOLAGEM
typedef struct{
int avioes;
}tipoaeroporto;
typedef struct {
tipoaeroporto item [tamanho];
int primeiro, ultimo;
}tipopistadedecolagem;
void faz_pista_de_decolagem (tipopistadedecolagem *lista)
{
lista->primeiro=0;
lista->ultimo=0;
}
int pista_de_decolagem (tipopistadedecolagem lista)
{
return (lista.primeiro==lista.ultimo);
}
void avioes_para_decolagem (tipopistadedecolagem *lista, tipoaeroporto info)
{
lista->item[lista->ultimo]=info;
lista->ultimo++;
}
void imprime_decolagem (tipopistadedecolagem listay)
{
int j;
printf ("\n\n\n\t\t\t ___________________________");
printf ("\n\t\t\t|_____PISTA DE DECOLAGEM____| \n ");
for (j=listay.primeiro; j<listay.ultimo; j++)
printf (" %d - ", listay.item[j].avioes);
}
int pista_de_decolagem ( tipopistadedecolagem *lista, int posicao, tipoaeroporto *info)
{
int aux2;
*info = lista->item[posicao];
for (aux2=posicao; aux2<lista->ultimo; aux2++)
lista->item[aux2-1]=lista->item[aux2];
lista->ultimo--;
}
int numeros_de_decolagem (tipopistadedecolagem lista)
{
return (lista.ultimo);
}
int main(int argc, char *argv[])
{
tipoitem pista;
tipopista pistas;
tipoaeroporto decola;
tipopistadedecolagem decolagem;
int op,x,pos=0,posicao=0;
int conta_decolagem_na_pista_um=0, conta_decolagem_na_pista_dois=0;
int pista_um, pista_dois,pista_tres;
faz_pista_de_decolagem (&decolagem);
pista_vazia (&pistas);
srand ((unsigned )time(NULL));
while (op!=-1)
{
system ("cls");
printf ("\n\t\t\t###############################");
printf ("\n\t\t\t# CONTROLE DE TRAFEGO AEREO #");
printf ("\n\t\t\t###############################");
printf ("\n\t\t ____________________________________________");
printf ("\n\t\t| TECLE 1 PARA CONTINUAR OU -1 PARA SAIR |");
printf ("\n\t\t|_________________________________________ ___|\n");
printf ("\n\n\n\n\t\t\t\t SUA OPCAO --------> ");
scanf ("%d", &op);
system ("cls");
switch (op)
{
case 1:
while ((x=rand())>3);
if (x%2==1)
{
pista.aviao=x;
enfileira_aviao_para_pousar(&pistas, pista);
}
if (x%2==0)
{
decola.avioes=x;
avioes_para_decolagem (&decolagem, decola);
}
pista_um ;
imprime_decolagem (decolagem);
imprime_pista (pistas);
printf ("\n\n\n\n\n %d ", x);
printf ("\n\n %d DECOLAGEM NA PISTA UM ", conta_decolagem_na_pista_um);
printf ("\n\n %d DECOLAGEM NA PISTA DOIS ", conta_decolagem_na_pista_dois);
break;
}
getch();
}
}
minha duvida é em como saber se as pistas estão vazia ou não...
como fazer as condições para aterrizar, ou pousar nas pistas vazias...
quem puder dar uma ideia agradeço...
abraços