Ir ao conteúdo

Posts recomendados

Postado

programa em c crontola vagas de um estacionamento por tabela hash, utilize o metodo da divisao ou mutiplicação ,se houver colisao ,nao recalcule,apenas negue a possibilidade de estacionar 

  • Confuso 3
Postado

@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;    
}

Postado

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].

 

 

 

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...