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..
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.
La bontà è l'unico investimento che non fallisce mai. (H. D. THOUREAU) Ah LA PRIKKOPRAKK L'antica arte della ristorazione cinese....
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
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.
"I Giorni e le Notti suonano in questi miei nervi d'arpa. Vivo di questa gioia malata d'universo e soffro per non saperla accendere nelle mie parole"
/* ----------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;
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?
La bontà è l'unico investimento che non fallisce mai. (H. D. THOUREAU) Ah LA PRIKKOPRAKK L'antica arte della ristorazione cinese....