| V I S U A L I Z Z A D I S C U S S I O N E |
| ioboss |
Inserito il - 12/02/2004 : 12:10:32 ragà.. aiuto.. =\ sto facendo l'analizzatore lessicale.. il sorgente viene compilato ma mi da un errore di violazione di accesso durante l'esecuzione.. si blocca sempre quando leggo un carattere dal file.. sapreste dirmi cos'è ke sbaglio?? O_o in allegato c'è il sorgente in c..
Allegato: aiuto.txt 9,92 KB |
| 6 U L T I M E R I S P O S T E (in alto le più recenti) |
| MnK |
Inserito il - 14/02/2004 : 15:48:19 /* ----------FUNZIONE HASH--------------------*/ int hash(struct token *tkn,struct token *vet_tkn[]) { printf("----E' stata appena richiamata la funzione HASH ----\n");
int hashval; int libero = 0; int i = 0, p = 0; for (hashval = 0; tkn->name[i] !='\0'; i++) hashval= tkn->name[i] + 31 *hashval;
hashval = hashval % HASHSIZE; printf("Il valore Hash Calcolato e': %i \n",hashval);
if (vet_tkn[hashval]->name == NULL) { vet_tkn[hashval] = tkn; } else { i = hashval; while (libero == 0) { if (vet_tkn[i]->name == NULL) { vet_tkn[i] = tkn; libero = 1; } i++;
if (i == HASHSIZE) { for (i = 0; i <= hashval; i++) { if (vet_tkn[i]->name == NULL) { vet_tkn[i] = tkn; libero = 1; } if (i >= hashval) { printf("TABELLA PIENA! \n"); libero = 1; } } //End For } //End IF } //End While } //Fine Else }
ALLORA VEDIAMO. C'E' QUALCOSA CHE NN MI CONVINCE. *vet_tkn[] E' IL PUNTATORE AL VETTORE DI LISTE.GIUSTO? NEL PRIMO CICLO QUANDO hashval=0 hashval= tkn->name[i] + 31 *hashval;COME FA' tkn->name[i] che credo sia una stringa ad essere = ad hashval che e' dichiarato come un int? -> nn si usa per selezionare un campo della cosa puntata da un puntatore? ma vet_tkn[hashval]->name VET_TKN[..]NN E' UN PUNTATORE....o sbaglio? |
| Tano |
Inserito il - 14/02/2004 : 00:37:30 Non è altro che la creazione di un valore HASH a una chiave estratta. Tu puoi progettare qualsiasi algoritmo che ti generi un valore HASH, in questo caso è stato scelto
hashval = *s + 31 * hashval; return hashval % HASHSIZE;
dove viene restituito un valore compreso tra 0 e N del vet[0..N]. Una chiave Hash può anche essere Hashval = primalettera in binario + seconda lettera in binario ecc..
La scelta della chiave è soggettiva. |
| MnK |
Inserito il - 14/02/2004 : 00:11:15 unsigned hash(char *s) { unsigned hashval; for (hashval = 0; *s != '\0'; s++) hashval = *s + 31 * hashval; return hashval % HASHSIZE; }
Ragazzi per favore sareste così gentili da spiegarmi sto pezzo di codice?nn riesco proprio a capirlo.In particolare hashval = *s + 31 * hashval; Perche' proprio 31?E' ricorsiva come funzione vero?E perche'? Grazie 1000.Sergio. |
| Tano |
Inserito il - 12/02/2004 : 23:26:10 prova a crearti un algoritmo a parte in C che preleva caratteri dal File e stampali a video. Cosi vedi bene se c'è un errore di sintassi.
E' molto utile isolare parti di programma. |
| ioboss |
Inserito il - 12/02/2004 : 22:12:17 spero anke io nn sia troppo tardi.. =( l'esame ce l'ho il 18.. O_O |
| nicux |
Inserito il - 12/02/2004 : 13:31:20 uhmm... quel codice ha un che di familiare... dopo l'esame di asd gli dò un occhiata, spero non sia troppo tardi. |