AIUTO - Test universitario creazione dizionario

di il
2 risposte

AIUTO - Test universitario creazione dizionario

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.

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte