Ciao devo creare questo piccolo programmino per la prova in università, ma mi sono bloccato essendo alle prime armi volevo un aiuto.
Questa è la traccia:
Simulare la gestione di un dizionario della lingua italiana.
Il dizionario è indicizzato tramite lettere dell'alfabeto ed ogni parola contiene i sinonimi (max 5) e il suo significato.
L'utente può:
Ricercare una parola e visualizzare il significato
Eliminare una parola
Ricercare la parola con il minimo numero di lettere
questo è il codice fino ad ora:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct parola { //dichiarazione della struct dizionario: formata da quattro elementi di tipo char
char lettera;
char nome [50];
char significato [500];
char sinonimo [40][40];
} dizionario [100];
int ricerca_parola (struct parola dizionario [], int n, char chiave[]);
int main(){
int opzione;
int k=0;
int n=20;
char chiave[20];
dizionario[0].lettera='a';
strcpy (dizionario[0].nome, "antico");
strcpy(dizionario[0].significato, "appartenente ad un'epoca remota");
strcpy (dizionario[0].sinonimo[0], "vecchio");
strcpy (dizionario[0].sinonimo[1], "preistorico");
strcpy (dizionario[0].sinonimo[2], "primitivo");
strcpy (dizionario[0].sinonimo[3], "remoto");
strcpy (dizionario[0].sinonimo[4], "arcaico");
dizionario[1].lettera='b';
strcpy (dizionario[1].nome, "bocciare");
strcpy(dizionario[1].significato, "Negare a uno studente l'ammissione alla classe successiva o un'esame");
strcpy (dizionario[1].sinonimo[0], "respingere");
strcpy (dizionario[1].sinonimo[1], "rifiutare");
strcpy (dizionario[1].sinonimo[2], "silurare");
strcpy (dizionario[1].sinonimo[3], "escludere");
strcpy (dizionario[1].sinonimo[4], "scartare");
dizionario[2].lettera='c';
strcpy (dizionario[2].nome, "complicato");
strcpy(dizionario[2].significato, "Intricato, complesso, di difficile soluzione");
strcpy (dizionario[2].sinonimo[0], "astruso");
strcpy (dizionario[2].sinonimo[1], "cabalistico");
strcpy (dizionario[2].sinonimo[2], "complesso");
strcpy (dizionario[2].sinonimo[3], "difficile");
strcpy (dizionario[2].sinonimo[4], "machiavellico");
dizionario[3].lettera='d';
strcpy (dizionario[3].nome, "duttile");
strcpy(dizionario[3].significato, "Che si modifica a seconda delle necessità e delle circostanze");
strcpy (dizionario[3].sinonimo[0], "agile");
strcpy (dizionario[3].sinonimo[1], "cedevole");
strcpy (dizionario[3].sinonimo[2], "malleabile");
strcpy (dizionario[3].sinonimo[3], "elastico");
strcpy (dizionario[3].sinonimo[4], "trattabile");
dizionario[4].lettera='e';
strcpy (dizionario[4].nome, "estroverso");
strcpy(dizionario[4].significato, "Tendenza a privilegiare il rapporto con il mondo esterno e la socializzazione");
strcpy (dizionario[4].sinonimo[0], "aperto");
strcpy (dizionario[4].sinonimo[1], "brillante");
strcpy (dizionario[4].sinonimo[2], "comunicativo");
strcpy (dizionario[4].sinonimo[3], "gioviale");
strcpy (dizionario[4].sinonimo[4], "socievole");
printf ("Dizionario della Lingua Italiana\n\n");
printf ("inserisci un numero e premi invio:\n\n1) Ricerca una parola\n2) Elimina una parola\n3) Trova la parola piu'' corta!\n0) Esci\n");
scanf("%d", &opzione);
if (opzione==1)
fflush(stdin);
//funzione ricerca significato parola
printf("\tRICERCA PAROLA\n\n");
fflush(stdin);
printf("Inserisci la parola: ");
//gets(chiave);
scanf("%s", &chiave);
fflush(stdin);
k=ricerca_parola (dizionario, n,chiave);
if (k!=-1)
{
// printf("\nLettera: %c\n",dizionario[k].lettera);
printf("\nNome: %s\n",dizionario[k].nome);
printf("\nSignificato: %s\n",dizionario[k].significato);
printf("\nSinonimi: %s, %s, %s, %s, %s",dizionario[k].sinonimo[0],dizionario[k].sinonimo[1],dizionario[k].sinonimo[2],dizionario[k].sinonimo[3],dizionario[k].sinonimo[4]);
}
else
printf("\nParola non trovata!\n\n");
return 0;
}
int ricerca_parola (struct parola dizionario [], int n, char chiave[]){
int mediano, primo=0, ultimo=n-1;
while (primo<=ultimo)
{
mediano=(primo+ultimo)/2;
if (strcmp (dizionario[mediano].nome, chiave)==0)
return mediano;
else if (strcmp (dizionario[mediano].nome, chiave) <0)
ultimo=mediano-1;
else
primo=mediano+1;
}
return -1;
}
ho vari problemi, il codice lo compilo ma nell'esecuzione, nella ricerca delle parole da me inserite, mi "funziona" solo la parola
estroverso, non riesco a capacitarmi del perchè, e poi non ho idea di come affrontare le altre due richieste: eliminare una parola e ricercare la parola con minimo numero di lettere.
Se qualcuno di buona volontà mi potrebbe aiutare, sono davvero disperato.