Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Primo Anno
 Linguaggi di programmazione
 Potete dare uno sguardo
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

ohtar
Utente medio



Inserito il - 08/07/2004 : 11:24:23  Mostra Profilo  Visita l'Homepage di ohtar  Clicca per vedere l'indirizzo MSN di ohtar Invia a ohtar un Messaggio Privato  Rispondi Quotando
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define numeri 24
#define dimensione 29
#define salto 7
#define null 0


struct table
{
char id[10];
int num;
}tabella[dimensione];



void azzera()
{
int i;
for (i=0;i<dimensione;i++)
tabella[i].num=null;
}

int check (int k)
{
if (tabella[k].id==null)
return 1;
else
return 0;
}
int conv(char cod)
{
switch (cod)
{
case ('a'):
return 10;
break;
case ('b'):
return 11;
break;
case ('c'):
return 12;
break;
case ('d'):
return 13;
break;
case ('e'):
return 14;
break;
case ('f'):
return 15;
break;
case ('g'):
return 16;
break;
case ('h'):
return 17;
break;
case ('i'):
return 18;
break;
case ('j'):
return 19;
break;
case ('k'):
return 20;
break;
case ('l'):
return 21;
break;
case ('m'):
return 22;
break;
case ('n'):
return 23;
break;
case ('o'):
return 24;
break;
case ('p'):
return 25;
break;
case ('q'):
return 26;
break;
case ('r'):
return 27;
break;
case ('s'):
return 28;
break;
case ('t'):
return 29;
break;
case ('u'):
return 30;
break;
case ('v'):
return 31;
break;
case ('w'):
return 32;
break;
case ('x'):
return 33;
break;
case ('y'):
return 34;
break;
case ('z'):
return 35;
break;

}
int hash(char cod[10])
{
int indice,partenza,somma=0;
int i=0;
do
{
somma=somma+conv(cod[i]);
} while (cod[i]!='\0');
indice=somma%dimensione;
if (!(check(indice)))
{
partenza=indice;
do
{
indice=(indice+salto)%dimensione;
}while (!(check(indice))&& indice!=partenza);
if ((check(indice))||(indice=partenza))
indice=-1;
}
if (indice!=-1)
strcpy(tabella[indice].id,cod);
return indice;
}

void ricerca()
{
char codice[10];
int i=0;
int somma;
int indice,partenza;
printf("Inserisci l'elemento da cercare.\n");
scanf("%s",&codice);
do
{
somma=somma+codice[i];
} while (codice[i]!='\0');
indice=somma%dimensione;
if (tabella[indice].id==codice)
printf("L'elemento e' stato trovato nella posizione %d.\n",indice);
else
{
partenza=indice;
do
{
indice=(indice+salto)%dimensione;
} while (tabella[indice].id!=codice && indice!=partenza && !check(indice));
}
if ((indice==partenza)||(check(indice)))
printf("L'elemento non e' presente all'interno della tabella.\n");
else
printf("L'elemento e' stato trovato alla posizione %d.\n",indice);
}

void inserimento()
{
int i=0,indice,nume,errore;
char cod[10];
printf("Tabella hash.\n\n");
printf("L'inserimento si conclude con un asterisco.\n\n");
do
{
printf("Inserisci il numero negativo per terminare");
scanf("%d",&nume);
if (nume>0)
{
printf("Inserisci il %d° elemento:\n",i+1);
scanf("%s",&cod);
if (indice=(hash(cod)==-1))
errore=1;
i++;
}
} while (nume>0 && i<=numeri && errore!=1);
if (errore==1)
printf("Non e' possibile inserire l'elemento perche' la tabella e' gia' piena.\n");
}

void visualizza()
{
int i;
printf("\n\n");
for (i=0;i<dimensione;i++)
printf("\t%s",tabella[i].id);
printf("\n\n");
}



int main(int argc, char *argv[])
{
azzera();
inserimento();
visualizza();
ricerca();
visualizza();
system("PAUSE");
return 0;
}




Nella compilazione mi da un parse error at the end of input, cioè all'ultima riga dopo l'ultima }. Qualcuno sa dirmi dove ho sbagliato? Per la funzione hash ho utilizzato una funzione che mi converte i caratteri in interi e poi una volta sommati tutti i caratteri, viene calcolato il modulo. Un'altra cosa: ma nello switch posso considerare più condizioni per ogni case o devo specificare solo una condizione? Mi spiego meglio: io per ogni case ho considerato solo lettere minuscole, se volessi considerare anche le lettere maiuscole come dovrei fare?



