Problema sulla creazione di un dizionario in c

di il
5 risposte

Problema sulla creazione di un dizionario in c

Salve ragazzi, di seguito vi mostro il problema che da un pò di giorni mi sta togliendo abbastanza tempo e riguarda la simulazione della gestione di un dizionario. Tale simulazione può essere fatta utlizzando anche 3-4 parole, di seguito vi inoltro la traccia:

Si vuole simulare la gestione di un dizionario della lingua italiana. Il dizionario è
indicizzato tramite le lettere dell’alfabeto ed ogni parola contiene il significato.
Permettere all’utente di:
• Inserire una parola, ricercarla nel dizionario e visualizzare il significato
• Visualizzare la parola del dizionario contenente più consonanti.

Dopo un poco di tempo sono riuscito a buttar giù un poco di codice, ma mi sono bloccato.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct parola{
char *nome;
char *significato;};

int ric_bin(char *chiave, char elenco[], int n)
{
int primo=0, mediano, ultimo=n-1;
while(primo<ultimo)
{
    mediano=(primo+ultimo)/2;
if(chiave==elenco[mediano])
    return elenco[mediano];
else if(chiave<elenco[mediano])
    ultimo=mediano-1;
else
    primo=mediano+1;
}
return -1;
}

int main()
{
int i,j,k;
char *temp;
/*ARRAY DI STRUCT*/
struct parola dizionario[3]=
{{"cane","Il cane e' un mammifero appartenente all'ordine Carnivora, della famiglia dei canidi"},
{"diligenza","La diligenza e' l'assiduita', la precisione, lo scrupolo perseguiti nello svolgimento di un lavoro o di un compito"},
{"corso","Serie di lezioni ordinata secondo un criterio di progressivo apprendimento"},
};
/*ORDINA TRAMITE L'INDICE*/
for(i=0;i<5;i++)
   {for(j=i+1;j<5;j++)
{if(strcmp(dizionario[i].nome,dizionario[j].nome)<0)
{
temp=dizionario[j].nome;
dizionario[j].nome=dizionario[i].nome;
dizionario[i].nome=temp;
}
}
}
printf("\n");
}

5 Risposte

  • Re: Problema sulla creazione di un dizionario in c

    Usa i tag CODE, altrimenti il codice è illeggibile.
  • Re: Problema sulla creazione di un dizionario in c

    Ecco, ora dovrebbe essere leggibile
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct parola{
    char *nome;
    char *significato;};
    
    int main()
    {
    int i,j,k;
    char *parola_digitata;
    char *temp;
    /*ARRAY DI STRUCT*/
    struct parola dizionario[3]=
    {{"cane","Il cane e' un mammifero appartenente all'ordine Carnivora, della famiglia dei canidi"},
    {"diligenza","La diligenza e' l'assiduita', la precisione, lo scrupolo perseguiti nello svolgimento di un lavoro o di un compito"},
    {"corso","Serie di lezioni ordinata secondo un criterio di progressivo apprendimento"},
    };
    /*ORDINA TRAMITE L'INDICE*/
    for(i=0;i<3;i++)
       {for(j=i+1;j<3;j++)
    {if(strcmp(dizionario[i].nome,dizionario[j].nome)<0)
    {
    strcpy(temp,dizionario[j].nome);
    strcpy(dizionario[j].nome,dizionario[i].nome);
    strcpy(dizionario[i].nome,temp);
    }
    }
    }
    printf("\n");
    printf("Inserisci la parola che vuoi cercare all'interno del tuo dizionario:");
    gets(parola_digitata);
    }
    
    
    /*FUNCTION PER LA RICERCA DELLA PAROLA*/
    int ric_bin(char *chiave, char elenco[], int n)
    {
    int primo=0, mediano, ultimo=n-1;
    while(primo<ultimo)
    {
        mediano=(primo+ultimo)/2;
    if(strcmp(chiave,elenco[mediano])==0)
        return mediano;
    else if(chiave<elenco[mediano])
        ultimo=mediano-1;
    else
        primo=mediano+1;
    }
    return -1;
    }
    
  • Re: Problema sulla creazione di un dizionario in c

    Questo tipo di esercizi viene meglio se cominci a dividere il tutto per step:
  • Re: Problema sulla creazione di un dizionario in c

    Andrea Quaglia ha scritto:


    Questo tipo di esercizi viene meglio se cominci a dividere il tutto per step:
    ma se faccio una matrice di stringhe secondo te è troppo rozzo? Al posto di usare struct
  • Re: Problema sulla creazione di un dizionario in c

    A che ti serve il programma? E' un esercizio, od una cosa che dovrà lavorare?
    Perché se è un esercizio, allora dipende dall'argomento dell'esercizio.
    Se deve lavorare, dipende da altri fattori (velocità di accesso/ricerca, memoria occupata).
    Comunque, non è necessaria la matrice di stringhe (immagino 2xN), bastano due vettori di stringhe che usano lo stesso indice.
Devi accedere o registrarti per scrivere nel forum
5 risposte