Eliminare una Parola dal Dizionario C

di il
3 risposte

Eliminare una Parola dal Dizionario C

Ciao a tutti,
sto svolgendo un progetto di un dizionario, essendo alle prime armi, non so come esaudire la richiesta di ELIMINAZIONE di una parola dal dizionario, qualcuno ha idee in merito?
Allego il codice
//
//  Dizionario della Lingua Italiana
//
//  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
//

//  Copyright © 2016 Marco Ambrosino. All rights reserved.
//

#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 [5][20];
} dizionario [100];

int ricerca_parola (struct parola dizionario [], int n, char chiave[]);

void inizializza (struct parola dizionario[100]);

int main(int argc, char *argv[]){
    
    int opzione;
    
    int k=0;
    
    int n=21; //grandezza del dizionario
    
    char chiave[20]; //chiave di ricerca binaria
    
    inizializza(dizionario); //riempimento dizionario
    
    
    printf ("Dizionario della Lingua Italiana\n\n");
    
  //  for (;;)
        
 //   {
 
    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: ");
    
    scanf("%s", &chiave);
    
   // strlwr(chiave);      //trasformazione della chiave in caratteri minuscoli
    
    k=ricerca_parola (dizionario, n, chiave);
    
    if (k!=-1)
    {
    
        printf("\nNome: %s\n",dizionario[k].nome);
        
        printf("\nSignificato: %s\n",dizionario[k].significato);
        
        printf("\nSinonimi: %s, %s, %s, %s, %s\n\n",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");
    
    
    
    //system("PAUSE");
    
  //  }
    
    return 0;
    
}


//FUNCTION


void inizializza (struct parola dizionario[100]){
    
    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");

    dizionario[5].lettera='f';
    strcpy(dizionario[5].nome,"conto");
    strcpy(dizionario[5].significato,"Insieme di scritture relative ad un dato oggetto di cui si mette in evidenza la variabile e commensurabile grandezza");
    strcpy (dizionario[5].sinonimo[0], "calcolo");
    strcpy (dizionario[5].sinonimo[1], "conteggio");
    strcpy (dizionario[5].sinonimo[2], "computo");
    strcpy (dizionario[5].sinonimo[3], "dovuto");
    strcpy (dizionario[5].sinonimo[4], "parcella");
    
    dizionario[6].lettera='g';
    strcpy(dizionario[6].nome,"giocare");
    strcpy(dizionario[6].significato,"dedicarsi a qualche esercizio piacevole per divertimento o anche per guadagno");
    strcpy (dizionario[6].sinonimo[0], "svagarsi");
    strcpy (dizionario[6].sinonimo[1], "scherzare");
    strcpy (dizionario[6].sinonimo[2], "giocherellare");
    strcpy (dizionario[6].sinonimo[3], "baloccare");
    strcpy (dizionario[6].sinonimo[4], "gareggiare");
    
    dizionario[7].lettera='h';
    strcpy(dizionario[7].nome,"hotel");
    strcpy(dizionario[7].significato,"Impresa ricettiva che fornisce un alloggio previo pagamento, utilizzato solitamente per soggiorni di breve durata e specialmente dai turisti.");
    strcpy (dizionario[7].sinonimo[0], "albergo");
    strcpy (dizionario[7].sinonimo[1], "pensione");
    strcpy (dizionario[7].sinonimo[2], "motel");
    strcpy (dizionario[7].sinonimo[3], "BnB");
    strcpy (dizionario[7].sinonimo[4], "casa vacanze");
    
    dizionario[8].lettera='i';
    strcpy(dizionario[8].nome,"incorniciare");
    strcpy(dizionario[8].significato,"mettere in cornice");
    strcpy (dizionario[8].sinonimo[0], "inquadrare");
    strcpy (dizionario[8].sinonimo[1], "circondare");
    strcpy (dizionario[8].sinonimo[2], "delimitare");
    strcpy (dizionario[8].sinonimo[3], "contorinare");
    strcpy (dizionario[8].sinonimo[4], "NULL");
    
    
    dizionario[9].lettera='l';
    strcpy(dizionario[9].nome,"lontano");
    strcpy(dizionario[9].significato,"che si trova a grande distanza, che è separato da un lungo spazio");
    strcpy (dizionario[9].sinonimo[0], "distante");
    strcpy (dizionario[9].sinonimo[1], "staccato");
    strcpy (dizionario[9].sinonimo[2], "separato");
    strcpy (dizionario[9].sinonimo[3], "diviso");
    strcpy (dizionario[9].sinonimo[4], "discosto");

    
    dizionario[10].lettera='m';
    
    strcpy(dizionario[10].nome,"maldestro");
    strcpy(dizionario[10].significato,"inesperto; non abile");
    strcpy (dizionario[10].sinonimo[0], "incapace");
    strcpy (dizionario[10].sinonimo[1], "inesperto");
    strcpy (dizionario[10].sinonimo[2], "inabile");
    strcpy (dizionario[10].sinonimo[3], "goffo");
    strcpy (dizionario[10].sinonimo[4], "sprovveduto");

    dizionario[11].lettera='n';
    strcpy(dizionario[11].nome,"nano");
    strcpy(dizionario[11].significato,"che ha dimensioninotevolmente ridotte rispetto alla norma");
    strcpy (dizionario[11].sinonimo[0], "piccolo");
    strcpy (dizionario[11].sinonimo[1], "basso");
    strcpy (dizionario[11].sinonimo[2], "bassissimo");
    strcpy (dizionario[11].sinonimo[3], "di bassissima statura");
    strcpy (dizionario[11].sinonimo[4], "minuscolo");
    
    
    
    dizionario[12].lettera='o';
    strcpy(dizionario[12].nome,"origliare");
    strcpy(dizionario[12].significato,"ascoltare di nascosto");
    strcpy (dizionario[12].sinonimo[0], "orecchiare");
    strcpy (dizionario[12].sinonimo[1], "usciolare");
    strcpy (dizionario[12].sinonimo[2], "spiare");
    strcpy (dizionario[12].sinonimo[3], "NULL");
    strcpy (dizionario[12].sinonimo[4], "NULL");

    dizionario[13].lettera='p';
    strcpy(dizionario[13].nome,"peso");
    strcpy(dizionario[13].significato,"forza che un corpo esercita su ciò che losostiene per effetto della gravità terrestre");
    strcpy (dizionario[13].sinonimo[0], "pesantezza");
    strcpy (dizionario[13].sinonimo[1], "zavorra");
    strcpy (dizionario[13].sinonimo[2], "carico");
    strcpy (dizionario[13].sinonimo[3], "pesatura");
    strcpy (dizionario[13].sinonimo[4], "pesante");
    
    dizionario[14].lettera='q';
    strcpy(dizionario[14].nome,"quadrare");
    strcpy(dizionario[14].significato,"ridurre a forma quadrata");
    strcpy (dizionario[14].sinonimo[0], "squadrare");
    strcpy (dizionario[14].sinonimo[1], "rinquadrare");
    strcpy (dizionario[14].sinonimo[2], "equilibrare");
    strcpy (dizionario[14].sinonimo[3], "coincidere");
    strcpy (dizionario[14].sinonimo[4], "combaciare");
    
    dizionario[15].lettera='r';
    strcpy(dizionario[15].nome,"razzare");
    strcpy(dizionario[15].significato,"disegnare un tessuto, un foglio di carta o altro con figure simili a raggi");
    strcpy (dizionario[15].sinonimo[0], "NESSUNO");
   

    
    dizionario[16].lettera='s';
    
    strcpy(dizionario[16].nome,"sottile");
    strcpy(dizionario[16].significato,"che ha spessore o grossezza inferiore alla media");
    strcpy (dizionario[16].sinonimo[0], "fine");
    strcpy (dizionario[16].sinonimo[1], "magro");
    strcpy (dizionario[16].sinonimo[2], "affilato");
    strcpy (dizionario[16].sinonimo[3], "aguzzo");
    strcpy (dizionario[16].sinonimo[4], "accurato");
    
    dizionario[17].lettera='t';
    strcpy(dizionario[17].nome,"trovare");
    strcpy(dizionario[17].significato,"rinvenire una cosa che si cerca, che si desidera, di cui si vuole disporre");
    strcpy (dizionario[17].sinonimo[0], "scorgere");
    strcpy (dizionario[17].sinonimo[1], "vedere");
    strcpy (dizionario[17].sinonimo[2], "rivelare");
    strcpy (dizionario[17].sinonimo[3], "segnalare");
    strcpy (dizionario[17].sinonimo[4], "rinvenire");
    
    dizionario[18].lettera='u';
    strcpy(dizionario[18].nome,"utile");
    strcpy(dizionario[18].significato," che può essere usato, che può appagare un bisogno.");
    strcpy (dizionario[18].sinonimo[0], "efficace");
    strcpy (dizionario[18].sinonimo[1], "valido");
    strcpy (dizionario[18].sinonimo[2], "vantaggioso");
    strcpy (dizionario[18].sinonimo[3], "proficuo");
    strcpy (dizionario[18].sinonimo[4], "giovevole");
    
    dizionario[19].lettera='v';
    strcpy(dizionario[19].nome,"vero");
    strcpy(dizionario[19].significato,"che possiede realmente la qualità che gli si attribuisce");
    strcpy (dizionario[19].sinonimo[0], "reale");
    strcpy (dizionario[19].sinonimo[1], "effettivo");
    strcpy (dizionario[19].sinonimo[2], "autentico");
    strcpy (dizionario[19].sinonimo[3], "puro");
    strcpy (dizionario[19].sinonimo[4], "originale");
    
    dizionario[20].lettera='z';
    strcpy(dizionario[20].nome,"zona");
    strcpy(dizionario[20].significato,"che possiede realmente la qualità che gli si attribuisce");
    strcpy (dizionario[20].sinonimo[0], "fascia");
    strcpy (dizionario[20].sinonimo[1], "porzione");
    strcpy (dizionario[20].sinonimo[2], "territorio");
    strcpy (dizionario[20].sinonimo[3], "area");
    strcpy (dizionario[20].sinonimo[4], "striscia");

    

}



int ricerca_parola(struct parola dizionario[], int n, char chiave[]){
    
    int p,u,m;
    
    p = 0;
    
    u = n-1;
    
    while(p<=u) {
        
        m = (p+u)/2;
        
        if (strcmp(dizionario[m].nome,chiave)==0)
            
            return m; // valore x trovato alla posizione m
        
        if (strcmp(dizionario[m].nome,chiave) < 0)
            
            p = m+1;
        
        else
            
            u = m-1;
        
    }
    
    // se il programma arriva a questo punto vuol dire che
    
    // il valore x non è presente in lista, ma se ci fosse
    
    // dovrebbe trovarsi alla posizione u (nota che qui p==u)
    
    return -1;
    
}

3 Risposte

  • Re: Eliminare una Parola dal Dizionario C

    Potresti eseguire una semplice cancellazione "logica". Aggiungi un flag nella struttura che ti dice se il record è attivo oppure cancellato; la cancellazione si limiterà ad attivare (o disattivare, dipende da come la imposti) tale flag.
  • Re: Eliminare una Parola dal Dizionario C

    Sono alle prime armi, non è che potresti farmi un esempio?
  • Re: Eliminare una Parola dal Dizionario C

    struct parola {                        //dichiarazione della struct dizionario: formata da quattro elementi di tipo char
        int deleted;
        char lettera;
        char nome [50];
        char significato [500];
        char sinonimo [5][20];
    } dizionario [100];
    
Devi accedere o registrarti per scrivere nel forum
3 risposte