Zanelatto1 / linguagem-c

0 stars 0 forks source link

estacionamento_pilha.c #2

Open Zanelatto1 opened 8 years ago

Zanelatto1 commented 8 years ago

include

include

define MAX 10

define MAX_AUX 9

typedef struct Carros { int placa; int manobra; }carros;

typedef struct Pilha{ int carros [MAX];
int topo;
}pilha;

void inicia_pilha(pilha *p) { p->topo = 0; printf("\nEstacionamento aberto\n"); }

int pilha_vazia(pilha *p) { return p->topo == 0;
}

int pilha_cheia(pilha *p) { return p->topo == MAX;
}

int empilha(int i, pilha *p) {
p->carros [p->topo] = i;
p->topo++;
}

int desempilha(pilha *p) { int pl = p->carros [p->topo--];
return pl;
}

int tamanho_pilha(pilha *p) { return p->topo; }

void mostra_pilha(pilha p, char msg) { int i;
printf("\n%s: ", msg);
if (pilha_vazia(p)) { printf(" Estacionamento Vazio");
} else { for(i=0; i<MAX; i++) { printf("\n[%d]: %d", i, p->carros[i]);
}
} }

pilha chega_carro(int pl, pilha *p) {
carros c; pl = c.placa; c.manobra = 0;

printf("\nDigite a Placa: "); scanf("%d", &pl);
printf("\tCarro %d chega", pl);
printf("\t\tVerifica vaga: ");

if(!pilha_cheia(p)) { printf(" ha' vagas"); printf("\t %d estaciona", pl);
empilha(pl, p); } else { printf(" Nao ha vagas. Estacionamento Lotado."); }
}

int sai_carro(int pl, pilha p) { carros c; pl = c.placa; c.manobra = 0;
pilha
aux;
int i;

if(pilha_vazia(p)) { printf("\nEstacionamento Vazio! Ocorreu um equivoco..."); } else if(!pilha_vazia(p)) {
printf("\nDigite a Placa para Retirada de veiculo: ");
scanf("%d", &pl);

if (p->carros[p->topo] == pl) 
{     
  printf("\nCarro %d saiu do estacionamento", pl);
  desempilha(p);      

  if(!pilha_vazia(aux))
  {
    do
    {         
      empilha(pl, p);
      desempilha(aux);
    }while (!pilha_vazia(aux));     
  }
}
else if (p-> carros [p->topo] != pl)    
{  
  for(i=0; i<=MAX; i++)
  {
    if((i=MAX)  && (p->carros[p->topo] != pl))
    {
      printf("\nCarro com %d placa nao consta no estacionamento!", pl);
    }
  }
  do
    {
      empilha(pl, aux); 
      //pl = c.placa;
      c.manobra++;

      desempilha(p); 
      printf("\nCarro %d saiu do estacionamento", pl);
      printf("\ncom %d manobras", c.manobra);
    }
    while(p-> carros [p->topo] != pl);          
}      
 }//fim do: else if(!pilha_vazia(p))
 return pl;

} int main(int argc, char argv[]) { pilha p, *aux;
carros c; int pl, m, escolha, contador;

p = (pilha ) malloc (sizeof (pilha)); aux = (pilha ) malloc (sizeof (pilha)); //c = (carros ) malloc (sizeof (carros ));

do { printf("\n=========================================="); printf("\n PROGRAMA ESTACIONAMENTO \n"); printf("============================================"); printf("\nEscolha uma opcao: \n"); printf(" 1 - Abrir Estacionamento\n"); printf(" 2 - Estacionar veiculo\n"); printf(" 3 - Retirar veiculo\n"); printf(" 4 - Mostrar status do estacionamento\n"); printf(" 5 - Sair\n\n"); scanf("%d", &escolha); printf(" Opcao escolhida: %d\n", escolha);

switch(escolha)
{
  case 1:
      inicia_pilha(p);
      break;
  case 2:
      chega_carro(pl, p);
      break;
  case 3:
      sai_carro(pl, p);
      break;
  case 4:
      mostra_pilha(p, "Status do Estacionamento");
      break;
  case 5:
      free(p);
      free(aux);
      exit(0);
  default:
      printf("\nOpcao Invalida");
      break;
}

}while ( (escolha >= 1) && (escolha <= 5) );

printf("\n\n"); return 0; }

Zanelatto1 commented 8 years ago

Exercício de Estrutura de Dados (Projeto 1) estacionamento_pilha.c

apenas a função de retirar o carro do estacionamento não está funcionando.