www.giovinazzo.it , per sapere tutto ciò che accade a Giovinazzo.

n/a
deleted

Prov.: Bari


Inserito il - 08/07/2004 : 11:55:02  Mostra Profilo  Visita l'Homepage di n/a Invia a n/a un Messaggio Privato  Rispondi Quotando
senza indentatura non si capisce un caiser, comunque di solito i parse error at end of input significano in italiano: hai messo qualche graffa in più o in meno del previsto, quindi gli darei un'occhiatina più approfondita
see you
Torna all'inizio della Pagina

Iddqd
Arbiter Musicae

Apple


Regione: Puglia
Prov.: Foggia


Inserito il - 08/07/2004 : 11:56:46  Mostra Profilo  Visita l'Homepage di Iddqd Invia a Iddqd un Messaggio Privato  Rispondi Quotando
Citazione:
Messaggio inserito da ohtar


#define numeri 24
#define dimensione 29
#define salto 7



Vediamo vediamo... Allora le macro credo sia buona abitudine scriverle in maiuscolo...

Citazione:

#define null 0



E' un po' brutto fare una macro "null" che verrà confusa di sicuro con "NULL"...

Citazione:

int conv(char cod)
{
switch (cod)
{
case ('a'):
return 10;
break;
case ('b'):
return 11;
break;
case ('c'):
return 12;
break;
...
...
...
case ('y'):
return 34;
break;
case ('z'):
return 35;
break;
}




Questo è il punto che fa innervosire il compilatore, c'è una "}" mancante. Ma è quasi sempre colpa di parentesi mancanti quando il compilatore se ne viene fuori con un errore all'ultima riga...

Citazione:

Un'altra cosa: ma nello switch posso considerare più condizioni per ogni case o devo specificare solo una condizione? Mi spiego meglio: io per ogni case ho considerato solo lettere minuscole, se volessi considerare anche le lettere maiuscole come dovrei fare?



Hai parecchie alternative...
Le più condizioni nello switch le puoi fare così:

switch(charr)
{
case a:
case A:
printf("E' una splendida "a", minuscola o maiuscola");
break;
case b:
case B:
printf("E' una splendida "b", minuscola o maiuscola");
break;
...
...
}

Oppure più simpaticamente trasforma prima il carattere in minuscolo/maiuscolo con int toupper(char)/int tolower(char).

Citazione:

system("PAUSE");



NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!!!!!
Lo sapevo che non potevo fidarmi di te! Sei un bieco confratello della setta del system("Pause");!
Non avrei dovuto aiutarti!!!!
Vai a leggere la discussione sul system("Pause"); e abbandona il lato oscuro della forza!!!

2.0211 If the world had no substance, then whether a proposition had sense
would depend on whether another proposition was true.
Torna all'inizio della Pagina

ohtar
Utente medio



Inserito il - 08/07/2004 : 13:28:32  Mostra Profilo  Visita l'Homepage di ohtar  Clicca per vedere l'indirizzo MSN di ohtar Invia a ohtar un Messaggio Privato  Rispondi Quotando
Lo so hai ragione. Ho letto la discussione sul system pause ma non ho fatto in tempo a correggere. Vedrò di allinearmi subito alla vostra lotta. Cmq ti ringrazio davvero per l'aiuto e la disponibiltà.

www.giovinazzo.it , per sapere tutto ciò che accade a Giovinazzo.
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,24 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000