Newsgroup: it.comp.lang.c
Titolo: errori vari in una tabhash

Salve a tutti, vi ho postato il listato, o meglio la bozza del listato,
perchč
mi da degli errori di sintassi  che non riesco a risolvere, anche perchč,
non č che sia a digiuno di C, ma non č molto tempo che ci  programmo.
Vi faccio anche una domanda: come si dichiara una tabella hash e cioč un
vettore di liste??
Grazie mille
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define dim 30
struct nlista{
char chiave;
struct nlista* next;
}lista;
lista tab[dim];  <-------------QUI MI DA ERRORE
int hash(int,char[]);
lista find(int,char[],tab*);<-----------------ERRORE
main()
{
lista temp;<------------------------ERRORE
char word[20];<-------------------ERRORE
FILE *fpin,*fpout;<----------------ERRORE
int len,i=0;<------------------------ERRORE
fpin=fopen("in.txt","r");
fpout=fopen("out.txt","w");
while (len!=-1)
 { len=getword(fpin,&word[0]);
 i=hash(dim,word);
 if (find(i,word,*tab)==NULL) insert(i,word,*tab);
 fprintf(fpout,"%s",word);
 if (word[0]!='\0')
 fprintf(fpout,"\n");
 }
}
int getword(FILE *fp,char *word)
 {
 int j=0;
 char c;
 c=tolower(getc(fp));
 if (c!=EOF)
  {
  while ((c>='a')&&(c<='z'))
  {
  word[j]=c;
  j++;
  c=tolower(getc(fp));
  }
  word[j]='\0';
  return j;
  }
 else return -1;
}
lista find(int i,char word,tab *t)<------------ERRRORE
{ int j;
if (t[i]==null) return null;
 else
 if (word==t[i]->chiave) return t[i]->chiave
 else  return find(i, word, t[i]->next);}
void insert(int i,char *word, tab t[])
{lista temp;
if (t[i] == null)  t[i]->chiave=word
 else while  (t[i] != null)
      t[i]=t[i]->next;
t[i]->chiave=word;}
int hash(int dim,char chiave[])
{
int i,t;
int ris=0;
for (i=0;i<chiave.lenght();i++) {
 t=pow(256,i);
 ris= ris+((chiave[i] * t )%dim);}
 ris=ris % dim;
 return ris; }


I'm not prejudiced, I hate everyone equally.

Ok la dichiarazione dellla tabella funziona, ma non capisco perchè
mi dice che manca una parentesi tonda chiusa in questa funzione ed anche in
un altra molto simile:
lista find(int,char[],tab*);<-----------------ERRORE
il cursore si posiziona sull' asterisco.
Antonio barbone <bar...@raffaello.home> wrote in message
slrnacftce...@barbone.bagnoli.home...


}lista;
oppure
typedef struct nlista lista;
struct nlista{
...
};
Ma puoi anche fare
typedef struct lista lista;
struct lista{
...
};
oppure
typedef struct lista{
...
}lista;
Prima dichiaravi un oggetto di nome lista di tipo nlista, non il tipo
lista.
-- 
+---- | Un OS per domarli, Un OS per trovarli,             |  -o)
+---+ | Un OS per ghermirli e nel buio incatenarli         |  /\\
 O  | | Nella terra di Redmond, ove l'ombra cupa scende... | _\_V
                    raffaele punto salmaso presso libero punto it

 lista find(int i,char word,tab *t)<------------ERRRORE
tab e` una variabile, non un tipo di dato. Cosa stai cercando di
passare?
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani

 il cursore si posiziona sull' asterisco.
leggi la risposta di Kronos ...
ciao ...





 si fa cosi`? 
No. t[i].chiave
ciao
Kronos
PS: quota meglio
-- 
Home: 
http://kronoz.cjb.net
Un apostolo vedendo Gesu` camminare sulle acque:
- Cazzo se e` buono 'sto fumo!!!

 wrote in message
aa9bfe$j98$1...@dreamland.darkstar.net...


 lista find(int i,char word,lista[] t)<-------errore
quindi questo diventa:
lista find(int i,char word,lista t[])
ciao
Kronos
PS: quale parte di "quota meglio" non ti e` chiara?
-- 
Home: 
http://kronoz.cjb.net
"La mia teoria scientifica preferita e` quella secondo la quale gli 
 anelli di Saturno sarebbero interamente composti dai bagagli andati 
 persi nei viaggi aerei." -- Mark Russel

Il prog fa quasi quello che dovrebbe fare e cioč prendere le parole da un
file input, memorizzarle in una tabhash e poi riscriverle in un file output.
Quasi perchč in out non da tutte le parole ma solo piů volte l'ultima
memorizzata!!
Potresti dargli un ulteriore occhiata?
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#define DIM 10
typedef struct nlista{
char *chiave;
struct nlista* next;
}lista;
int len;
lista tab[DIM];
int getword(FILE *fp,char *word)
 {
 int j=0;
 char c;
 c=tolower(getc(fp));
 if (c!=EOF)
  {
  while ((c>='a')&&(c<='z'))
  {
  word[j]=c;
  j++;
  c=tolower(getc(fp));
  }
  word[j]='\0';
  return j;
  }
 else return -1;
}
lista* find(int j,char *word,lista t[])
{
if (t[j].chiave==NULL) return NULL;
 else
 if (word==t[j].chiave) return t[j].chiave;
  else  return find(j, word, t[j].next);}
void insert(int j,char *word, lista t[])
{lista temp;
if (t[j].chiave == NULL)  t[j].chiave=word;
 else  insert(j,word,t[j].next);}
 /*while  (t[i].chiave != NULL)
      t[i].chiave=t[i].next;
t[i].chiave=word;}*/
int hash(int dim,char chiave[])
{
int j,t;
int ris=0;
for (j=0;j<len;j++) {
 t=pow(256,j);
 ris= ris+((chiave[j] * t )%DIM);}
 ris=ris % DIM;
 return ris; }
main()
{
lista temp;
char word[20];
FILE *fpin,*fpout;
int i;
for (i=0;i<DIM;i++)
tab[i].chiave=NULL;
fpin=fopen("in.txt","r");
fpout=fopen("out.txt","w");
while (len!=-1)
 { len=getword(fpin,&word);
 if (word!=('\0','\n')) {
 i=hash(DIM,word);
 if (find(i,word,tab)==NULL) insert(i,word,&tab);}
 }
for (i=0;i<DIM;i++)
 while (tab[i].chiave != NULL)
 {fprintf(fpout,"%s\n",tab[i].chiave);
 tab[i].chiave=tab[i].next;}
}

 tab[i].chiave=tab[i].next;}
tab[i].chiave e` un puntatore a char, tab[i].next e` un puntatore a
struct
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

 Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG