Ciao a tutti,
a breve avrei un esame e dovrei consegnare inizialmente un progetto in C, di cui una delle tracce sarebbe questa:
Si vuole simulare la gestione di un dizionario della lingua italiana. Il dizionario è
indicizzato tramite le lettere dell’alfabeto ed ogni parola contiene i sinonimi (massimo 5)
e la sua spiegazione.
Permettere all’utente di:
· Inserire una parola, ricercarla nel dizionario e visualizzare il significato (usare
la ricerca binaria)
· Visualizzare la parola del dizionario contenente più consonanti.
Implementare l’algoritmo per la simulazione del dizionario ed effettuare almeno un test
per ognuna delle opzioni richieste dall’utente.
Non so se sia strano, ma sono riuscito a risolvere il primo punto ma non il secondo! (quello della parola con più consonanti, appunto)
Vi mostro il codice:
#include <stdio.h>
#include <string.h>
int ricerca_binaria(char chiave[], char *parole[], int n);
void main()
{
char chiave[10];
int n,indice,m,i,res=0;
char *parole[]={"Abete","Abiosfera","Abisso","Antonio","Argilla","Bambu","Bomba","Buca","Buddismo","Buongiorno","Carne","Chioma","Cicca","Collare","Coppia"};
char *parole2[]={"abete","abiosfera","abisso","antonio","argilla","bambu","bomba","buca","buddismo","buongiorno","carne","chioma","cicca","collare","coppia"};
char *vocab[]={"Nome di alcuni alberi","Parte del nostro pianeta dove non e' possibile la vita","Luogo in cui la grande profondita' conferisce un aspetto buio e pauroso","Nome proprio di persona","Tipo di roccia sedimentaria","Nome comune di una pianta","Involucro contenente esplosivo","Cavita del terreno","Religione indiana","Forma di saluto","La parte dei tessuti molli del corpo","Folta capigliatura","Avanzo di sigaro o di sigaretta","Oggetto da mettere al collo degli animali","Abbinamento di due cose o persone"};
char testo[20],finepar[3];
printf("Inserisci la parola da cercare: ");
gets(chiave);
n=15;
indice=ricerca_binaria(chiave,parole,n);
if (indice<0)
indice=ricerca_binaria(chiave,parole2,n);
if(indice>=0)
printf("%s: %s\n",chiave,vocab[indice]);
else
printf("Chiave non trovata\n");
}
int ricerca_binaria(char chiave[], char *parole[], int n)
{
int mediano, primo=0, ultimo=n-1;
while (primo<=ultimo)
{
mediano=(primo+ultimo)/2;
if(strcmp(chiave,parole[mediano])==0)
return mediano;
else if(strcmp(chiave,parole[mediano])<0)
ultimo=mediano-1;
else
primo=mediano+1;
}
return -1;
}
Non vi sto chiedendo di risolvermi il codice perchè sarebbe troppo facile e non imparerei nulla, ma non riesco a capire come muovermi, anche qualche semplice suggerimento o farmici arrivare con la testa sarebbe davvero utile.
Vi ringrazio di cuore già da adesso!