Ir ao conteúdo
  • Cadastre-se

Preciso de ajuda para fazer um código de vagas de estacionamento


Posts recomendados

@devair1010   int insereHash(Hash* ha, struct estacionamento al) {
    if(ha == NULL || ha->qtde == ha->TABLE_SIZE)
        return 0;
    
    int chave = al.matricula;
    int pos = chaveDivisao(chave, ha->TABLE_SIZE);
    
    struct aluno* novo;
    novo = (struct vagas*)malloc(sizeof(struct vags);
    
    if(novo == NULL)
        return 0;
        
    *novo = al;
    ha->itens[pos] = novo;
    ha->qtde++;
    
    return 1;
}
     int buscaHash(Hash* ha, int mat, struct estacionamento* al) {
    if(ha == NULL)
        return 0;
        
    int pos = chaveDivisao(mat, ha->TABLE_SIZE);
    
    if(ha->itens[pos] == NULL)
        return 0;
        
    *al = *(ha->itens[pos]);
    
    return 1;    
}

Link para o comentário
Compartilhar em outros sites

Poste o programa inteiro. E colque o código dentro de um bloco de código. VEja nas instruções do forum. É só usar o botãozinho "code" 

 

Não precisa usar alocação dinâmica para isso. Não vai ter 1 milhão de vagas. É só uma constante. Use umas 500 e ninguém vai te culpar. Use a função de hash para identificar a vaga e pronto. Não use poucas vagas porque aumenta muito a chance de colisão e só vai dar trabalho.

 

A função mais b3st@ de hash é o módulo do tamanho do espaço então... Use essa.

 

É só um brinquedo, um programa para aprendizado.

 

Escreva em torno dos dados. Sempre. É o simples.

 

Exemplo

 

Pegue a placa do carro, calcule um valor e identifique a vaga. Livre? Estaciona. Ocupada? Rejeita. É só isso.

 

Veja como pode ser simples:

 

Placa Mercosul BRA5E07, para combinar com 7 de maio. O programa é seu. Pode fazer o que quiser! A vantagem dos programas de estudantes! 

 

  • Considerando 438 vagas, porque não?
  • usando os valores das letras e dígitos como se fosse a placa um char[8]
    • BRA como char valem 66 82 65, mas não precisa saber: basta multiplicar em C. 66*82*65 = 351780 e não é muito grande. Se fosse ZZZ daria 729.000, já que Z vale 90.
    • soma os E507 para parecer sofisticado (a placa era BRA5E07) e evitar colisão para o mesmo prefixo afinal. Isso daria 69 + 53 + 48 + 55 = 225
    • e o total mágico seria de 351780 + 225 = 352005
    • calcule o resto da divisão por 438 vagas: 291. 352005 % 438 em C...
    • Eis a vaga: 291

 

E assim tem uma função que recebe a placa e devolve a vaga:
 

	int	vaga(const char* placa);

 

E se chamar com 
 

	int tentativa = vaga("BRA5E07");

 

já sabe o que esperar: vai retornar 291 e você vê se a vaga está livre e pronto...

 

	char patio [TAMANHO_][8];

 

Note que se você declarar as vagas assim o vetor patio vai ter os carros lá dentro, já com a placa do carro na vaga. Nada mal. Só falta saber quantos tem no pátio. E que tal juntar?
 

#define TAMANHO_ 438
  
    typedef struct
    {
        unsigned    n_vagas;
        char        vaga[TAMANHO_][8];

    }   Patio;

 

Claro, marcar as vagas como livres pode ser tão simples quanto marcar zero na primeira posição da placa. E claro que poderia ser char* vaga[TAMANHO].

 

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...