-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCompraDeCavalos-2.c
194 lines (161 loc) · 5.57 KB
/
CompraDeCavalos-2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#include <stdio.h>
#include <stdlib.h>
// constante repesenta o tamanho da tabela
#define M 17
// estrutura com os itens para compra de cavalos
typedef struct compraCavalos{
int id;
char nome[50];
float preco;
int idade;
float velocidade;
int temperamento;
}CompraCavalos;
// tabela hash do tipo Compra de cavalos
CompraCavalos tabelaHash[M];
CompraCavalos tempTabelaHash[M];
// iniciar a tabela com o valor 0 para demonstrar que ela esta vazia
void iniciarTabela(){
int i;
for(i = 0; i < M; i++)
tabelaHash[i].id = 0;
}
// função de espalhamento (vai gerar um código a ser utilizado como índice de acesso na tabela)
int funcEspalhamento(int chave){
return chave % M;
}
void printTemperamento(){
printf("\n---------------------------TEMPERAMENTO---------------------------\n");
printf("1 - sangue quente: ativos, nervosos, alertas, melhor montabilidade\n");
printf("2 - sangue morno: mistura dos sangues frios com os sangues quentes\n");
printf("3 - sangue frio: calmos e mais faceis de serem domesticados\n");
}
// função para entrada de dados e retornar um cavalo que foi comprado
CompraCavalos entradaDados(){
CompraCavalos c;
printf("Digite o ID: ");
scanf("%d", &c.id);
printf("Digite o nome: ");
scanf("%s", c.nome);
printf("Digite o preco: ");
scanf("%f", &c.preco);
printf("Digite a idade: ");
scanf("%d", &c.idade);
printf("Digite a velocidade: ");
scanf("%f", &c.velocidade);
do{
printTemperamento();
printf("\nDigite o numero do temperamento: ");
scanf("%d", &c.temperamento);
printf("\n");
if(c.temperamento > 3 || c.temperamento < 1)
printf("\nNumero invalido! Selecione um valor da tabela:\n");
} while (c.temperamento > 3 || c.temperamento < 1);
return c;
}
// inserir um cavalo na tabela
void inserirCavalo(){
CompraCavalos cavalo = entradaDados();
int indice = funcEspalhamento(cavalo.id);
//tratando colisões
while(tabelaHash[indice].id != 0)
indice = funcEspalhamento(indice+1);
tabelaHash[indice] = cavalo;
printf("Cavalo comprado com sucesso!\n");
}
//Buscando um cavalo pelo seu id (nossa chave)
CompraCavalos* buscarCavalo(int chave){
int indice = funcEspalhamento(chave);
while(tabelaHash[indice].id != 0){
if(tabelaHash[indice].id == chave){
return &tabelaHash[indice]; //retorna o end. de memoria em que o cavalo esta
}
else
indice = funcEspalhamento(indice+1); //caso possua colisão e o valor que estamos procurando esta em outra posicao
}
return NULL; //O elemento nao esta na tabela
}
//imprimir toda a tabela Hash
void imprimirCavalos(){
printf("\n---------------ESTABULO COM NOVOS CAVALOS-----------------\n");
printf(" ID | Nome | Preco | Idade | Velocidade | Temperamento\n");
int i;
for(i = 0; i < M; i++){
if(tabelaHash[i].id != 0)
printf("%d = %d | %s | %.2f | %d | %.1f | %d\n", i, tabelaHash[i].id, tabelaHash[i].nome, tabelaHash[i].preco, tabelaHash[i].idade, tabelaHash[i].velocidade, tabelaHash[i].temperamento);
else
printf("%d =\n", i);
}
printf("\n----------------------------------------------------------\n");
}
//imprimir cavalos por temperamento
void imprimirCavalosPorTemperamento(){
int temperamento;
printTemperamento();
printf("\nVoce gostaria de listar os cavalos por qual temperamento?\n");
scanf("%d", &temperamento);
int i;
for(i = 0; i < M; i++)
{
if(tabelaHash[i].temperamento == temperamento) {
printf("%d = %d | %s | %.2f | %d | %.1f | %d\n", i, tabelaHash[i].id, tabelaHash[i].nome, tabelaHash[i].preco, tabelaHash[i].idade, tabelaHash[i].velocidade, tabelaHash[i].temperamento);
}
}
}
// funcao de remover um cavalo do estabulo
void remover(int pos) {
int i, verificador = 0;
if ((tabelaHash[pos].id != 0) && ((tabelaHash[pos].id) != 0) ){
printf("\n-> Dados HASH[%d] estao sendo apagados...\n",pos);
printf("%2d = %3d | %s | %.2f | %d | %.1f | %d\n", pos, tabelaHash[pos].id, tabelaHash[pos].nome,
tabelaHash[pos].preco, tabelaHash[pos].idade, tabelaHash[pos].velocidade, tabelaHash[pos].temperamento);
tabelaHash[pos] = tempTabelaHash[pos];
printf("-> Dados HASH[%d] apagados\n",pos);
printf("%2d = %3d | %s | %.2f | %d | %.1f | %d\n", pos, tabelaHash[pos].id, tabelaHash[pos].nome,
tabelaHash[pos].preco, tabelaHash[pos].idade, tabelaHash[pos].velocidade, tabelaHash[pos].temperamento);
} else {
printf("\nA posicao esta vazia\n");
}
}
int main() {
int option, chave, pos;
CompraCavalos *c; //criamos um ponteiro pois a funcao buscarCavalo retorna um ponteiro
iniciarTabela();
do{
printf("\n0 - Sair\n1 - Inserir\n2 - Buscar\n3 - Imprimir\n4 - Imprimir por temperamento\n5 - Remover\n");
scanf("%d", &option);
switch(option){
case 0:
printf("Saindo...\n");
break;
case 1:
inserirCavalo();
break;
case 2:
printf("Digite o ID que sera buscado: ");
scanf("%d", &chave);
c = buscarCavalo(chave);
if(c){ //c != NULL
printf("\nO ID foi encontrado na tabela:");
printf("\nID: %d | Nome: %s | Preco: %.2f | Idade: %d | Velocidade: %.1f | Temperamento: %d\n", c->id, c->nome, c->preco, c->idade, c->velocidade, c->temperamento);
}
else
printf("\nID nao foi encontrado!\n");
break;
case 3:
imprimirCavalos();
break;
case 4:
imprimirCavalosPorTemperamento(c);
break;
case 5:
printf("Digite a posicao a ser apagada: ");
scanf("%d", &pos);
remover(pos);
break;
default:
printf("Opcao invalida!\n");
}
} while(option != 0);
return 0;
}