6
6
7
7
FILE * fp ;
8
8
int HashAcessos ;
9
- int D [4817 ];
10
9
11
10
void AbrirArquivo () {
12
11
Dados Dado ;
@@ -68,17 +67,17 @@ Dados Buscar(char Chave[]){
68
67
int pos = id * sizeof (Dados );
69
68
HashAcessos = 0 ;
70
69
fseek (fp , pos , SEEK_SET );
71
- while (fread (& dados , sizeof (Dados ), 1 , fp ) ) { // Lê o ponteiro da lista encadeada correspondente à posição hash
70
+ while (fread (& dados , sizeof (Dados ), 1 , fp ) ) {
72
71
HashAcessos ++ ;
73
72
if (strncmp (dados .Title , Chave , strlen (Chave )) == 0 ) {
74
73
return dados ;
75
74
}
76
- pos = dados .prox ; // Avança para o próximo nó da lista
75
+ pos = dados .prox ;
77
76
if (pos == 0 ) break ;
78
77
fseek (fp , pos , SEEK_SET );
79
78
}
80
79
strcpy (dados .Title , "" );
81
- return dados ; // Title vazio se não encontrou.
80
+ return dados ;
82
81
}
83
82
84
83
int HashString (char str []) {
@@ -97,7 +96,6 @@ void Imprimir(Dados D) {
97
96
int ContOpcoes = 0 , escolha = 0 ;
98
97
do {
99
98
Borda (0 , 0 , 118 , 28 , 1 , 0 );
100
- //Borda(15, 25, 90, 2, 0, 0);
101
99
Borda (30 , 1 , 60 , 2 , 0 , 0 );
102
100
Borda (18 , 25 , 25 , 2 , 0 ,0 );
103
101
Borda (75 , 25 , 25 , 2 , 0 ,0 );
@@ -147,78 +145,32 @@ void TelaBBinaria(int chave) {
147
145
Borda (12 , 14 , 25 , 2 , 0 ,0 );
148
146
Borda (82 , 14 , 25 , 2 , 0 ,0 );
149
147
GotoXY (20 , 15 ); printf ("%d Acessos" , HashAcessos );
150
- GotoXY (90 , 15 ); printf ("%d Acessos" , AcessoBinaria ( 4817 , chave ));
148
+ GotoXY (90 , 15 ); printf ("%d Acessos" , BuscaBinaria ( 4818 , chave ));
151
149
GotoXY (20 , 10 );
152
150
GotoXY (38 , 26 ); system ("PAUSE" );
153
151
}
154
152
155
- /*int BuscaBinaria(int v[], int n, int x){
156
- int ini = 0, fim = n-1;
157
- while(ini <= fim){
158
- int meio = (ini + meio) / 2;
159
- if(x < v[meio]) fim = meio - 1;
160
- else if(x > v[meio]) ini = meio + 1;
161
- else return meio;
153
+ int BuscaBinaria (int n , int x ){
154
+ int v [4818 ];
155
+ for (int i = 0 ; i < 4818 ; i ++ ){
156
+ v [i ] = i ;
162
157
}
163
- return -1;
164
- }*/
165
-
166
- int AcessoBinaria (int n , int x ){
167
- SalvarRank ();
168
- int ini = 0 , fim = n - 1 , cont = 1 ;
158
+ int meio , ini = 0 , fim = n - 1 , cont = 1 ;
169
159
while (ini <= fim ){
170
- int meio = (ini + meio ) / 2 ;
171
- if (x < D [meio ]){
160
+ meio = (ini + fim ) / 2 ;
161
+ if (x < v [meio ]){
172
162
fim = meio - 1 ;
173
163
cont ++ ;
174
164
}
175
- else if (x > D [meio ]) {
165
+ else if (x > v [meio ]) {
176
166
ini = meio + 1 ;
177
167
cont ++ ;
178
168
}
179
169
else return cont ;
180
170
}
171
+ return -1 ;
181
172
}
182
173
183
- /*int BuscaBinaria(Dados D[], int n, char showId[])
184
- {
185
- int ini = 0, fim = n - 1, meio, acessos = 0;
186
- while (ini <= fim)
187
- {
188
- acessos++;
189
- meio = (ini + fim) / 2;
190
-
191
- int comparacao = strcmp(showId, D[meio].Rank);
192
-
193
- if (comparacao > 0)
194
- ini = meio + 1;
195
- else if (comparacao < 0)
196
- fim = meio - 1;
197
- else
198
- {
199
- printf("Acessos: %d\n", acessos);
200
- return meio;
201
- }
202
- }
203
-
204
- //printf("Acessos: %d\n", acessos);
205
- return acessos;
206
- }*/
207
-
208
- /*int AcessoBiQuant(int rank){
209
- Dados D;
210
- int v[4817], i = 0, cont = 0;
211
- FILE *fp = fopen("pldb.csv", "rb");
212
- fseek(fp, 0, SEEK_SET);
213
- while (fread(&D, sizeof(Dados), 1, fp)){
214
- v[i] = D.Rank;
215
- i++;
216
- }
217
- cont = AcessoBinaria(D, 4817, rank);
218
- fclose(fp);
219
- return cont;
220
- }*/
221
-
222
174
void LerArquivo () {
223
175
char linha [100000 ], texto [100000 ];
224
176
Dados LD ;
@@ -289,44 +241,4 @@ void LerArquivo() {
289
241
i ++ ;
290
242
}
291
243
fclose (fporigin );
292
- }
293
-
294
- void SalvarRank () {
295
- char linha [100000 ], texto [100000 ];
296
- int campo = 0 , i = 0 , j , tam , t , a , aspas ;
297
- FILE * fporigin = fopen ("pldb.csv" , "r" );
298
- if (fporigin == NULL ) {
299
- printf ("Nao abriu pldb.csv\n" );
300
- exit (1 );
301
- }
302
- fscanf (fporigin , " %[^\n]" , linha );
303
- while (fscanf (fporigin , " %[^\n]" , linha )!= EOF ) {
304
- memset (& D , 0 , sizeof (Dados ));
305
- campo = 0 ;
306
- texto [0 ] = 0 ;
307
- tam = strlen (linha );
308
- for (t = 0 ; t < tam ; t ++ ) {
309
- a = 0 ;
310
- aspas = 0 ;
311
- while (linha [t ] != ',' && t < tam ) {
312
- texto [a ++ ] = linha [t ++ ];
313
- if (t > 0 && linha [t - 1 ] == '\"' ) {
314
- a -- ;
315
- while (linha [t ] != '\"' && t < tam ) {
316
- texto [a ++ ] = linha [t ++ ];
317
- }
318
- t ++ ;
319
- }
320
- }
321
- texto [a ++ ] = 0 ;
322
- switch (campo ) {
323
- case 4 :
324
- D [i ] = atoi (texto );
325
- break ;
326
- }
327
- campo ++ ;
328
- }
329
- i ++ ;
330
- }
331
- fclose (fporigin );
332
244
}
0 commit comments